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
fix(coordination): --emit ne produit pas supersedes/supersedes-why -- un READY sur un BLOCKED de la meme lane part puis est refuse #19869
Suite de #18934 (invariant C, livré par #18984) — l'invariant fonctionne, c'est l'outil d'émission qui n'a pas suivi. Issue dédiée parce que le défaut est d'une autre nature que l'invariant : celui-ci vit dans le gate, celui-là dans --emit.
Le défaut
--emit ne produit aucune occurrence de supersedes / supersedes-why.
Ces deux champs sont pourtant obligatoires pour tout READY qui recouvre un BLOCKED intact à la même tête (le refus mute contradiction (#18934), check_adjoint_prevalidation.py l.1285-1320). Le template ne les mentionne nulle part ; le commentaire du module les déclare OPTIONNELS au parse et hors contradiction (l.245) — exact au niveau du parseur, trompeur au niveau de l'émetteur : ils ne sont optionnels que lorsqu'il n'y a pas de contradiction, et c'est l'émetteur qui sait si c'est le cas.
Le piège qui rend le coût réel
post_dossier.pyexempte la même lane de son garde anti-double-stamp (existing_lane != args.lane). Donc, pour une lane qui re-émet sur sa propre PR : rien ne prévient avant le POST. Le dossier part, le commentaire est publié, et c'est le gate, relu après coup, qui le déclare NO-DOSSIER. Deux organes distincts, et le seul qui mord est celui qu'on interroge en second.
Le READY corrigé a été posté puis refusé : NO-DOSSIER — mute contradiction (#18934): verdict READY covers the BLOCKED dossier by jsboige … at the same head without refuting it.
Un commentaire de bruit laissé sur la PR (6051555127), plus un cycle de re-émission.
Le champ domain était par ailleurs à corriger à la main (not-applicable → pass, mesuré par detect_md_content_loss.py).
Correctif proposé
Quand le gate détecte la contradiction pendant --emit, ajouter les deux champs au template, pré-remplis : supersedes: <position> (il la connaît — c'est celle qu'il cite dans son refus) et supersedes-why: <a completer>. L'émetteur n'a pas à décider à la place de l'auteur ce qui est réfuté ; il doit seulement nommer les champs qui manquent, au lieu de laisser l'auteur découvrir la règle par un refus.
Alternative équivalente : faire avertir post_dossier.py avant le POST quand le gate rend NO-DOSSIER par contradiction. Les deux se cumulent sans se remplacer — le premier évite l'aller-retour, le second évite le bruit.
Portée
Toute lane qui émet un dossier — l'adjoint et, à terme, les auteurs élargis de #17020. Le défaut n'est pas propre à une machine : il vit dans l'outil partagé.
Gouvernance
Correctif d'organe du harnais : PR + sign-off user avant merge (CLAUDE.md §A), comme #18934.
Activity
jsboige commentedon Oct 8, 2026
[CLAIMED] lane myia-ai-01:CoursIA-2 -- correctif d'organe check_adjoint_prevalidation.py --emit (ajout supersedes/supersedes-why quand BLOCKED prealable a meme tete)
fix(coordination,#19869): monkeypatch probe_b0 dans les 5 tests rende…
fix(coordination,#19869): --emit pre-renseigne supersedes/supersedes-…
Fix(check_adjoint,#19869): la detection du dossier couvert a un coeur…
Fix(check_adjoint,#19869): la detection du dossier couvert a un coeur…