Le defaut
pick_idle_grain.py impute un rouge « a la base » quand il voit le meme nom de check sur plusieurs PRs de lanes differentes. Sortie observee le 2026-09-04 sur myia-po-2026:CoursIA-2 et myia-po-2027:CoursIA-2 :
ROUGE IMPUTE A LA BASE -- pas le votre, pas reparable par la lane :
- Always-on guards -- 12 organes, 1 checkout : corrobore par #14184, #14244, #14262, #14474, #14475, #14483, ...
- PR gate : corrobore par #14184, #14244, ...
Ces rouges ne comptent pas dans le refus. La cause est sur main :
tache COORDINATEUR (unique reparateur possible), a router sur le
dashboard ou en DM ai-01.
Always-on guards -- 12 organes, 1 checkout est un agregat. Son nom est identique quel que soit l'organe enfant qui tombe. La corroboration par nom mesure donc « plusieurs PRs echouent cet agregat », jamais « plusieurs PRs echouent pour la meme cause » — et c'est la seconde proposition que la sortie affirme.
La mesure qui le contredit
Annotations lues une par une, meme jour, sur les PRs que le picker cite comme corroborantes :
| PR |
run |
organe en echec (annotation) |
| #14184 |
33828754186 |
prev_guard — prev: pointe #14182 non mergee |
| #14244 |
33828754023 |
prev_guard — prev: pointe #14226, qui n'est pas une PR |
| #14262 |
33828757172 |
fastlane — genre notebook-pedagogy hors enumeration §1 |
| #14474 |
33755828136 |
perimeter — assertion contredite par la liste de fichiers |
| #14475 |
33837626455 |
prev_guard + perimeter |
| #14483 |
33840878309 |
perimeter |
| #14495 |
33828393720 |
prev_guard — prev: pointe #14493 non mergee |
| #14558 |
33833457994 |
adjacency — G-VAR-3, guard succede a guard |
Huit PRs, quatre organes distincts, zero cause commune sur main. Chacune est reparable par sa lane, le plus souvent par une ligne de body.
Meme forme sur PR gate, qui est lui aussi un agregat : [pr-gate] FAIL -- failing checks: ICT ict/tests/ (42 package) sur #14548 (run 33841412963) et #14559 (run 33841162016) — un test de lane, pas un defaut de base.
Pourquoi ca coute cher
C'est un defaut d'attribution symetrique, et les deux moities se referment l'une sur l'autre :
- la lane lit « pas reparable par la lane, tache COORDINATEUR » et n'y touche pas ;
- le coordinateur applique R5 de
proactive-coordination.md (« une PR rouge ne peut etre reparee que par sa lane ») et n'y touche pas non plus ;
- la PR gele.
Mesure du 2026-09-04T05:50Z : 8 PRs gelees 45 a 62 h, sur 5 lanes, alors que le debit de merge de la flotte etait nominal (81 / 175 / 114 merges les trois jours precedents). Le picker prive en outre ces PRs de son propre mecanisme de reparation-d'abord : le motif « ROUGE IMPUTE A LA BASE » les exclut du refus de tirage, donc la lane recoit un grain neuf et laisse son rouge derriere elle — exactement le residu que R5 existe pour empecher.
Acceptance
- La corroboration ne se fait plus sur le nom du check mais sur la cause : pour un check dont le job expose des annotations, comparer le message d'annotation
failure (ou l'etape en echec), pas le name du check-run.
- Un agregat (
Always-on guards, PR gate) n'est jamais imputable a la base sur la seule foi de son nom. Soit l'organe enfant est identifie et c'est lui qui porte l'attribution, soit la sortie dit qu'elle n'a pas pu trancher — et alors le rouge reste a la lane (fail-CLOSED), puisque c'est le seul cote qui peut le reparer.
- Controle positif obligatoire dans les tests : un jeu ou N PRs echouent le meme agregat pour des organes differents doit rendre « impute a la lane », et un jeu ou N PRs echouent le meme organe doit rendre « impute a la base ». Les huit PRs ci-dessus fournissent la premiere moitie du jeu telle quelle.
- Quand l'attribution reste « base », nommer l'organe dans la sortie, pas seulement l'agregat — sans quoi le coordinateur recoit un signalement qu'il doit re-mesurer entierement.
Note de methode
Un predicat d'attribution se valide par ses faux positifs ici, pas par ses hits : « il a bien signale un rouge » ne dit rien, puisqu'il en signale un dans les deux cas. Ce qui le valide est qu'il cesse de dire « base » quand les causes different.
See #13086.
Le defaut
pick_idle_grain.pyimpute un rouge « a la base » quand il voit le meme nom de check sur plusieurs PRs de lanes differentes. Sortie observee le 2026-09-04 surmyia-po-2026:CoursIA-2etmyia-po-2027:CoursIA-2:Always-on guards -- 12 organes, 1 checkoutest un agregat. Son nom est identique quel que soit l'organe enfant qui tombe. La corroboration par nom mesure donc « plusieurs PRs echouent cet agregat », jamais « plusieurs PRs echouent pour la meme cause » — et c'est la seconde proposition que la sortie affirme.La mesure qui le contredit
Annotations lues une par une, meme jour, sur les PRs que le picker cite comme corroborantes :
prev_guard—prev:pointe #14182 non mergeeprev_guard—prev:pointe #14226, qui n'est pas une PRfastlane— genrenotebook-pedagogyhors enumeration §1perimeter— assertion contredite par la liste de fichiersprev_guard+perimeterperimeterprev_guard—prev:pointe #14493 non mergeeadjacency— G-VAR-3,guardsuccede aguardHuit PRs, quatre organes distincts, zero cause commune sur
main. Chacune est reparable par sa lane, le plus souvent par une ligne de body.Meme forme sur
PR gate, qui est lui aussi un agregat :[pr-gate] FAIL -- failing checks: ICT ict/tests/ (42 package)sur #14548 (run 33841412963) et #14559 (run 33841162016) — un test de lane, pas un defaut de base.Pourquoi ca coute cher
C'est un defaut d'attribution symetrique, et les deux moities se referment l'une sur l'autre :
proactive-coordination.md(« une PR rouge ne peut etre reparee que par sa lane ») et n'y touche pas non plus ;Mesure du 2026-09-04T05:50Z : 8 PRs gelees 45 a 62 h, sur 5 lanes, alors que le debit de merge de la flotte etait nominal (81 / 175 / 114 merges les trois jours precedents). Le picker prive en outre ces PRs de son propre mecanisme de reparation-d'abord : le motif « ROUGE IMPUTE A LA BASE » les exclut du refus de tirage, donc la lane recoit un grain neuf et laisse son rouge derriere elle — exactement le residu que R5 existe pour empecher.
Acceptance
failure(ou l'etape en echec), pas lenamedu check-run.Always-on guards,PR gate) n'est jamais imputable a la base sur la seule foi de son nom. Soit l'organe enfant est identifie et c'est lui qui porte l'attribution, soit la sortie dit qu'elle n'a pas pu trancher — et alors le rouge reste a la lane (fail-CLOSED), puisque c'est le seul cote qui peut le reparer.Note de methode
Un predicat d'attribution se valide par ses faux positifs ici, pas par ses hits : « il a bien signale un rouge » ne dit rien, puisqu'il en signale un dans les deux cas. Ce qui le valide est qu'il cesse de dire « base » quand les causes different.
See #13086.