Skip to content

fix(ci,#18629): prose-counts-guard -- base du diff en HEAD^1, plus de fetch de base - #18633

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/18629-prose-guard-head1
Oct 1, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/18629-prose-guard-head1

Conversation

@jsboige

@jsboige jsboige commented Sep 30, 2026 •

Copy link
Copy Markdown
Owner

Grain: LIGHT/ci -- lane myia-po-2026:CoursIA -- prev: #18632

Summary

Supprime la course « no merge base » du prose-counts-guard.yml : le diff three-dot basculait sur HEAD^1...HEAD (premier parent du merge commit pose par checkout@v4 — present par construction, merge-base resolu en parent direct, diff = plateau exact de la PR), et le git fetch --depth=1 origin <base_ref> devenu inutile est retire dans le meme geste. Pattern exact du fix livree et verifiee pour docs-transients-guard (#18595, tete 41af837). Comments (checkout + step) mis en coherence avec le nouveau mecanisme.

La course (mesuree sur la jumelle, run 110043387149)

pull_request → checkout@v4 pose refs/pull/N/merge en fetch-depth: 2 ; si main bouge entre la construction du merge ref et le fetch depth=1 de la base, les deux bornes shallow n'ont aucun ancetre commun → git diff origin/main...HEAD meurt en fatal: no merge base (exit 128) → faux rouge bloquant (--strict) sur une PR sans defaut de prose. prose-counts etait encore vert uniquement parce que la course n'avait pas encore tire.

Validation

Repro scratch fidele (merge ref construit par commit-tree -p <base> -p <feature>, fetche depth=2, base avancee puis fetchee depth=1) :

  • ancienne forme : fatal: origin/main...HEAD: no merge base, RC=128, git merge-base RC=1 (aucun ancetre commun)
  • nouvelle forme : rend exactement les fichiers de la PR (plateau), RC=0

Perimetre non-regressif verifie firsthand (grep fetch-depth + origin/... sur .github/workflows/) : les 3 autres workflows three-dot (check-resync-only, regression-guard, translation-guard) sont fetch-depth: 0 — historique complet, merge-base toujours resoluble. prose-counts-guard etait le seul expose.

Note sur l'acceptance « repro sur une vraie PR avec push main dans la fenetre » : la course ne peut pas etre declenchee deterministement depuis l'exterieur (il faut que main bouge dans une fenetre de secondes) ; la repro scratch ci-dessus reproduit la topologie exacte (meme standard de preuve que le constat fondateur de l'issue) et le pattern est celui deja verifie en production sur #18595.

Perimetre

1 fichier, +14/-10 : .github/workflows/prose-counts-guard.yml.

Closes #18629

🤖 Generated with Claude Code

… fetch de base

Course measuree sur la meme mecanique dans docs-transients-guard (run
110043387149, PR #18595) : checkout@v4 pose refs/pull/N/merge avec
fetch-depth: 2 ; si main bouge entre la construction du merge ref et le
fetch depth=1 de la base, les deux bornes shallow n'ont aucun ancetre
commun -- git diff origin/<base>...HEAD meurt en 'no merge base' (exit
128), faux rouge bloquant (--strict) sur des PRs sans defaut de prose.

Fix (pattern #18595, tete 41af837) : HEAD^1 -- le premier parent du merge
commit est le cote base, present par construction, merge-base resolu en
parent direct ; le diff rend exactement le plateau GitHub. Le fetch
depth=1 de la base devient inutile, retire dans le meme geste. Comments
de checkout et step mis en coherence.

Validation scratch (topologie fidele : merge ref construit par
commit-tree -p A -p C, fetch depth=2, base avancee puis fetchee depth=1) :
- ancienne forme : fatal 'origin/main...HEAD: no merge base', RC=128,
  merge-base RC=1 (aucun ancetre commun)
- nouvelle forme : rend exactement les fichiers de la PR, RC=0

Perimetre non-regressif verifie firsthand : les 3 autres workflows
three-dot (check-resync-only, regression-guard, translation-guard) sont
fetch-depth: 0 -- historique complet, merge-base toujours resoluble.

Closes #18629

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added variation-tag-genre-offlist GENRE hors de l'enumeration variation-protocol §1 variation-tag-prev-absent Tag Grain sans 'prev: <TIER>/<GENRE> #<PR>' (adjacence G-VAR-3 inevaluable) variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) labels Sep 30, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-po-2026:CoursIA a deja consomme son budget LIGHT du jour (#18474 (merge a 2026-09-30T02:08:08Z)).
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-po-2026:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-30) :

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.

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Relecture ai-01 a la tete 29eb4a2. Le workflow ne se declenche que sur pull_request, donc HEAD est bien le commit de merge et HEAD^1 son cote base ; le diff three-dot rend le plateau exact, et le fetch de base devenu inutile est retire. Meme forme que docs-transients-guard (#18595).

Le rouge perimeter venait de la ligne « workflow uniquement » du body, une affirmation d'exclusivite qui ne nommait pas le fichier touche. J'ai corrige le body pour enumerer .github/workflows/prose-counts-guard.yml et relance la jambe.

@jsboige

jsboige commented Oct 1, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-ai-01:CoursIA
pr: 18633
head: 29eb4a2
complete: true
body: read
comments-reviewed: 2
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: f2e96ce660802ef3ace81054c914b7c523aa70d9265a57a9458c78c9dcb378ff
diff-files: 1
diff-additions: 14
diff-deletions: 10
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Dossier tiers ai-01 : APPROVED ai-01 a 29eb4a2 (tete inchangee), B.0 rc=0, check_run_state sans rouge.

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Merge par ai-01 hors budget LIGHT du jour de la lane (sa LIGHT du 01/10 est #18504) : la PR corrige une course du garde bloquant prose-counts (« no merge base » quand main bouge entre le merge ref et le fetch), course que la série de merges de ce matin rend probable. Lecture et APPROVE ai-01 à 29eb4a2, tête inchangée.

@myia-ai-01
myia-ai-01 merged commit d1fc668 into main Oct 1, 2026
27 of 32 checks passed
jsboige added a commit that referenced this pull request Oct 1, 2026
… fetch de base (#18633)

Course measuree sur la meme mecanique dans docs-transients-guard (run
110043387149, PR #18595) : checkout@v4 pose refs/pull/N/merge avec
fetch-depth: 2 ; si main bouge entre la construction du merge ref et le
fetch depth=1 de la base, les deux bornes shallow n'ont aucun ancetre
commun -- git diff origin/<base>...HEAD meurt en 'no merge base' (exit
128), faux rouge bloquant (--strict) sur des PRs sans defaut de prose.

Fix (pattern #18595, tete 41af837) : HEAD^1 -- le premier parent du merge
commit est le cote base, present par construction, merge-base resolu en
parent direct ; le diff rend exactement le plateau GitHub. Le fetch
depth=1 de la base devient inutile, retire dans le meme geste. Comments
de checkout et step mis en coherence.

Validation scratch (topologie fidele : merge ref construit par
commit-tree -p A -p C, fetch depth=2, base avancee puis fetchee depth=1) :
- ancienne forme : fatal 'origin/main...HEAD: no merge base', RC=128,
  merge-base RC=1 (aucun ancetre commun)
- nouvelle forme : rend exactement les fichiers de la PR, RC=0

Perimetre non-regressif verifie firsthand : les 3 autres workflows
three-dot (check-resync-only, regression-guard, translation-guard) sont
fetch-depth: 0 -- historique complet, merge-base toujours resoluble.

Closes #18629

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
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) variation-tag-genre-offlist GENRE hors de l'enumeration variation-protocol §1 variation-tag-prev-absent Tag Grain sans 'prev: <TIER>/<GENRE> #<PR>' (adjacence G-VAR-3 inevaluable)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

prose-counts-guard: diff three-dot en clone shallow — course « no merge base » (fix HEAD^1, cf docs-transients-guard)

2 participants