Skip to content

fix(coordination,#19922): post_dossier -- porte de re-stamp de domaine pour un DEEP sur READY secretariat - #19964

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/19922-post-dossier-deep-secretariat-restamp
Oct 8, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/19922-post-dossier-deep-secretariat-restamp

Conversation

@jsboige

@jsboige jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Grain: MED/guard -- lane myia-ai-01:CoursIA-2 -- prev: MED/coordination #19945

Summary

Le correctif attendu par #19922 : post_dossier.py refusait le dossier de domaine qu'exige la garde merge pour un Grain: 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 :

  1. la PR porte Grain: DEEP (lu via grain_tag.parse_grain_tag, la grammaire unique variation-tag-guard: le tag en forme de titre ## Grain est illisible par l'organe (38% des merges non attribués) #9485) ;
  2. le dossier intact qui tient le gate vient du secretariat (SECRETARIAT_LANES = {"myia-po-2026:CoursIA-3"}) ;
  3. le nouveau dossier porte supersedes + supersedes-why non 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 : constante SECRETARIAT_LANES, helper grain_tier_of(), le fetch du body de PR regroupé avec headRefOid (un seul appel pr view), la branche elif de 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)

  • Positif — rejeu causal du refus Fix(qc,#19744): aligne la prose QC-Py-19 sur la sortie reexecutee (cellules 36 et 40) #19801 (test_rc0_secretariat_deep_with_supersedes_posts_through) : gate rc 0, dossier intact du secretariat, PR Grain: DEEP, supersedes + supersedes-why renseignés → le refus tombe, le POST part, sortie au rc du gate rejoué.
  • Négatif MED (test_rc0_secretariat_med_with_supersedes_refused) : même configuration mais PR Grain: MED → refus conservé (la porte est réservée au DEEP).
  • Négatif sans refutation (test_rc0_secretariat_deep_without_supersedes_refused) : DEEP sur dossier secretariat mais sans supersedes/supersedes-why → refus conservé.
  • Le contrôle négatif préexistant 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

python -m pytest scripts/tests/test_post_dossier.py -q
20 passed in 0.39s

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_compile OK sur les fichiers modifiés.

Non-applicabilités assumées

  • Familles closure (--issue) : la porte ne s'applique qu'à la famille PR (le contrat secretariat/DEEP est une affaire de dossier ADJOINT) — la branche exige family is ADJOINT.
  • Aucun changement côté merge_ready.py ni check_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

…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>
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-ai-01:CoursIA-2 a deja consomme son budget LIGHT du jour (axe genre G-VAR-2/3 (light-genre, quel que soit le tier declare) : #19649 (MED/guard, merge a 2026-10-08T01:57:15Z), #19530 (MED/guard, merge a 2026-10-08T06:20:05Z), #19833 (MED/docs, merge a 2026-10-08T10:30:07Z), #19640 (MED/guard, merge a 2026-10-08T10:37:41Z), #19385 (MED/guard, merge a 2026-10-08T10:39:13Z), #19589 (MED/guard, merge a 2026-10-08T10:41:15Z), #19769 (MED/guard, merge a 2026-10-08T10:47:00Z), #19770 (MED/guard, merge a 2026-10-08T10:47:58Z), #19812 (LIGHT/guard, merge a 2026-10-08T10:51:10Z), #19258 (MED/docs, merge a 2026-10-08T11:01:54Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

@github-actions github-actions Bot added variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory) variation-genre-run >= 2 grains consecutifs du meme genre LIGHT pour la lane (#10020, advisory) variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) labels Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-ai-01:CoursIA-2` voit ces signaux actifs sur les mergees du jour (UTC 2026-10-08) :

  • TIER-INFLATION : declared LIGHT << effective LIGHT-genre (tally : declared=2 genre=10 cap=6)
  • GENRE-RUN : run consecutif d'un genre LIGHT (voir signals.runs dans le log du job)
  • CAP-EXCEEDED-BY-GENRE : light_genre > cap partage G-VAR-2 (tally : declared=2 genre=10 cap=6)

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@jsboige

jsboige commented Oct 8, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 19964
head: f173a8d
complete: true
body: read
comments-reviewed: 3
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 829899f561f6469d1e1120c0112e2ecc9693968173284a0ca8ca4a87358223ad
diff-files: 2
diff-additions: 102
diff-deletions: 6
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 19964
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@myia-ai-01
myia-ai-01 merged commit a4cb48b into main Oct 8, 2026
20 of 22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) variation-genre-run >= 2 grains consecutifs du meme genre LIGHT pour la lane (#10020, advisory) variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants