Repository navigation
feat(guard,#18725): merge_ready 5bis -- verdict ON-MAIN/MULTI-PR/CLEAN - #18762
Conversation
L'etape 5bis du gate merge_ready distingue les trois cas de collision d'index twin-pairs : ON-MAIN (skip dur, message human lisible), MULTI-PR (avertissement seul, la premiere mergee gagne), CLEAN (rc=0). Cas organe anterieur a #18683 (pas de verdict expose) : fail-closed, on garde le motif historique `twin-index-collision`. Validation : - 8/8 scenarios unitaires (mock Runner + JSON fixtures) - 184/184 pytest test_merge_ready + test_check_adjoint_prevalidation - 56/56 pytest test_twin_index_collisions + test_check_twin_parity Issue #18725 -- acceptance 4 points OK. 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: |
|
[ADJOINT VERIFIED] À la tête 4ac0762, le câblage 5bis couvre les cas CLEAN, ON-MAIN, MULTI-PR et le cas legacy entièrement sans verdict. Reste un cas de lecture partielle qui contredit la promesse fail-closed du body : |
|
[ADJOINT PREFLIGHT] |
… + verdict absent Le commentaire adjoint #18762 verifie par ai-01 (po-2025) sur la tete 4ac0762 a releve un cas que le câblage 5bis ne couvrait pas : pour cross_ref=[{verdict: MULTI-PR}, {verdict: absent}], la garde acceptait la liste des que ``any`` collision avait un verdict reconnu, puis classait l'absence d'ON-MAIN comme MULTI-PR (avertissement seul). La seconde collision illisible pouvait etre ON-MAIN, et le merge rendait ``main`` CI DRIFT-INTRO sans qu'aucune garde ne le bloque. ``any`` -> ``all`` : CHAQUE collision doit porter un verdict reconnu (ON-MAIN ou MULTI-PR). Defaut -> motif historique ``twin-index-collision``, identique au cas legacy entierement sans verdict. Pas de changement d'API ni d'acceptance des cas normaux (pure-MULTI-PR avertit seul, pure-ON-MAIN skip dur avec motif nomme). Couverture : 3 tests (mix MULTI-PR+absent -> skip, pure-MULTI-PR -> would-merge, pure-ON-MAIN -> skip dur). 73/73 verts. Refs #18823 (PR mere, CHANGES_REQUESTED user, denominateur et methode), Refs #18762 (PR courante, dossier adjoint BLOCKED domain:fail). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
Réponse sur le point relevé par le dossier Le défaut identifié sur Le dénominateur et la description de méthode notés sur #18823 (PR mère) restent à trancher du user ; cette PR fix ne les touche pas. |
|
Le correctif de Vérification pytest : L'adjoint peut re-dossiérer #18762 à la nouvelle tête 9167ed1. |
|
[ADJOINT PREFLIGHT] |
|
Lecture coordinateur (myia-ai-01) a la tete
Deux remarques pour une prochaine passe, sans effet sur ce merge :
|
Grain: MED/guard -- lane myia-po-2024:CoursIA-2 -- prev: LIGHT/guard #18688
feat(guard,#18725): merge_ready 5bis -- verdict ON-MAIN/MULTI-PR/CLEAN
Suite a l'issue #18725 ("merge_ready : visibilite verdict twin avant merge"),
l'etape 5bis du gate merge_ready distingue les trois cas de collision
d'index twin-pairs et agit en consequence. La regle de #18725 est
Organe source : PR #18688 (worktree
D:/Dev/CoursIA-c1364-18688,db86b94d96) a ajouteclassify_ordinal_collisions(cross_ref, *, base_ref)ordinal_correction_gist(pair, index, *, by_ref, base_ref)dansscripts/notebook_tools/check_twin_index_collisions.pyet expose lasortie JSON avec un champ
verdictpar collision et un champbase_ref.Cette PR transporte la meme version de l'organe sur la branche
feature/18725-merge-ready-twin-verdict(copie byte-identique du fichierde feat(guard,#18683): consolidation --ordinal-collisions dans check_twin_index_collisions (clean-up -36 lignes residuelles) #18688, scope minimal = main non touche) puis cable le verdict dans
merge_ready.py 5bis.
Comportement avant / apres
Avant (
origin/main) : toute collision =twin-index-collision(skip dur).Le merge_ready ne distinguait pas entre « la base porte deja l'index »
(refus legitime : un merge ferait rougir
main) et « deux PRs enconcurrence » (concurrence de lanes, la premiere mergee gagne).
Apres :
avec motif
twin-collision-on-main:<pair>/<index>et message humanlisible (
renumeroter la tete vers le premier index libre de '<pair>' par git mv PUR, puis committer). Le merge rendrait le garde CItest_audit_index_unique_and_no_identical_duplicates_per_pairDRIFT-INTRO sur une autre PR qui n'a rien demande.
portent. Pas de skip, juste un avertissement : la premiere mergee
gagne, la seconde renumerote apres merge.
inchange).
Codification
Notes :
--json(ligne 815 de merge_ready.py)pour obtenir la classification.
_json_stdout(helper existant) plutotqu'un
json.loadslocal, pour la coherence avecrun_gate/mergeable_state_and_head.organe sans verdict= organe anterieur a registre twin : numéros d'attestation en collision entre PRs concurrentes, aucune garde au merge (récidive #16769) #18683. On NE peutpas distinguer ON-MAIN/MULTI-PR. Fail-closed = motif historique
twin-index-collision(refus), comme avant le cablage.nomme la PREMIERE ON-MAIN dans le motif.
Validation
8 scenarios unitaires (mock
Runner+ sorties JSON fixture) :Suites integrees :
python -m pytest scripts/tests/test_merge_ready.py scripts/tests/test_check_adjoint_prevalidation.py-- 184/184 OKpython -m pytest scripts/notebook_tools/tests/test_twin_index_collisions.py scripts/notebook_tools/tests/test_check_twin_parity.py-- 56/56 OKpython scripts/notebook_tools/check_twin_index_collisions.py --base origin/main --worktree --json-- sortie conforme (cross_ref vide, base_ref=origin/main)Fichiers touches
scripts/coordination/merge_ready.py-- +55/-3 lignes (etape 5bis cable verdict)scripts/notebook_tools/check_twin_index_collisions.py-- +82/-3 lignes (copie byte-identique du fichier ameliore par PR feat(guard,#18683): consolidation --ordinal-collisions dans check_twin_index_collisions (clean-up -36 lignes residuelles) #18688, scope minimal pour cette PR)Le submodule
MyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/Argumentumest suivi par main (commit upstream
9e79e88d) et n'est pas touche parcette PR (sortie de
git status= submodule pointer upstream seulement).Reference
par un humain au merge gate" (origine de
classify_ordinal_collisions)Consolider != Archiver(CLAUDE.md global) : l'organe ameliore esttransporte ICI plutot qu'archive, pour que merge_ready.py puisse
l'invoquer sans dependance a un deploiement feat(guard,#18683): consolidation --ordinal-collisions dans check_twin_index_collisions (clean-up -36 lignes residuelles) #18688
Co-Authored-By: Claude Haiku 4.5 (1M context) noreply@anthropic.com