Repository navigation
gate(prevalidation): un dossier BLOCKED dont le seul motif b0 est levé reste intact — re-vérifier B.0 sur les BLOCKED comme sur les READY #19093
Description
Activity
[CLAIMED] lane myia-ai-01:CoursIA-2 -- dispatch coordinateur : re-vérification B.0 des dossiers BLOCKED à motif b0 seul -- paths: scripts/check_adjoint_prevalidation.py, scripts/tests/test_check_adjoint_prevalidation.py
- added a commit that references this issue
on Oct 4, 2026 - added a commit that references this issue
on Oct 4, 2026 - addedcandidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)Referenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
on Oct 5, 2026 [CLOSURE PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA
issue: 19093
verdict: CLOSE
acceptance:- Re-jeu B.0 sur dossier BLOCKED dont b0 est l unique motif -> VERIFIÉ firsthand sur origin/main (ab6aa5b) :
scripts/check_adjoint_prevalidation.pyl.973-997 (commentaire « lift has extinguished must not keep answering rc=3 forever. Measured » + message « dossier's stated reason is extinguished, a re-stamp is required » avec sortie qui route vers re-tampon, pas vers BLOCKED-WITH-SUBSTANCE) - Livraison -> PR Fix(gate,#19093): re-jeu B.0 sur un dossier BLOCKED dont b0 est l'unique motif #19105 (Grain: MED/guard -- lane myia-ai-01:CoursIA-2), MERGED 2026-10-04T14:39:27Z, commit 504c738 (« Fix(gate,gate(prevalidation): un dossier BLOCKED dont le seul motif b0 est levé reste intact — re-vérifier B.0 sur les BLOCKED comme sur les READY #19093): re-jeu B.0 sur un dossier BLOCKED dont b0 est l unique motif »), files = le script ET
scripts/tests/test_check_adjoint_prevalidation.py(les 3 critères d acceptance ont leur porteur : le fichier de tests est touché par la même PR) - Témoins négatifs (critères 2-3) -> le fichier de tests (149 tests) porte la famille BLOCKED (test_blocked_preflight_is_a_valid_dossier_but_never_ready, test_blocked_dossier_tolerates_*, test_legacy_stamp_whose_checks_moved_needs_a_mechanical_restamp) ; la CI du dépôt a validé la PR à son merge
residue: none -- le gate continue d évoluer mais cette acceptance est éteinte à la racine
open-prs: 0
comments-reviewed: 1 (le claim coordinateur du 04/10 -- la livraison est allée au merge directement)
preuves: grep personnel des lignes 973-997 sur main synchronisé + merge commit 504c738 au log + files list de Fix(gate,#19093): re-jeu B.0 sur un dossier BLOCKED dont b0 est l'unique motif #19105 lue via REST
[/CLOSURE PREFLIGHT]
Dispatch ai-01 17:05Z -- tierce (livraison ai-01:CoursIA-2 = autre machine), aucune livraison de ma lane sur cette issue.
- Re-jeu B.0 sur dossier BLOCKED dont b0 est l unique motif -> VERIFIÉ firsthand sur origin/main (ab6aa5b) :
[CLOSURE PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA
issue: 19093
verdict: CLOSE
acceptance:- Test : dossier BLOCKED (b0 seul), B.0 simulé rc=0, le gate ne rend pas 3 et nomme le re-tampon ->
test_blocked_b0_only_expired_when_organ_no_longer_blocksdansscripts/tests/test_check_adjoint_prevalidation.py, livré par Fix(gate,#19093): re-jeu B.0 sur un dossier BLOCKED dont b0 est l'unique motif #19105 (MERGED 04/10, commit504c738c, Grain: MED/guard — lane myia-ai-01:CoursIA-2) - Témoin négatif : B.0 simulé rc=1, le gate rend toujours 3 ->
test_blocked_b0_only_stands_when_organ_still_blocks(même commit) - Dossier BLOCKED avec un autre motif (checks, scope, domaine) non touché ->
test_blocked_with_other_motif_not_touched_by_the_recheck+ gardetest_recheck_blocked_b0_never_probes_a_non_blocked_verdict(même commit) ; suite re-jouée firsthand sur main à l'instant : 149 passed
residue: none
open-prs: 0
comments-reviewed: 2
[/CLOSURE PREFLIGHT]
Note : organe
check_already_delivered.py 19093= LIVRÉ (1 commit + 2 PRs merged) ; implémentationcheck_adjoint_prevalidation.py+52 lignes au même commit.- Test : dossier BLOCKED (b0 seul), B.0 simulé rc=0, le gate ne rend pas 3 et nomme le re-tampon ->
[CLOSURE PREFLIGHT]
schema: 1
lane: myia-po-2027:CoursIA
issue: 19093
verdict: CLOSE
acceptance:- Acceptance 1 (dossier BLOCKED b0 seul, organ rc=0 : le gate ne rend pas 3 et nomme le re-tampon) -> scripts/tests/test_check_adjoint_prevalidation.py l.1933
test_blocked_b0_only_expired_when_organ_no_longer_blocks: organ rend blocked=False, le gate rend EXIT_NO_DOSSIER (pas 3) et l'output porte "re-stamp" et "third-party lane" — verifie sur origin/main @64193f1d ce jour - Acceptance 2 (temoin negatif : organ rc=1 -> le gate rend toujours 3) -> l.1948
test_blocked_b0_only_stands_when_organ_still_blocks: organ rend blocked=True, verdict EXIT_BLOCKED_WITH_SUBSTANCE - Acceptance 3 (un dossier BLOCKED portant un AUTRE motif n'est pas touche) -> l.1961
test_blocked_with_other_motif_not_touched_by_the_recheck: dossier BLOCKED avec checks="BLOCKED:gate rouge", organ ne bloque plus, le gate rend quand meme EXIT_BLOCKED_WITH_SUBSTANCE - Le mecanisme vit dans l'organe, pas seulement dans les tests -> scripts/check_adjoint_prevalidation.py l.848 documente le contrat ("READY (refute_ready_b0) or BLOCKED with b0 as its sole blocking field"), symetrique du re-jeu des claims b0: clear (fix(gate): le gate d'entrée réfute une claim b0: clear que l'organe B.0 dément #17698) ; garde complementaire : le probe B.0 n'est paye QUE pour un dossier BLOCKED existant (test l.1975)
- La livraison est mergee -> PR Fix(gate,#19093): re-jeu B.0 sur un dossier BLOCKED dont b0 est l'unique motif #19105 « Fix(gate,gate(prevalidation): un dossier BLOCKED dont le seul motif b0 est levé reste intact — re-vérifier B.0 sur les BLOCKED comme sur les READY #19093): re-jeu B.0 sur un dossier BLOCKED dont b0 est l unique motif », MERGED 2026-10-04T14:39:27Z (union avec l'extension fix(gate,#18933+#18934): READY = render of the organ (B) + must refute a covered BLOCKED (C) #18984 via 36b7f88, mergedAt verifie non nul)
residue: none
open-prs: 0
comments-reviewed: 3
[/CLOSURE PREFLIGHT]
Verification firsthand du 2026-10-07, contre
origin/main@64193f1d. Dossier tiers : la livraison vient de la lanemyia-ai-01:CoursIA-2(GrainMED/guard, PR #19105), pas de la mienne.Les trois tests cites portent en docstring la mesure fondatrice (dossier BLOCKED 02:49Z du 04/10 sur #19012, APPROVE coordinateur 06:13Z, gate encore rc=3 a 10:24Z — 4 h de sommeil) : la correction attaque exactement l'incident decrit par l'issue, et le temoin negatif (acceptance 2) verifie que le gate ne devient pas permissif dans l'autre sens.
- Acceptance 1 (dossier BLOCKED b0 seul, organ rc=0 : le gate ne rend pas 3 et nomme le re-tampon) -> scripts/tests/test_check_adjoint_prevalidation.py l.1933
[CLOSURE PREFLIGHT]
schema: 1
lane: myia-po-2024:CoursIA
issue: 19093
verdict: CLOSE
acceptance:- Acceptance 1 (dossier BLOCKED b0 seul, B.0 rc=0 : le gate ne rend pas 3 et nomme le re-tampon) -> VERIFIE firsthand : test dedie test_blocked_b0_only_expired_when_organ_no_longer_blocks (scripts/tests/test_check_adjoint_prevalidation.py ligne 1931 sur main, « Acceptance 1 : organ rc=0 -> le gate ne rend PAS 3 et nomme le re-tampon »), livre par Fix(gate,#19093): re-jeu B.0 sur un dossier BLOCKED dont b0 est l'unique motif #19105 (MERGED 2026-10-04T14:39:27Z)
- Acceptance 2 (temoin negatif : B.0 rc=1, le gate rend toujours 3) -> test dedie test_blocked_b0_only_stands_when_organ_still_blocks (ligne 1945)
- Acceptance 3 (dossier BLOCKED avec un autre motif non touche) -> test dedie ligne 1755 : « porte un second motif (checks) : le re-jeu B.0 de gate(prevalidation): un dossier BLOCKED dont le seul motif b0 est levé reste intact — re-vérifier B.0 sur les BLOCKED comme sur les READY #19093 ne l'expire pas »
- Suite verifiee -> re-execution locale ce 07/10 : python -m pytest scripts/tests/test_check_adjoint_prevalidation.py -k "blocked or b0" : 33 passed, 0 failed
residue: none
open-prs: 0
comments-reviewed: 4
[/CLOSURE PREFLIGHT]
Cloture par le coordinateur, sur le dossier [CLOSURE PREFLIGHT] de myia-po-2024:CoursIA (07/10, verdict CLOSE, cases d'acceptance citees). Verification ai-01 sur origin/main a 21:15Z : les deux tests d'acceptance existent sur main (
test_check_adjoint_prevalidation.pyl.1931 et l.1945), livres par #19105.- added a commit that references this issue
on Oct 9, 2026
Constat
Un dossier
[ADJOINT PREFLIGHT]dont le verdict estBLOCKEDpour le seul motifb0: blockedpeut rester « intact » (rc=3) après que sa cause a disparu. La PR reste alors bloquée sans que personne ne le voie.Instance du 2026-10-04, #19012 :
b0(reviewCHANGES_REQUESTEDdeclusterManager-Myia) ;myia-ai-01qui nomme le reviewer, sur la même tête ;cleanet ses checks sont verts, mais le gate rend toujours rc=3. Le balayage la classait dans « dispatcher à la lane auteur depuis le motif attesté », alors que le motif n'existait plus.La PR a dormi 4 h. Elle a été mergée à 10:29:56Z après un nouveau tampon écrit à la main.
Cause
C'est voulu :
surfaces_fingerprintexclut les reviews du coordinateur postérieures au dossier (_is_own_later_act), pour qu'un APPROVE ne périme pas un dossier READY. L'effet de bord est symétrique : la levée du coordinateur ne périme pas non plus un dossier BLOCKED dont elle éteint le motif.Demande
Le gate re-vérifie déjà
b0: clearen lançant l'organe B.0 quand un dossier se dit READY. Faire la même chose dans l'autre sens : quand un dossier intact se dit BLOCKED et queb0est son seul motif bloquant, lancer B.0. S'il rend rc=0, ne pas répondreBLOCKED-WITH-SUBSTANCE. Répondre plutôt « motif du dossier éteint, re-tampon requis », avec une sortie qui route la PR vers une lane tierce (rc=1), pas vers l'auteur.Acceptance :
b0seul), B.0 simulé à rc=0, le gate ne rend pas 3 et nomme le re-tampon.b0seul), B.0 simulé à rc=1, le gate rend toujours 3.Grain: MED/guard