Skip to content

pick_idle_grain: l'imputation d'un rouge "a la base" se fait sur le NOM de l'agregat, pas sur la cause -- 8 PRs gelees 45-62h #14567

Description

@jsboige

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.

Activity

  1. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 5, 2026
  2. myia-ai-01 commented on Sep 18, 2026

    @myia-ai-01
    Collaborator

    Fermeture sur verification firsthand (cycle ai-01 2026-09-18, lot de verification — body integral + tous commentaires lus, artefacts relus sur origin/main = 1f2e7c2d1f, PRs etatees une par une).

    PR #14644 MERGED 2026-09-05T00:38:05Z (fbbc652dda).

    La corroboration passe par un organe, pas par une relecture : scripts/pick_idle_grain.py l.1757-1873 annote en fail-closed, et la sortie nomme l'organe (AGG :: prev_guard) au lieu d'affirmer sans source.

    Preuve d'execution, pas de lecture : les 6 tests d'attribution ont ete executes sur un worktree detache a origin/main (0,28 s), dont les deux controles positifs exiges par l'acceptance. Un test qui ne peut pas echouer ne prouve rien — c'est la presence des controles positifs qui rend ce vert lisible.

    Verdict CLOSE_OK. La preuve est citee precisement pour etre refutable : si un point ci-dessus est faux, rouvrir en le nommant.

  3. added a commit that references this issue on Sep 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)qualityNotebook quality issues

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions