Constat
Au 2026-08-26T08:20Z, 23 PRs ouvertes et bloquees echouent toutes sur le meme check requis — Require Grain tag (block on absent, ...) de variation-tag-guard.yml — parce qu'aucune ne porte de ligne Grain: dans son body.
Mesure, avec son controle positif (le zero d'un detecteur ne vaut rien sans lui) :
#12627 (mergee, check SUCCESS) -> ligne 1 : "Grain: MED/notebook-python — lane myia-po-2025:CoursIA — prev: MED/qc #12611"
23 PRs bloquees -> `grep -ic grain` sur le body = 0 (zero occurrence, pas zero ligne conforme)
Le garde n'est pas en cause et n'est pas neuf : il vit depuis fee88b166 (2026-08-19), corrige jusqu'a a8f96fafb (2026-08-24), et rend SUCCESS sur les PRs correctement taguees mergees ce matin. L'omission est reelle.
Le defaut structurel — un piege qui se referme
Ces 23 PRs ne sont pas simplement rouges : elles sont orphelines, et par le meme mecanisme qui les rend rouges.
- Le tag
Grain: porte la clause lane <machine:workspace> — c'est le seul rattachement d'une PR a une lane, la flotte poussant massivement sous jsboige.
- Le garde « une lane repare son propre rouge d'abord » (proactive-coordination.md R5) selectionne les PRs bloquees par lane.
- Une PR sans tag n'appartient donc a aucune lane, n'apparait dans le rouge de personne, et n'est jamais reprise.
pick_idle_grain.py le dit deja explicitement en pied de sortie (« ne sont imputables a aucune lane -- ce garde ne les voit pas. Leur tag manquant est lui-meme le defaut a corriger ») : l'outil sait, mais l'information n'atteint aucun acteur qui agisse. C'est un signal sans destinataire.
Le resultat est un residu qui grossit en silence : 23 PRs sur ~48 h (creees du 08-24T21:44 au 08-26T02:40), soit du travail ecrit, pousse, et perdu de vue.
Ce qui manque — un organe, pas de la vigilance
Le rappel « n'oubliez pas le tag » a deja ete fait et ne tient pas. Deux pistes, non exclusives :
- (a) Rendre l'omission visible a son auteur au moment ou elle se produit. Le garde echoue deja, mais son message se noie dans un rollup de dizaines de checks en file. Un commentaire sticky nommant explicitement le geste (« ajoute
Grain: <TIER>/<GENRE> — lane <machine:workspace> — prev: <...> #<PR> en tete de body ») serait lu.
- (b) Router les orphelines vers un destinataire. Soit vers l'auteur GitHub quand il est discriminant (ici : 11 des 23 sont de
myia-po-2023, directement attribuables), soit vers le coordinateur comme file explicite — le harnais dit deja que « le rouge sans lane est a ai-01 », mais rien ne la lui presente : il faut la deriver a la main depuis --json unattributed_blocked.
La piste (b) a un cout nul cote lane et rend le residu adressable ; la (a) previent sa formation. Les deux ensemble ferment la boucle.
Liste au 2026-08-26T08:20Z
myia-po-2023 (11) : #13062, #13035, #13027, #13026, #13019, #13017, #13016, #12882, #12876, #12875, #12866
jsboige (12) : #13007, #13006, #13001, #12999, #12997, #12994, #12980, #12979, #12951, #12949, #12849, #12829
Les 11 premieres sont attribuables par auteur et repartent vers leur lane. Les 12 secondes exigent une derivation (claim d'issue liee, nom de branche) — c'est precisement le travail que le tag existe pour eviter.
Note
Deux de ces PRs (#12951 « levee narree ne leve plus », #12949 « close-the-loop Hermes ») corrigent le merge-gate lui-meme, et se trouvent bloquees par ce piege. Meme famille que #13083 et #13022 : un ecart entre ce que la prose prescrit et ce que les organes voient.
Constat
Au 2026-08-26T08:20Z, 23 PRs ouvertes et bloquees echouent toutes sur le meme check requis —
Require Grain tag (block on absent, ...)devariation-tag-guard.yml— parce qu'aucune ne porte de ligneGrain:dans son body.Mesure, avec son controle positif (le zero d'un detecteur ne vaut rien sans lui) :
Le garde n'est pas en cause et n'est pas neuf : il vit depuis
fee88b166(2026-08-19), corrige jusqu'aa8f96fafb(2026-08-24), et rendSUCCESSsur les PRs correctement taguees mergees ce matin. L'omission est reelle.Le defaut structurel — un piege qui se referme
Ces 23 PRs ne sont pas simplement rouges : elles sont orphelines, et par le meme mecanisme qui les rend rouges.
Grain:porte la clauselane <machine:workspace>— c'est le seul rattachement d'une PR a une lane, la flotte poussant massivement sousjsboige.pick_idle_grain.pyle dit deja explicitement en pied de sortie (« ne sont imputables a aucune lane -- ce garde ne les voit pas. Leur tag manquant est lui-meme le defaut a corriger ») : l'outil sait, mais l'information n'atteint aucun acteur qui agisse. C'est un signal sans destinataire.Le resultat est un residu qui grossit en silence : 23 PRs sur ~48 h (creees du 08-24T21:44 au 08-26T02:40), soit du travail ecrit, pousse, et perdu de vue.
Ce qui manque — un organe, pas de la vigilance
Le rappel « n'oubliez pas le tag » a deja ete fait et ne tient pas. Deux pistes, non exclusives :
Grain: <TIER>/<GENRE> — lane <machine:workspace> — prev: <...> #<PR>en tete de body ») serait lu.myia-po-2023, directement attribuables), soit vers le coordinateur comme file explicite — le harnais dit deja que « le rouge sans lane est a ai-01 », mais rien ne la lui presente : il faut la deriver a la main depuis--json unattributed_blocked.La piste (b) a un cout nul cote lane et rend le residu adressable ; la (a) previent sa formation. Les deux ensemble ferment la boucle.
Liste au 2026-08-26T08:20Z
myia-po-2023(11) : #13062, #13035, #13027, #13026, #13019, #13017, #13016, #12882, #12876, #12875, #12866jsboige(12) : #13007, #13006, #13001, #12999, #12997, #12994, #12980, #12979, #12951, #12949, #12849, #12829Les 11 premieres sont attribuables par auteur et repartent vers leur lane. Les 12 secondes exigent une derivation (claim d'issue liee, nom de branche) — c'est precisement le travail que le tag existe pour eviter.
Note
Deux de ces PRs (#12951 « levee narree ne leve plus », #12949 « close-the-loop Hermes ») corrigent le merge-gate lui-meme, et se trouvent bloquees par ce piege. Meme famille que #13083 et #13022 : un ecart entre ce que la prose prescrit et ce que les organes voient.