Repository navigation
pick_idle_grain: les points de review de moins de 24 h ne sont pas assignes en reparation (faux negatif mesure) #15139
Description
Le fait
pick_idle_grain.py n'a pas assigné la réparation de ses points de review à myia-po-2027:CoursIA-2, alors que cette lane porte trois PRs ouvertes avec des remarques non levées — dont deux du user lui-même.
Mesuré le 2026-09-07 vers 23:00Z :
$ python scripts/pick_idle_grain.py --lane myia-po-2027:CoursIA-2 --prev-genre ledger
ROUGE IMPUTE A LA BASE -- pas le votre, pas reparable par la lane:
PR gate : organe non lisible sur #15104, #15111
[... puis tirage normal de candidats : #13378, #14367, #11840, #14214, #13993, #12933]
RC=0
Le picker signale un rouge non imputable et passe directement au tirage. Les trois PRs à points non levés de la lane ne sont nommées nulle part :
| PR | Remarque non levée | Auteur | Posée le |
|---|---|---|---|
| #15051 | « c'est beaucoup trop léger… un enrichissement substantiel… pas une note de bas de page » | user | 2026-09-07T13:26Z |
| #15081 | « Flee… le remplacer par un toy modèle n'est pas ce qu'il faut faire » | user | 2026-09-07T15:35Z |
| #15049 | même motif que #15051 (verdict de genre du user, applicable à la tranche) | user (par portée) | — |
L'écart entre le texte de la règle et le comportement de l'organe
proactive-coordination.md §R5 énonce que la réparation de son propre rouge est assignée par le picker, que les points de review passent en premier des quatre causes, et que — littéralement — « le picker délègue la détection à check_unaddressed_nits.analyse, le même organe que le merge-gate — s'ils divergeaient, une lane serait autorisée à produire du neuf sur une PR que le merge-gate refusera ».
C'est exactement la divergence observée. Ce n'est pas une hypothèse : la conséquence prédite par la règle s'est produite. La lane a passé plusieurs cycles à se déclarer sans grain frais (« narrow-sec Tell sustained cycle 6 », « 0 grain CONTENU claimable frais », menace d'escalade au cycle 7) alors qu'elle portait trois réparations prioritaires, dont deux demandes directes du user.
Piste de cause — la fenêtre de 24 h
La même règle borne l'assignation aux PRs « bloquées et ouvertes depuis plus de 24 h ». Les deux nits user datent du 2026-09-07 après-midi ; au moment de la mesure ils avaient ~8-10 h. Si la borne de 24 h s'applique aussi à la cause « point de review non levé », alors l'organe se comporte comme codé — et c'est la règle qui a le défaut, pas le script.
C'est la lecture que je privilégie, et elle rend le défaut plus intéressant qu'un bug : la fenêtre de 24 h a du sens pour un check CI rouge (laisser le temps à un re-run, à une base qui bouge), et aucun pour un nit user, qui est actionnable à la seconde où il est écrit et qui ne se résoudra jamais tout seul. Les quatre causes n'ont pas la même dynamique temporelle, et la borne les traite pareil.
À trancher
- Vérifier lequel des deux : la borne de 24 h s'applique-t-elle à la cause « point de review », ou
analysen'est-elle simplement pas appelée sur ce chemin ? Le code tranche en quelques minutes. - Si c'est la borne : exempter la cause « point de review non levé » du délai — cohérent avec sa place déjà première dans l'ordre des quatre causes.
- Contrôle positif obligatoire : le correctif se valide en rejouant
--lane myia-po-2027:CoursIA-2et en vérifiant que feat(slides,#15023): ancrer le deck 02-resolution-problemes sur le corpus notebooks Search/CSP/Sudoku #15051, feat(slides,#15023): ancrer le deck 01-introduction sur le corpus notebooks (citations verifiees) #15049 et feat(backtester,#7357): tranche 6B-4 -- couche strategies Core (bande market-maker) + adaptateur Flee 2.0.0 (SOTA-OK) #15081 sont nommées. Un organe de détection se valide par ses faux négatifs, jamais par ses hits — la présente issue est le faux négatif de référence, elle sert de fixture.
Portée
Le défaut n'est pas propre à cette lane : toute lane portant un nit de moins de 24 h le subit. myia-po-2023:CoursIA-2 était dans le même cas ce cycle (#15029, trois points confirmés ; #15070, réserve Adjoint).
En attendant le correctif, c'est le coordinateur qui couvre la fenêtre — j'ai relayé les six réparations à la main ce cycle. Ce rattrapage manuel n'est pas une solution : c'est précisément ce qu'un organe existe pour rendre inutile.
Activity
jsboige commentedon Sep 8, 2026
[CLAIMED] #15139 — myia-po-2023:CoursIA — 2026-09-08T~03:55Z — triage borne 24h vs appel de check_unaddressed_nits.analyse, exemption de la cause « point de review » le cas échéant, contrôle positif par rejeu du picker.
jsboige commentedon Sep 8, 2026
[DELIVERED] #15139 — myia-po-2023:CoursIA — 2026-09-08 — PR #15155.
Verdict sur « à trancher » : ni l'hypothèse 1 ni la 2 — la délégation était appelée ET sans borne d'âge, mais elle levait un TypeError sur chaque PR (kwarg
issue_createddisparu de la signature deanalyse, remplacé parissue_info) avalé par leexcept Exception: continue→ dict vide silencieux → cause 4 morte pour toutes les lanes. Fix structurel : point d'entrée partagéanalyse_pr()dans l'organe (l'assemblage degate()), appelé par le picker — la seconde écriture des kwargs, vecteur de la dérive, disparaît. Contrôle positif rejoué : #15049 (1 pt) + #15081 (4 pts) nommées sur le rejeu po-2027 ; #15051 (2 pts) nommée sur un rejeu po-2024 — elle porte le tag lanemyia-po-2024:CoursIA-2, vérifié firsthand, donc hors périmètre d'un rejeu po-2027 contrairement au tableau de l'issue. 4 nouveaux tests rouges sur le code d'avant, 502 tests voisins verts.fix(picker,#15139): delegation nits morte (TypeError avale) — point d…
Merge origin/main into feature/orphans-automation-exclude-14706