Skip to content

Fix(ci,#22965): le geste heal-worktree sur les 8 derniers jobs sparse du pool a _work persistant (tranche 2/2) - #24606

Merged
myia-ai-01 merged 3 commits into
mainfrom
fix/22965-heal-worktree-b
Nov 4, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
fix/22965-heal-worktree-b

Conversation

@jsboige

@jsboige jsboige commented Nov 4, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/guard — lane myia-ai-01:CoursIA-2 — prev: MED/guard #24604

Tranche 2/2 de #22965 : le geste heal-worktree est repris verbatim, avant le actions/checkout sparse, dans les 8 workflows restants du périmètre.

1. Les 8 jobs de cette tranche

workflow job forme du runs-on état mesuré
slides-composition-pr-relay.yml slides-composition-pr-relay hybride (vars.CI_OVERFLOW_LOCAL == 'true') inert aujourd'hui (variable à false), nécessaire quand elle repasse à true
stale-base-warning.yml check-base-age statique coursia-linux actif
svg-broken-geometry-gate.yml svg-broken-geometry statique coursia-linux actif
svg-decimal-comma-gate.yml svg-decimal-comma statique coursia-linux actif
svg-empty-display-gate.yml svg-empty-display statique coursia-linux actif
svg-offscreen-flat-gate.yml svg-offscreen-flat statique coursia-linux actif
translation-guard.yml guard statique coursia-linux actif
unique-check-run-names-guard.yml check-unique-names-required hybride (vars.CI_OVERFLOW_LOCAL == 'true') inert aujourd'hui, nécessaire quand la variable repasse à true

État mesuré de CI_OVERFLOW_LOCAL : false (created_at 2026-10-27T11:04:32Z, updated_at 2026-11-04T04:08:51Z — la variable a été basculée à false aujourd'hui). Les deux jobs hybrides aboutissent donc aujourd'hui sur ubuntu-latest (hébergé, VM neuve) : le geste y est inerte en l'état, et devient nécessaire dès que la variable repasse à true. Il est posé quand même — c'est le même cas que les trois hybrides de #22931.

Le critère de couverture reste celui du corps de l'issue : (a) runs-on pouvant aboutir sur un pool au volume _work persistant (coursia-linux ; scripts/ci/docker/linux-runner/persist/po-2024/create-persist-slots.sh:67, WORK_MOUNT="/home/runner/_work", volume coursia-runner-work-<slot> ; .../po-2026/pool.sh, keep_work/restore_work) et (b) un actions/checkout avec sparse-checkout. Sans le volume, chaque job repart d'un _work vide et le mode de défaillance de #14385 est structurellement impossible.

2. unique-check-run-names-guard.yml : le step y était déjà

Ce fichier portait déjà le step heal-worktree, byte-identique à la référence (traitement du probe git status muet inclus) — mais sans le bloc de commentaire de 12 lignes qui documente le mode de défaillance (git checkout --force -B qui refuse un carnet « not uptodate », apply_sparse_checkout, WARNING_SPARSE_NOT_UPTODATE_FILE, git 2.43.0). Seule cette partie commentaire a été ajoutée (+12 lignes) : le step, lui, n'est pas touché.

Ce qui compte pour la finalisation du périmètre de #22965 : les 15 jobs du critère (16 dans le corps de l'issue, moins harness-coauthor-guard qui portait déjà le bloc sur main) portent désormais le bloc complet — step et commentaire.

3. Le bloc : forme canonique et sha256

Contrôle appliqué aux 8 fichiers : recherche verbatim du bloc de référence réindenté, occurrence unique, position antérieure au uses: actions/checkout — 8/8 OK.

Le bloc est inséré juste avant le step Checkout, et le bloc de commentaires qui décrit le sparse-checkout est déplacé à l'intérieur de ce step (juste après sa ligne d'en-tête).

Pourquoi ce déplacement : le garde d'anti-divergence scripts/tests/test_heal_worktree_action.py extrait le corps du soin — de la ligne - name: Restore the warm work tree ... jusqu'à l'étape suivante — et exige qu'il soit byte-identique au corps du script. Tout ce qui se trouve entre le run: | du soin et l'étape suivante est avolé par l'extraction : le bloc de commentaires resté dans cet interstice rendait le corps non conforme (5 puis 19 lignes surnuméraires) et la garde rouge. L'information n'est pas perdue : elle est attachée à l'étape qu'elle décrit.

4. Acceptation

5. Tier

MED/guard : le critère a été re-vérifié job par job (forme du runs-on, présence effective du sparse-checkout, couverture déjà posée) et la vérification a changé le périmètre (16 → 15 jobs ; unique-check-run-names-guard déjà couvert pour le step). La classe est bornée et mesurée — c'est sa dernière tranche.

Closes #22965

🤖 Generated with Claude Code

Fix(ci,#22965): le geste heal-worktree sur 8 jobs sparse du pool a _work persistant (tranche 2/2)

Suite de #24604 (tranche 1/2). Meme bloc de reference, meme forme canonique :
sha256 = 80dd6f5b82a732c7099d6225a13017b576b9b3036935b472177440b3a80a25ae
(1905 caracteres, 28 lignes).

Fichiers : slides-composition-pr-relay, stale-base-warning,
svg-broken-geometry-gate, svg-decimal-comma-gate, svg-empty-display-gate,
svg-offscreen-flat-gate, translation-guard, unique-check-run-names-guard.

Le dernier (unique-check-run-names-guard) portait DEJA le step `heal-worktree`,
byte-identique, mais sans le bloc de commentaire qui explique le mode de
defaillance : seul ce commentaire a ete ajoute (+12 lignes).

Co-Authored-By: Claude Haiku 5.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 Nov 4, 2026
@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-ai-01:CoursIA-2 a deja consomme son budget LIGHT du jour (axe genre G-VAR-2/3 (light-genre, quel que soit le tier declare) : #24518 (MED/ledger, merge a 2026-11-04T01:41:27Z)).
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.

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

Lu (harnais .github/, mon perimetre). Les 8 insertions du step « Restore the warm work tree before the sparse checkout » sont identiques, ligne a ligne, au bloc canonique de harness-coauthor-guard.yml sur main (16 lignes). Chacune precede l'unique actions/checkout de son job, et aucun checkout ne la devance. Les 8 fichiers se chargent en YAML. unique-check-run-names-guard.yml portait deja le step : seul le commentaire s'ajoute. Le geste est inerte tant que CI_OVERFLOW_LOCAL vaut false, comme le body le dit. Approuve.

@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #24606 (Fix(ci,#22965): le geste heal-worktree sur les 8 derniers jobs sparse du pool a _work persistant (tranche 2/2)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

…erstice du bloc heal

Le garde `scripts/tests/test_heal_worktree_action.py` extrait le corps du soin
(de la ligne `- name: Restore the warm work tree ...` jusqu'a l'etape suivante)
et l'exige byte-identique au corps du script. Tout ce qui se trouve ENTRE le
bloc `run: |` et l'etape suivante est avale par l'extraction : les blocs de
commentaires qui documentaient l'etape `Checkout` rendaient le corps non
conforme, et la garde rouge (le script "a diverge").

Les commentaires sont deplaces DANS l'etape qu'ils documentent, juste apres sa
ligne d'en-tete -- l'information est conservee, l'interstice est vide.

Garde : `python -m pytest scripts/tests/test_heal_worktree_action.py` -> 7 passed.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
@jsboige

jsboige commented Nov 4, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]

schema: 1

lane: myia-po-2028:CoursIA-3

pr: 24606

head: 01887d0

complete: true

body: read

comments-reviewed: 2

reviews-reviewed: 1

threads-reviewed: 0

threads-unresolved: 0

surfaces-sha256: dac43c256e00c76548a78628a340b78134fdf37facfbe47654fc71545da947d2

diff-files: 8

diff-additions: 215

diff-deletions: 7

checks: latest-wins-green

b0: clear

scope: pass

domain: pass

verdict: READY

organ: check_adjoint_prevalidation.py

organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 24606

organ-rc: 0

[/ADJOINT PREFLIGHT]

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

Delta depuis mon APPROVE de 08:54Z relu : un seul commit, qui deplace la ligne name/uses du checkout au-dessus du bloc de commentaires (commentaires YAML, semantique inchangee). B.0 rc=0, dossier READY du secretaire a cette tete. Approbation a la tete exacte 01887d0.

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)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Fix(ci,#22722): etendre le heal-worktree aux 16 jobs sparse du pool a _work persistant

2 participants