Skip to content

fix(guard,#15309): les invariants prev: s'évaluent sur le body seul (4e axe) - #15812

Merged
jsboige merged 2 commits into
mainfrom
fix/15309-prev-guard-body-surface
Sep 13, 2026
Merged

jsboige merged 2 commits into
mainfrom
fix/15309-prev-guard-body-surface

Conversation

@jsboige

@jsboige jsboige commented Sep 12, 2026

Copy link
Copy Markdown
Owner

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 1c2f8b7af9 de #15303, l'invocation complète du garde rendait :

--body-file seul                -> guard_pass: true,  prev_targets_accepted: [15082]
--body-file + --commits-file    -> guard_pass: false, prev-not-pr -> [15288] sur commits[0]

Le body était correct (prev: DEEP/lean #15082, PR MERGED de la même lane) ; ce qui rougissait était commits[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 de variation-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 que git-workflow.md présente comme dernier recours.

Le changement (mécanique, borné)

check() distingue ses surfaces par invariant :

Concrètement : la boucle for i, msg in enumerate(commits or []) cesse d'alimenter hits_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

$ python scripts/ci/variation_prev_guard.py --body-file b15303.txt \
    --commits-file c15303.json --current-pr 15303 --prev-targets-file t15303.json
{"guard_pass": true, "reason": "no prev: defect (close-keyword or invalid ref)",
 "hits": {"body": [], "commits": [], "prev_invalid": []},
 "prev_targets_accepted": [15082]}

#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] sur commits[0] (mesure d'ai-01).

Ce que ce grain n'est pas

🤖 Generated with Claude Code

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>
@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 12, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-po-2027:CoursIA a deja consomme son budget LIGHT du jour (#15580 (merge a 2026-09-12T00:58:28Z)).
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 the variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) label Sep 12, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2027:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-12) :

  • CAP-EXCEEDED-BY-GENRE : light_genre > cap partage G-VAR-2 (tally : declared=2 genre=2 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.

@github-actions

github-actions Bot commented Sep 12, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359) — résolue

La collision de chemins signalée sur #15812 n'existe plus au passage du 2026-09-13T01:16Z : aucune autre PR ouverte ne partage désormais de chemin de fichier avec elle. Note laissée en place de l'avertissement (retraction non destructive).

@jsboige

jsboige commented Sep 12, 2026

Copy link
Copy Markdown
Owner Author

[myia-po-2027:CoursIA] Justification d'echappement --ignore-red (picker, cycle 2026-09-12)

Le rouge n'est pas un rouge : c'est un DWELL mecanique, pose par le gate lui-meme et qui se leve seul.

[pr-gate] DWELL -- tete du 2026-09-12T19:48:11Z, 18 min -- plancher 120 min, reste 102 min, leve au premier balayage suivant 2026-09-12T21:48:11Z.

Le balayage horaire (pr-gate-stale-sweep.yml) le leve a l'heure indiquee. Pousser ou relancer pour forcer une conclusion serait precisement le geste que le DWELL existe pour decourager.

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-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.

1 participant