Repository navigation
docs(rules,#16878): update-branch périme le dossier autant qu'il ré-arme le DWELL - #16879
Conversation
…rme le DWELL git-workflow.md portait deja la moitie DWELL du mecanisme (#15859). L'autre moitie n'etait ecrite nulle part : update-branch change la tete, donc perime le contrat exact-head du dossier de prevalidation. Les deux se composent en boucle fermee, mesuree le 2026-09-19 : 17 candidates sur 17 refusees par le gate, aucune pour un defaut de PR. Ajoute l'ordre en 4 temps qui en sort -- le dossier vient APRES la stabilisation de la branche -- et nomme le gel de branche entre dossier et merge comme sa condition. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
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 |
La boucle decrite par cette PR reposait sur DEUX effets d'un `gh pr update-branch` : la peremption du dossier exact-head, et le re-armement du plancher DWELL. Le second est faux depuis #16149 : `last_authoritative_committed_at` (merge_dwell.py l.475) remonte la chaine first-parent au-dela des fusions de base prouvees content-free -- deux parents, second ancetre de la base, et arbre identique a l'auto-merge (`git merge-tree --write-tree`). C'est la forme d'un update-branch sans conflit. La boucle TIENT sans lui : la peremption du dossier suffit a la produire. L'etape 2 de la sortie de boucle est corrigee en consequence -- on attend la re-agregation des checks, pas un plancher qui n'a pas bouge. Le cas fail-closed (resolution manuelle de conflit) est nomme explicitement. Se compose avec #16963, qui corrige la ligne 42 dont cette premisse etait tiree. See #16878 See #16962 Co-Authored-By: Claude-Code <noreply@anthropic.com>
Auto-correction : cette PR reposait sur une prémisse fausse, retirée au commit
|
Path-collision (organ #13359/#13615)Cette PR #16879 (
|
|
[ADJOINT PREFLIGHT] |
|
[ADJOINT PREFLIGHT] Dossier Secrétaire cat. 2 mini-cost cycle 7, exact-head 8cabcc0, +10/-0, 1 fichier(s). — secrétaire myia-po-2026:CoursIA-3 |
Conflict in .claude/rules/git-workflow.md resolved deliberately: - kept this branch's first bullet (update-branch without conflict does NOT reset the DWELL floor, #16149) in place of main's stale "remet le plancher DWELL a zero" bullet; - kept main's second bullet from #16879 (update-branch perishes the prevalidation dossier) and its ordered exit-from-loop list, unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…dre (#17289) Reserve jaune de la lane secretaire (5796479941) : #16879 puis #16963 avaient deja mis sur `main`, dans la puce « update-branch tue AUSSI le dossier de prevalidation », l'ordre en 4 temps, le gel, la mesure fondatrice 17/17 **et** la correction #16962 du claim DWELL. Ma section ajoutee redonnait tout cela — et son etape 2 redonnait la claim DWELL *corrigee*. La duplication ne pese pas qu'en lignes : elle re-derive. - `.claude/rules/git-workflow.md` : section supprimee ; la puce reste la surface UNIQUE. Ajout minimal (+2 lignes) : le renvoi operationnel vers `coordinate/SKILL.md` et le lien vers le detail deporte — c'est la correction de premisse 2 (« l'autre moitie n'est ecrite nulle part » est inexact), que la regle pouvait porter sans redire l'ordre. - `docs/.../prevalidation-dossier-order-detail.md` : « la regle fait foi » ; l'ordre n'y est plus recopie (pas de seconde copie qui derive) ; l'etape DWELL perimee disparait ; le §5 explique desormais le POURQUOI (pourquoi le gel est la piece non derivable). - `scripts/tests/test_prevalidation_order_rule.py` : re-pointe sur la puce l.43-52 (ancrage sur le debut de puce, borne a la puce suivante), plus une epingle NEUVE — aucune seconde sous-section ne doit rouvrir la regle. Falsification (6 mutations, arbre jetable, sha256 du fichier de regle identique avant/apres) : 5 mutations tombent chacune sur le BON test, seul ; 1 controle de sur-portee (retrait du lien du detail) reste vert — l'epingle ne mesure pas autre chose que ce qu'elle annonce. 13 passed. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…ion (seconde moitie d'update-branch) (#17289) * docs(harness,#16878): la regle porte l'ordre du dossier de prevalidation (seconde moitie d'update-branch) La regle ne decrivait qu'UNE moitie du mecanisme `update-branch` (l'effet sur le plancher DWELL). La seconde -- `update-branch` change la TETE, donc perime le dossier de prevalidation exact-head -- n'y figurait pas, et surtout l'ORDRE qui debloque la boucle n'etait nulle part. Fondateur : le 2026-09-19, le gate d'entree de la passe de merge a rendu exit 1 sur 17 candidates sur 17, AUCUNE pour un defaut de PR. Ce que cette PR ajoute (addition pure, 21 lignes, aucune suppression) : - une sous-section `### update-branch et le dossier de prevalidation` : le fait que le dossier atteste une TETE, l'ordre en 4 temps, et le GEL DE BRANCHE nomme comme la condition qui manquait ; - le renvoi (lien) a `coordinate/SKILL.md`, qui portait DEJA le fait de peremption, plutot qu'une redescription -- deux surfaces qui redécrivent la meme regle finissent par diverger (#16962) ; - un detail deporte `docs/reference/prevalidation-dossier-order-detail.md` avec le verbatim de l'organe prouvant le mecanisme. CORRECTION DU PREMISSE DE L'ISSUE, verifiee a la source : #16878 motivait la boucle par « update-branch re-arme le plancher DWELL pour 120 min ». FAUX dans le cas courant depuis #16149 (rafraichissement content-free = plancher INCHANGE, cf. #16962/#17286). La boucle ne se referme donc PAS par le DWELL : elle se referme par la peremption du dossier -- moitie intacte. L'issue affirmait aussi que « l'autre moitie n'est ecrite nulle part » : inexact, `coordinate/SKILL.md` la porte. Les deux corrections sont ecrites dans la regle et dans le detail, pour qu'un futur lecteur ne reimporte pas l'erreur. Verifications : - mecanisme verifie a la source (`scripts/check_adjoint_prevalidation.py` l.552-554 `{key} is stale`, l.556-558 `head is stale`, l.534 surfaces, l.548-550 diff-files/additions/deletions) ; - epingle `scripts/tests/test_prevalidation_order_rule.py` : 10 tests, avec controle negatif en corps de test ; - FALSIFICATION, l'epingle doit distinguer les etats (mesure : 3 mutations, 3 fois le BON test tombe) : claim DWELL reintroduite -> 1 failed (le test de la claim) ; etape « rejoue la jambe » retiree -> 1 failed (le test de l'ordre) ; mesure 17/17 retiree -> 1 failed (le test de la mesure). Restauration byte-identique verifiee par sha256 apres chaque mutation ; - citation du skill verifiee VERBATIM (« le perime », sans accent chez la source). Voir #16878. * test(harness,#16878): ancrer l'epingle sur le TITRE de sous-section, pas sur la phrase nue `_order_section()` faisait `text.find("dossier de prevalidation")` : la premiere occurrence du TEXTE. Une mention de la phrase dans une section anterieure deplacait la borne, et l'epingle aurait teste un voisinage sans rapport en le declarant vert -- un faux vert silencieux, precisement la classe que cette PR ferme par ailleurs. Ancrage desormais sur `\n### ... dossier de prevalidation` (le titre), qui est unique. Verification du bornage : la section extraite fait 2501 caracteres, sa 1re ligne est le titre et sa derniere la ligne de renvoi -- ni debordement sur la section voisine, ni troncature. Falsification rejouee apres durcissement : claim DWELL reintroduite -> 1 failed (le test de la claim) ; etape « rejoue la jambe » retiree -> 1 failed (le test de l'ordre). Restauration byte-identique verifiee par sha256. * fix(harness,#16878): reduire a l'epingle — la regle portait deja l'ordre (#17289) Reserve jaune de la lane secretaire (5796479941) : #16879 puis #16963 avaient deja mis sur `main`, dans la puce « update-branch tue AUSSI le dossier de prevalidation », l'ordre en 4 temps, le gel, la mesure fondatrice 17/17 **et** la correction #16962 du claim DWELL. Ma section ajoutee redonnait tout cela — et son etape 2 redonnait la claim DWELL *corrigee*. La duplication ne pese pas qu'en lignes : elle re-derive. - `.claude/rules/git-workflow.md` : section supprimee ; la puce reste la surface UNIQUE. Ajout minimal (+2 lignes) : le renvoi operationnel vers `coordinate/SKILL.md` et le lien vers le detail deporte — c'est la correction de premisse 2 (« l'autre moitie n'est ecrite nulle part » est inexact), que la regle pouvait porter sans redire l'ordre. - `docs/.../prevalidation-dossier-order-detail.md` : « la regle fait foi » ; l'ordre n'y est plus recopie (pas de seconde copie qui derive) ; l'etape DWELL perimee disparait ; le §5 explique desormais le POURQUOI (pourquoi le gel est la piece non derivable). - `scripts/tests/test_prevalidation_order_rule.py` : re-pointe sur la puce l.43-52 (ancrage sur le debut de puce, borne a la puce suivante), plus une epingle NEUVE — aucune seconde sous-section ne doit rouvrir la regle. Falsification (6 mutations, arbre jetable, sha256 du fichier de regle identique avant/apres) : 5 mutations tombent chacune sur le BON test, seul ; 1 controle de sur-portee (retrait du lien du detail) reste vert — l'epingle ne mesure pas autre chose que ce qu'elle annonce. 13 passed. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Summary
git-workflow.mdportait une moitié du mécanismeupdate-branch(#15859) : le commit qu'il crée remet le plancher DWELL à 120 min. L'autre moitié n'était écrite nulle part — et c'est elle qui a bloqué la flotte :update-branchchange la tête, donc périme le contrat exact-head du dossier de prévalidation.La mesure qui fonde
Le 2026-09-19,
scripts/check_adjoint_prevalidation.pya renduexit 1sur 17 candidates sur 17. Aucun refus ne portait sur un défaut de PR :La boucle
mainrouge → la lane doitupdate-branch(bon geste) → la tête change, le dossier périt et le DWELL se ré-arme →PR gaterouge → l'adjoint ne peut plus attesterchecks: latest-wins-greensans mentir, donc il retient le dossier (à juste titre) →exit 1→ pas de merge → la PR vieillit → il faut re-update-branch.Personne n'y déroge seul : chaque acteur fait exactement ce que son rôle prescrit. Le défaut est que le protocole demandait le dossier avant la stabilisation de la branche.
Ce que la PR ajoute
Un bloc à la suite du paragraphe
update-branchexistant — pas une règle neuve, la seconde moitié de celle qui s'y trouve déjà — avec l'ordre en 4 temps qui sort de la boucle :update-branch→ écoulement DWELL + rejeu (jamais un push) → dossier à la tête exacte → merge immédiat, branche gelée entre les deux derniers.Test plan
Changement documentaire sur une règle path-gatée ; aucun code exécutable touché.
git diff --stat:.claude/rules/git-workflow.md | 10 ++++++++++#15859existante, sans la modifier — vérifiable au diff.Grain: MED/harness -- lane myia-ai-01:CoursIA -- prev: MED/harness #16843
See #16878
🤖 Generated with Claude Code