Skip to content

fix(coordination,Q67): merge_ready exige une approbation myia-ai-01 qui couvre le contenu de la tete - #18257

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/merge-ready-coordinator-approval
Sep 28, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/merge-ready-coordinator-approval

Conversation

@jsboige

@jsboige jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner

Grain: MED/guard -- lane myia-ai-01:CoursIA -- prev: MED/docs #18245

Pourquoi

Depuis le 23/09, scripts/coordination/merge_ready.py mergeait toute PR hors harnais et hors DEEP dès qu'une lane qui ne la porte pas y posait un dossier [ADJOINT PREFLIGHT] READY. La disposition de review était relevée au journal, sans rien bloquer. Mesure du journal de l'organe au 28/09 :

Arbitrage user du 2026-09-28 (registre Q67, option a) : l'organe ne doit servir qu'à éviter qu'un dossier se périme entre la lecture du coordinateur et le merge. Il ne doit pas remplacer cette lecture. L'arbitrage vaut sign-off pour le durcissement de §A.

Ce qui change

scripts/coordination/merge_ready.py — nouvelle étape 2ter, placée avant le gate : une PR non lue ne paie pas le gate.

  • La dernière voix de myia-ai-01 doit être un APPROVED réel. Latest-wins sur ses seules voix, lues comme le canon : un CHANGES_REQUESTED ou un VERDICT: CONCERNS postérieur retire l'approbation. Un COMMENTED sans verdict (une phrase de levée) ne la retire pas. DISMISSED ne compte jamais.
  • L'approbation doit couvrir le contenu de la tête : posée sur la tête, ou sur une tête dont la tête courante ne diffère que par des rafraîchissements de base prouvés content-free. Un update-branch sans conflit ne périme donc pas la lecture ; un commit de contenu ou une résolution de conflit la périme.
  • Motifs de skip : no-coordinator-approval, coordinator-approval-stale, coordinator-approval-unverifiable (fail-closed, dont :no-base).
  • Après le gate, une tête évaluée différente de la tête lue est refusée (head-moved) : l'approbation a été jugée sur la tête de la vue.
  • La disposition journalisée (champ review, toutes voix) reste informative, inchangée.

scripts/ci/merge_dwell.py : la remontée first-parent de #16149 est factorisée (_walk_authoritative) et exposée par last_authoritative_sha. last_authoritative_committed_at garde exactement son comportement. La question « l'approbation couvre-t-elle encore cette tête ? » et celle du plancher DWELL passent ainsi par la même remontée.

Harnais et docs :

  • CLAUDE.md §A : l'exception outillée exige l'approbation du coordinateur, et la phrase « audite l'organe a posteriori » est retirée ;
  • coordinate/SKILL.md Phase 4, nouveau point 7 : approuver ce qui est lu mais pas encore mergeable ;
  • README de scripts/coordination/ ;
  • docs/reference/agent-cloud-agnosticisme.md.

Hors de cette PR

Validation

  • python -m pytest scripts/tests/test_merge_ready.py scripts/tests/test_merge_dwell.py scripts/tests/test_dwell_rule_matches_organ.py scripts/tests/test_install_merge_ready_task.py -q : 137 passed. 12 tests nouveaux pour l'étape 2ter, dont les contrôles négatifs suivants :

    • approbation d'un autre login ;
    • CHANGES_REQUESTED postérieur ;
    • CONCERNS en corps ;
    • DISMISSED ;
    • résolution de conflit ;
    • commit de contenu ;
    • preuve illisible ;
    • base absente ;
    • tête du gate différente.

    3 tests nouveaux pour last_authoritative_sha.

  • Dry-run de l'organe modifié sur le pool vivant (106 PRs, journal isolé) : rc=0, 0 would-merge. 8 PRs à dossier sont écartées pour no-coordinator-approval ; elles attendaient jusqu'ici leur merge sans lecture.

  • python scripts/check_docs_links.py --check --base origin/main --quiet : rc=0.

  • python scripts/notebook_tools/check_harness_coauthor.py --repo-root . : rc=0.

  • B (Lean), C (ML), D (notebooks), G (QC) : non applicables.

PR de harnais (CLAUDE.md, .claude/) : hors périmètre de merge_ready, mergée à la main par le coordinateur, sur dossier tiers.

🤖 Generated with Claude Code

…ui couvre le contenu de la tete

L'organe ne merge plus sur le seul dossier tiers READY : la derniere voix
de myia-ai-01 doit etre un APPROVED reel, pose sur la tete ou sur une tete
dont celle-ci ne differe que par des rafraichissements de base prouves
content-free (remontee du plancher DWELL, exposee par
merge_dwell.last_authoritative_sha). Absente, perimee ou illisible : skip
avant le gate. L'organe evite la peremption du dossier entre la lecture du
coordinateur et le merge ; il ne remplace plus cette lecture.

CLAUDE.md §A, README de l'organe, skill coordinate et doc agent cloud
alignes.

Co-Authored-By: Claude-Code <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Sep 28, 2026
…(contrat #18257)

merge_ready n'est plus une voie de merge sans lecteur : il exige une
approbation myia-ai-01 qui couvre le contenu de la tete. Le skill et la
doc de circulation cessent de presenter un READY comme un merge ; la
liste nominative a ai-01 couvre desormais tous les READY, puisque c'est
elle qui declenche sa lecture.

Co-Authored-By: Claude-Code <noreply@anthropic.com>
@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 github-actions Bot added the variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) label Sep 28, 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 (#18167 (merge a 2026-09-28T02:58:04Z)).
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-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 Sep 28, 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-28) :

  • 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=3 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.

@jsboige

jsboige commented Sep 28, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 18257
head: f1e60aa
complete: true
body: read
comments-reviewed: 3
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 53ef2c95196c53dc7b14969c64739c1224680856810233c88be1fe4b0335508d
diff-files: 8
diff-additions: 423
diff-deletions: 33
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
[/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 ai-01 a la tete f1e60aa (contrat Q67) : body, commentaires, diff lus. Un seul commit, contenu conforme a l arbitrage user Q67 (a), qui vaut sign-off du resserrement de CLAUDE.md §A. Dossier tiers READY du secretariat (c.5875145966), B.0 rc=0, 30 jambes latest-wins vertes, CLEAN.

@myia-ai-01
myia-ai-01 merged commit 1c5184a into main Sep 28, 2026
32 of 37 checks passed
myia-ai-01 added a commit that referenced this pull request Sep 29, 2026
…_ready convertit chaque READY (#18245)

* docs(skills): secretaire -- attester en tiers a son initiative, merge_ready convertit chaque READY

La doctrine Hub du 22/09 reservait les dossiers du secretaire aux
dispatchs nominatifs et placait les DMs au coordinateur avant eux. Elle
reposait sur un constat d'avant merge_ready (23/09). Depuis, un READY
tiers sur une PR hors harnais et hors DEEP est merge en 20 minutes.

- nouvelle section "Ce que ton dossier declenche" (criteres merge_ready,
  mesures du 28/09, crible de fond obligatoire)
- role : attestation tierce sans tranche ni dispatch, re-stamp des
  dossiers morts, reruns dans le perimetre
- cycle : inbox deep:true d'abord, lot annonce, budget au quota mesure
  (fin du plafond fixe de 40 appels)
- item 13 : seul un dossier vivant (rc=0/3) d'une autre lane protege
- garde-fou 4 : un re-stamp est un nouveau post, jamais un PATCH
- references de ligne du gate remplacees par les noms de symboles
- tricephale-circulation.md aligne

Co-Authored-By: Claude-Code <noreply@anthropic.com>

* docs(skills): secretaire -- le porteur d'une PR se lit dans le tag Grain, pas dans l'auteur GitHub

Co-Authored-By: Claude-Code <noreply@anthropic.com>

* docs(skills): secretaire -- un READY se double de la lecture d'ai-01 (contrat #18257)

merge_ready n'est plus une voie de merge sans lecteur : il exige une
approbation myia-ai-01 qui couvre le contenu de la tete. Le skill et la
doc de circulation cessent de presenter un READY comme un merge ; la
liste nominative a ai-01 couvre desormais tous les READY, puisque c'est
elle qui declenche sa lecture.

Co-Authored-By: Claude-Code <noreply@anthropic.com>

---------

Co-authored-by: jsboige <jsboige@gmail.com>
Co-authored-by: Claude-Code <noreply@anthropic.com>
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)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants