You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[tooling] gh_queue_health.py : plancher 18 non nomme, derive de docstring STALE_FLOOR, replay qui change la classe du verdict (suivi #13909) #13966
Trois constats de la review NanoClaw sur PR #13909 (scripts/ci/gh_queue_health.py), portes en suivi avant le merge conformement a §B.0 voie 3. Ils sont mineurs et non bloquants — la review conclut « logique de partition saine », « couverture de tests reelle (11 tests lus) », « securite OK ». Rien ici ne conteste le livrable ; ce sont trois angles qui se degraderaient silencieusement.
1 — Le plancher 18 est un nombre magique, son compagnon date ne l'est pas
verdict() (l.136) code 18 en dur, alors que INCIDENT_FLOOR_DATE existe en constante nommee juste a cote. L'asymetrie est le probleme : si un futur incident ajoute des fantomes, la signature STALE_FLOOR se degrade silencieusement en GHOST_RUNS_DETECTED sans que rien ne le dise. Un INCIDENT_FLOOR_COUNT = 18 nomme a cote de la date rend le couple lisible et le changement visible.
2 — Derive de docstring sur STALE_FLOOR
La docstring annonce « ghost count equals the known incident floor (18) ». Le code exige aussilive == 0 — conjonction reelle, testee en 18/0/0. Un lecteur de la doc attendrait donc STALE_FLOOR avec 18 fantomes et du live, et ne l'obtiendrait pas. Une phrase a corriger, pas une logique.
3 — Le replay perd les parse_failures, et change la CLASSE du verdict
load_snapshot ne resynthetise que ghosts + live. Un snapshot INCOMPLETE rejoue ressort donc CLEAN ou GHOST_RUNS_DETECTED : le verdict change de classe au replay. C'est le plus consequent des trois — un chemin de convenance qui rend un verdict different de celui qu'il rejoue n'est pas un replay, et un lecteur qui compare deux verdicts a travers un snapshot conclura faux. A propager, ou a documenter explicitement comme une perte.
Hors scope de cette issue — la note d'adoption
La review souleve un 4e point : EXIT_GHOST=1 est l'etat attendu en regime courant sur CoursIA, donc cabler l'instrument dans un step sans continue-on-error ferait echouer la CI en permanence. Ce n'est pas un defaut du script — c'est une consigne de deploiement, qui appartient a l'issue de cablage, pas ici. Elle est rappelee pour qu'elle ne se perde pas.
Acceptance
INCIDENT_FLOOR_COUNT nomme, utilise au site de verdict().
Le replay d'un snapshot INCOMPLETE rend INCOMPLETE — avec le test qui l'epingle. Si la propagation est jugee trop couteuse, la perte est ecrite dans la docstring de load_snapshot et le test epingle le comportement documente.
Chaque point porte son test : le defaut vise est precisement qu'aucun des trois ne se signale tout seul.
Substance : l'objet exact de l'issue (plancher 18 non nomme, derive de docstring STALE_FLOOR, replay qui changeait la classe du verdict dans gh_queue_health.py — les trois corriges).
Activity
fix(gh_queue_health,#13966): name floor count, fix docstring conj, pr…
fix(ci,#18215): classify closed-PR queued runs as permanent ghosts (#…
jsboige commentedon Sep 30, 2026
Verification G.9 de fermeture (tranche 8 de #15258, lane myia-po-2024:CoursIA) : fermeture legitime, aucune reouverture.
myia-ai-01a 2026-09-01T10:49:30Z,commit_id: none(fermeture manuelle).fix(gh_queue_health,#13966): name floor count, fix docstring conj, preserve INCOMPLETE on replay— MERGED a 2026-09-01T10:49:29Z (ecart 1 s) —Grain: MED/tooling — lane myia-po-2026:CoursIA. Tentative anterieure : tooling(#13966): floor non nommé, conjonction STALE_FLOOR, docstring INCOMPLETE replay #13973 (suivi de la meme issue).STALE_FLOOR, replay qui changeait la classe du verdict dansgh_queue_health.py— les trois corriges).