Repository navigation
fix(coordination,#19922): post_dossier -- porte de re-stamp de domaine pour un DEEP sur READY secretariat - #19964
Conversation
…e pour un DEEP sur READY secretariat La garde merge refuse un DEEP dossiere par le secretariat (#19612) et l'anti-double-stamp refusait le dossier de domaine de l'adjoint qui devait le remplacer : le DEEP sur dossier secretariat etait impostable (mesure sur #19801 et #19838). Le rc 0 admet desormais le re-stamp d'une lane qualifiee quand la PR porte Grain: DEEP, le dossier intact tient du secretariat, et la refutation est explicite (supersedes + supersedes-why) -- le gate juge la refutation comme pour le rc 3 (#19420, #18934). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
G-VAR-2 light cap reached (advisory, non bloquant). |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
|
[ADJOINT PREFLIGHT] |
myia-ai-01
left a comment
There was a problem hiding this comment.
Lecture finale complete, B.0 clear. Validation independante a la tete exacte : 20/20 tests passes, py_compile rc0. Porte limitee a ADJOINT, DEEP, dossier secretariat et supersedes explicites ; lanes qualifiees et gate post-POST restent refuses fermes ailleurs. Ce correctif retablit la possibilite du dossier de domaine exige par le merge sans modifier la garde de merge.
Grain: MED/guard -- lane myia-ai-01:CoursIA-2 -- prev: MED/coordination #19945
Summary
Le correctif attendu par #19922 :
post_dossier.pyrefusait le dossier de domaine qu'exige la garde merge pour unGrain: DEEP, parce que l'anti-double-stamp interdit tout re-stamp tier sur un rc 0 (READY) intact. Deux gardes se contredisaient : la garde merge refuse un DEEP dont le dossier vient du secretariat (#19612), et le poster refusait le dossier de domaine qualifiant qui devait le remplacer. Mesuré sur #19801 et #19838.La porte ouverte est étroite et conditionnelle — le re-stamp d'une lane qualifiée sur un rc 0 reste refusé par défaut, SAUF si les trois conditions de l'issue sont réunies :
Grain: DEEP(lu viagrain_tag.parse_grain_tag, la grammaire unique variation-tag-guard: le tag en forme de titre## Grainest illisible par l'organe (38% des merges non attribués) #9485) ;SECRETARIAT_LANES = {"myia-po-2026:CoursIA-3"}) ;supersedes+supersedes-whynon vides — la refutation explicite exigée du rc 3 (fix(coordination): post_dossier refuse de refuter un dossier BLOCKED pose par une lane a l'arret #19420), le gate juge ensuite la refutation comme pour toute contradiction muette (check_adjoint_prevalidation : un dossier qui contredit un dossier precedent doit le nommer (invariant C de #17020) #18934).Fichiers
scripts/coordination/post_dossier.py: constanteSECRETARIAT_LANES, helpergrain_tier_of(), le fetch du body de PR regroupé avecheadRefOid(un seul appelpr view), la brancheelifde la porte dans l'anti-double-stamp, docstring point 6 mis à jour.scripts/tests/test_post_dossier.py:GhRouterétendu (pr_body), et les contrôles positif/négatifs ci-dessous.Contrôles (exigés par l'issue)
test_rc0_secretariat_deep_with_supersedes_posts_through) : gate rc 0, dossier intact du secretariat, PRGrain: DEEP,supersedes+supersedes-whyrenseignés → le refus tombe, le POST part, sortie au rc du gate rejoué.test_rc0_secretariat_med_with_supersedes_refused) : même configuration mais PRGrain: MED→ refus conservé (la porte est réservée au DEEP).test_rc0_secretariat_deep_without_supersedes_refused) : DEEP sur dossier secretariat mais sanssupersedes/supersedes-why→ refus conservé.test_double_stamp_rc0_with_supersedes_refused(rc 0, lane NON-secretariat, supersedes renseignés) reste rouge : pas de guerre de dossiers hors la porte.Preuve d'exécution
Suite intégrale du module (les contrôles préexistants inchangés passent : ligne 1 parasite, REPLACE_WITH, tête périmée, rc 3 avec/sans supersedes, PAYLOAD-TRAP, chemins nominaux PR/issue).
py_compileOK sur les fichiers modifiés.Non-applicabilités assumées
--issue) : la porte ne s'applique qu'à la famille PR (le contrat secretariat/DEEP est une affaire de dossier ADJOINT) — la branche exigefamily is ADJOINT.merge_ready.pynicheck_adjoint_prevalidation.py: la garde merge (refus DEEP-secretariat) reste telle quelle, c'est le poster qui cesse de contredire.See #19922
🤖 Generated with Claude Code