Skip to content

feat(coordination): merge_ready refuses a twin index collision with current main - #17922

Merged
myia-ai-01 merged 1 commit into
mainfrom
feat/merge-ready-twin-collision
Sep 26, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feat/merge-ready-twin-collision

Conversation

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Constat

Deux PRs qui ajoutent le meme index twin_pairs.d/<paire>/NNNN sont chacune CLEAN contre main. Des que la premiere est mergee, la seconde fait rougir main. Le 25/09, cela s'est produit sur l'index 0016, puis trois fois sur l'index 0013.

L'organe qui voit ce cas, check_twin_index_collisions.py (#17871), est sur main. Aucun des deux chemins de merge ne l'appelait.

Correctif

Le correctif ajoute une etape 5bis a merge_ready, entre l'organe B.0 et la relecture REST :

  • elle ne s'active que si la PR touche scripts/notebook_tools/twin_pairs.d/ ; les autres PRs ne paient ni fetch ni organe ;
  • elle lance git fetch origin main pull/<N>/head, puis check_twin_index_collisions.py --base origin/main --head <tete gatee> ;
  • la comparaison se fait donc contre le main du moment, y compris apres les merges deja faits dans le meme run ;
  • rc=1 donne un skip twin-index-collision ;
  • un fetch en echec ou un rc hors 0/1 donne un skip fail-closed twin-collision-unreadable:*, jamais un merge.

Pourquoi sans --in-tree. Le doublon intra-revision de la tete est deja porte par le garde CI de la PR. merge_ready ne couvre que l'angle mort du CI : la collision avec une soeur mergee apres le passage des checks.

Validation

Grain: LIGHT/tooling -- lane myia-ai-01:CoursIA -- prev: LIGHT/docs #17921

🤖 Generated with Claude Code

…urrent main

Two PRs that add the same twin_pairs.d index are each CLEAN against
main; the second turns main red once the first is merged. merge_ready
now runs check_twin_index_collisions.py (--base origin/main --head
<gated head>) after a fetch, for PRs that touch the twin registry only.
A collision skips the PR; an unreadable fetch or organ skips fail-closed.

Co-Authored-By: Claude Opus 5 (1M context) <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 26, 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 (#17832 (merge a 2026-09-26T00:37:25Z)).
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

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-26) :

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

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #17922 (feat(coordination): merge_ready refuses a twin index collision with current main) 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.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@jsboige

jsboige commented Sep 26, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 17922
head: 5cdd97c
complete: true
body: read
comments-reviewed: 4
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 3168a3441acc0cc29012d063bde7f138700ca7936c164fc7f42420b025f2fc40
diff-files: 2
diff-additions: 116
diff-deletions: 1
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 692be0a into main Sep 26, 2026
20 of 22 checks passed
myia-ai-01 added a commit that referenced this pull request Sep 26, 2026
…ate (#17921)

Merge ai-01 : gate rc=0 (dossier tiers po-2025:CoursIA-2 a 7873a71, 10:49Z), B.0 rc=0, 43 jambes vertes. G-VAR-3 : docs apres tooling #17922.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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