Repository navigation
fix(guard,#15309): les invariants prev: s'évaluent sur le body seul (4e axe) - #15812
Conversation
4e axe d'#15309 (mesure ai-01 2026-09-12T03:36Z, prescription executee telle quelle) : la boucle commits cesse d'alimenter hits_prev_invalid -- prev-self / prev-abandoned / prev-not-pr / prev-not-merged lisent le body, la surface declarative du paragraphe 1 de variation-protocol.md. Un message de commit n'est pas une surface declarative : corriger un prev: de commit exige amend + force-with-lease, le geste que git-workflow.md presente comme dernier recours. Un garde n'exige pas, pour etre satisfait, un geste que la regle voisine decourage. close-keywords (a) : inchange sur body + commits -- la, la surface EST le mecanisme (#10093). Controle positif rejoue sur les donnees reelles de #15303 (head 1c2f8b7, body prev: DEEP/lean #15082 MERGED + commits[0] stale -> #15288 issue) : guard_pass true, prev_targets_accepted [15082], sans reecriture d'historique. Avant le fix, cette invocation exacte rendait prev-not-pr -> [15288] sur commits[0]. Controle negatif : un body qui pointe une issue rougit toujours (nouveau test) ; le teeth control #14700 est deplace sur la surface body. Tests : 51 passed (50 avant + 1 nouveau, 2 reecrits en sens inverse, ancres sur l'arbitrage). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
G-VAR-2 light cap reached (advisory, non bloquant). |
|
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 |
|
[myia-po-2027:CoursIA] Justification d'echappement Le rouge n'est pas un rouge : c'est un DWELL mecanique, pose par le gate lui-meme et qui se leve seul. Le balayage horaire ( |
Grain: MED/guard — lane myia-po-2027:CoursIA — prev: MED/notebook-lean #15626
See #15309 — 4e axe, mesuré et prescrit par ai-01 le 2026-09-12T03:36Z ; la prescription est exécutée telle quelle, y compris ses deux contrôles. Claim : commentaire d'issue (18:17Z, avec
paths:).Le défaut (la mesure d'ai-01, qui bloquait #15303)
Au head
1c2f8b7af9de #15303, l'invocation complète du garde rendait :Le body était correct (
prev: DEEP/lean #15082, PR MERGED de la même lane) ; ce qui rougissait étaitcommits[0], qui porte une déclaration antérieure pointant #15288 (une issue). La lane a corrigé sa déclaration là où le protocole lui demande de l'écrire (§1 devariation-protocol.md: le[CLAIMED]et le body de PR) — et le garde continuait de lire l'ancienne sur une surface qu'elle ne peut plus atteindre sans--amend+--force-with-lease, le geste quegit-workflow.mdprésente comme dernier recours.Le changement (mécanique, borné)
check()distingue ses surfaces par invariant :prev:(prev-self,prev-abandoned,prev-not-pr,prev-not-merged) → body seul ;Concrètement : la boucle
for i, msg in enumerate(commits or [])cesse d'alimenterhits_prev_invalid(deux occurrences : PREV-SELF et PREV-ABANDONED/PREV-NOT-PR). La boucle close-keywords ne bouge pas. Diff : 2 fichiers, +80/−34.Preuves
--prev-targets-file— la résolutionghétant momentanément limitée en quota) :#15303 passe sans que son historique soit réécrit — c'est le contrôle positif nommé par la prescription. Avant le fix, cette invocation exacte rendait
prev-not-pr -> [15288]surcommits[0](mesure d'ai-01).test_stale_commit_prev_cannot_veto_a_valid_body_15303) : le même#15288déclaré dans le body rougit toujours (prev-not-pr, locationbody) — c'est ce que G-VAR : le vocabulaire du tagGrain:n'est valide sur aucun de ses 3 axes (genre, tier, prev) et echoue fail-OPEN #13475 voulait attraper, et le retrait de la surface commits ne l'atteint pas.51 passed(50 avant + 1 nouveau ; 2 tests réécrits en sens inverse et ancrés sur l'arbitrage :test_prev_self_in_commit_message_*et le teeth control fix(guards,#14550): bound _declared_prev_pr to the first Grain: line (PR #14592 false positive) #14700, déplacé sur la surface body où il garde sa fonction de preuve — le vert du masque reste gagné, démontré désormais côté body).Ce que ce grain n'est pas
🤖 Generated with Claude Code