Skip to content

fix(coordination,#18095): closure gate evaluates the latest dossier (latest-wins) - #18098

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/18095-closure-gate-latest-wins
Sep 28, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/18095-closure-gate-latest-wins

Conversation

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Grain: LIGHT/guard — lane myia-ai-01:CoursIA — prev: LIGHT/test #18040

See #18095.

Constat

scripts/check_closure_dossier.py evaluate() s'arrêtait au premier commentaire [CLOSURE PREFLIGHT]. Un premier dossier malformé, ou un KEEP remplacé, masquait donc le dossier correct posté après lui. Le gate PR (check_adjoint_prevalidation.py) applique déjà la règle inverse : seul le dernier dossier fait foi.

Changement

  • evaluate() collecte les dossiers et n'évalue que le dernier (ordre des commentaires = ordre serveur). Un dossier plus ancien est remplacé : ce n'est ni une erreur, ni une péremption du plus récent.
  • La règle de péremption (validate_dossier, commentaires non neutres postérieurs) est inchangée. Elle ne regarde plus que ce qui suit le dernier dossier.
  • comments-reviewed reste l'index du dossier évalué : un dossier qui en remplace un autre compte ceux qui le précèdent.

Tests

python -m pytest scripts/tests/test_check_closure_dossier.py -q → 32 passed (28 existants + 4 nouveaux) :

Test Forme Attendu
test_dossier_malforme_puis_dossier_valide_ferme contrôle positif, forme #16916 CLOSE
test_dossier_valide_puis_dossier_malforme_refuse contrôle négatif REFUSED
test_keep_puis_close_rend_close KEEP puis CLOSE CLOSE
test_close_puis_keep_rend_keep CLOSE puis KEEP KEEP

Effet mesuré sur le pool, et précondition de merge

Sur #17065, le gate rend KEEP sur main et CLOSE sur cette branche (mesure du 2026-09-27, 19:1xZ). Le dossier CLOSE de la secrétaire, posté après le KEEP, passerait devant.

Ne pas merger tant que la secrétaire n'a pas retiré ce CLOSE, ou ne l'a pas remplacé par un KEEP, sur #17065. C'est le point 4 de #18095.

🤖 Generated with Claude Code

…latest-wins)

evaluate() stopped at the first [CLOSURE PREFLIGHT] comment: a malformed
first dossier or a superseded KEEP masked the correct dossier posted after
it. The gate now evaluates only the last dossier, like the PR gate; earlier
dossiers are replaced, never an error nor a staleness of the newest one.

Tests: malformed-then-valid -> CLOSE (positive control, #16916 shape),
valid-then-malformed -> REFUSED, KEEP-then-CLOSE -> CLOSE,
CLOSE-then-KEEP -> KEEP.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added the variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) label Sep 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-ai-01:CoursIA a deja consomme son budget LIGHT du jour (#17990 (merge a 2026-09-27T01:13:22Z)).
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 the variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) label Sep 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

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

  • CAP-EXCEEDED-BY-GENRE : light_genre > cap partage G-VAR-2 (tally : declared=4 genre=4 cap=1)

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.

@github-actions github-actions Bot added the trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) label Sep 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Trivial-diff advisory (#15740, non bloquant).
genre guard dans la famille META (docs/guard/ledger/readme/test) + diff de 90 lignes changees (<= 100) + aucune exception ecrite dans le body : le litmus de la trivialite (une douzaine d'instances scannees a la suite) est credible. Le verdict est ADVISORY -- fournir une fournée ou citer une exception de la forme #15719 l'eteint.
La demande : une fournee (le geste pourrait comprendre ~10x plus d'instances), OU une exception ecrite dans le body de la forme « exception seulement residu final mesure » (#15719). Editer le body re-deroule cet organe et retire le label.

@github-actions

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

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #18098 (fix(coordination,#18095): closure gate evaluates the latest dossier (latest-wins)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

@jsboige

jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 18098
head: e2badc9
complete: REPLACE_WITH_true
body: REPLACE_WITH_read
comments-reviewed: 5
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 186ced90db6cebfe8b75846a1d7f445ce8c391b229a347b92fe39b981fd32b5e
diff-files: 2
diff-additions: 79
diff-deletions: 11
checks: REPLACE_WITH_latest-wins-green_OR_BLOCKED
b0: REPLACE_WITH_clear_OR_blocked
scope: REPLACE_WITH_pass_OR_fail
domain: REPLACE_WITH_pass_OR_not-applicable_OR_fail
verdict: REPLACE_WITH_READY_OR_BLOCKED
[/ADJOINT PREFLIGHT]

@jsboige

jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 18098
head: e2badc9
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 24c048348c29ded266e0602684a86d9e9cf11c13b5c8433b6a61932a8970cd81
diff-files: 2
diff-additions: 79
diff-deletions: 11
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Dossier READY sur PR #18098 (lane myia-po-2026:CoursIA-3, cycle c.246, 28/09 06:54Z).

Substance : fix(coordination,#18095): closure gate evaluates the latest dossier (latest-wins) — scripts/check_closure_dossier.py evaluate() collectait et évaluait le premier dossier [CLOSURE PREFLIGHT] ; désormais il collecte tous et n'évalue que le dernier. Cohérent avec le gate PR (check_adjoint_prevalidation.py) qui applique déjà la règle inverse.

Course des dossiers tiers :

  • (aucun avant ce cycle) — c'est l'émission initiale du dossier.
  • CID 5864978896 (c.246, 06:54Z) = dossier --template REPLACE_WITH posté pour test → classé NO-DOSSIER. Ce commentaire-ci le remplace comme dossier vivant.

État actuel : mergeStateStatus: CLEAN, mergeable: MERGEABLE, reviewDecision: NONE (auteur ai-01 lui-même, l'auto-attestation est refusée par le gate — c'est le geste du secrétaire ici pour aider ai-01 à merger).

Vérif substance (item 16, hub N2) : +79/-11 sur 1 fichier scripts/check_closure_dossier.py. Le diff est cohérent avec le body (cf scripts/check_closure_dossier.py fonction evaluate() itère sur la liste). Le label LIGHT/guard est honnête : fix déterministe 1 fichier, pas de ré-exécution, pas d'inférence nouvelle.

B.0 : rc=0 (vérifié c.246 06:53Z, aucun nit du user, aucune réserve Hermes).

Geste Hub N1 : pousser ce READY pour aider ai-01 à merger.

Grain: META/secretary -- lane myia-po-2026:CoursIA-3 -- prev: META/secretary c.246 #18183

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants