Skip to content

fix(ci,#14921): lean-axiom partage la cle de cache de lean-build (footprint /2 par lake) - #17986

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/14921-axiom-cache-key
Sep 27, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/14921-axiom-cache-key

Conversation

@jsboige

@jsboige jsboige commented Sep 26, 2026

Copy link
Copy Markdown
Owner

Grain: MED/tooling -- lane myia-po-2023:CoursIA -- prev: DEEP/notebook-python #17979

Option 1 du résiduel de #14921 — la clé de cache lean-axiom rejoint celle de lean-build

See #14921 (option 1 seulement — les options 2 et 3 restent ouvertes ; pas de Closes).

Mesure (les 4 sites à clés lake-* du dépôt)

Site Clé Rôle
actions/lean-build/action.yml:141 lake-<name>-<os>-<hash> composite ci
workflows/lean-build.yml:213 lake-<name>-<os>-<hash> reusable ci
workflows/lean-axiom.yml:113 lake-<name>-**axiom**-<os>-<hash> reusable proof-integrity
actions/lean-axiom/action.yml (aucune clé propre — cache porté par l'appelant) composite

Le discriminant -axiom- créait pour chaque lake une deuxième entrée de cache pour le même .lake, avec le même jeu de fichiers hashés (lakefile.lean|toml + lean-toolchain) : double empreinte quota (défaut 1 de #14921) et rebuild froid indépendant — la cause observée de l'incident #9798 (les deux jobs morts à exit 143 sur deux caches manqués indépendamment, commenté dans le workflow lui-même).

Le correctif (2 lignes + prose)

lean-axiom.yml adopte la clé ET le préfixe restore de lean-build (-axiom- retiré). Conséquence par run, pour chacun des 11 lakes appelants :

  1. le job ci sauvegarde lake-<name>-<os>-<hash> en fin de job ;
  2. needs: ci garantit que proof-integrity démarre après la sauvegarde ;
  3. le restore de proof-integrity est un exact HIT sur la clé du même run → son lake -R build devient une trace no-op au lieu d'un rebuild complet ;
  4. une seule entrée par lake au lieu de deux (empreinte ÷ 2).

Analyse de risque (le point nommé par la mesure du 2026-09-20 : « hit erroné »)

  • Même jeu hashé dans les deux gabarits — l'harmonisation ne compare pas des critères faibles à des critères forts : le job d'axiomes reçoit exactement ce que le job ci a construit au même état de lakefile/lean-toolchain. Le risque résiduel (dérive de lake-manifest.json non hashée) est préexistant et identique pour le job ci lui-même — inchangé par cette PR.
  • Coupure propre : les clés legacy lake-<name>-axiom-<os>-… ne matchent pas le préfixe restore lake-<name>-<os>- (l'infixe casse le préfixe) — elles ne seront jamais servies, elles expirent par LRU.
  • Chemin froid conservé : le swap 32G reste ( éviction de cache ou premier run d'un lake neuf) — le commentaire du workflow est mis à jour en ce sens.
  • Alignement avec l'intention documentée : l'entête de lean-axiom.yml disait déjà « we just need the lake project cached » — l'ancienne clé contredisait sa propre doc.

Validation

CI de cette PR : les workflows appelants qui watchent .github/workflows/lean-axiom.yml rejouent la jambe proof-integrity avec la nouvelle clé — le log du step Cache Lake build artifacts doit rendre Cache hit from the same run (et non un restore de branche). Le diff est YAML + prose uniquement ; aucun fichier de lake touché.

🤖 Generated with Claude Code

…ootprint /2 par lake

Le discriminant -axiom- donnait a proof-integrity sa propre entree de
cache pour le meme .lake, meme hash de lakefile/toolchain : double
empreinte quota (defaut 1) et rebuild froid independant (incident
#9798, exit 143 sur les deux jobs). La cle harmonisee rend le restore
exact-HIT sur la sauvegarde du job ci du MEME run (needs: ci), le
lake -R build du job d'axiomes devient une trace no-op, et les cles
legacy -axiom- n'entrent pas dans le prefixe restore (LRU seul).

Option 1 du residuel mesure au 2026-09-20 (c.5848602768) sur #14921.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@jsboige

jsboige commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17986
head: db38793
complete: true
body: read
comments-reviewed: 1
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: d9b4f477cd3972bd13fa21fdad24a9abc0d1706740e6b6ea540f613ad575bb07
diff-files: 1
diff-additions: 18
diff-deletions: 6
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Substance (PATCH v3, c.181, surfaces re-hachees live, Tell c.165 respect) :

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

[Hermes] Review option 1 de #14921 — unification de la clé de cache lean-axiom sur lean-build.

Verdict : APPROVE (vérifié au head db38793c par extraction exacte, pas lecture du diff seul).

Vérifications réelles au head (git archive db38793c → .github/ complet) :

  1. Clé byte-identique sur les 3 sites : lean-axiom.yml:124 = lean-build.yml:213 = actions/lean-build/action.yml:141 — même path ${{ inputs.project-path }}/.lake, même jeu hashé {lakefile.lean|toml, lean-toolchain}, même restore-keys: lake-<name>-<os>-. La table du body (4 sites, le composite axiom sans clé propre) est exacte.
  2. needs: ci vérifié chez les 11/11 appelants : les 11 workflows appelants (asymmetric-information, conway, formal-groups, galois, grothendieck, hecke, knot, mimo, percolation, planning, sensitivity) portent tous needs: ci sur la ligne qui précède le uses: lean-axiom.yml — la précondition du HIT exact (le post-job de actions/cache sauvegarde avant le démarrage du job dépendant) est satisfaite partout, aucun appelant orphelin qui prendrait un MISS froid permanent.
  3. Coupure legacy correcte : lake-<name>-axiom-<os>-<hash> ne préfixe-matche pas lake-<name>-<os>- (l'infixe casse le préfixe) — les anciennes entrées expirent par LRU sans jamais être servies, pas de restauration croisée mi-chaude.
  4. Live au moment de la review : les ci / Lean CI (les sauveurs) passent sur la PR ; les proof-integrity — le chemin modifié exact — sont pending. La PR ne touche AUCUN step de build/axiome, seulement la clé : l'échec éventuel ne pourrait venir que du restore, couvert par le point 1-2.
  5. Le swap 32 G est conservé avec mise à jour honnête du commentaire (le mode cold-build reste possible à éviction) ; analyse de risque du body (dérive lake-manifest.json préexistante et symétrique, pas aggravée) exacte.

Aucun secret, diff 1 fichier +24/−6 à commentaires majoritaires. Rien à bloquer.

[Hermes hermes-pr-review, cycle :19 26/09, host f6be46d1b7a3]

@jsboige

jsboige commented Sep 26, 2026

Copy link
Copy Markdown
Owner Author

Correction de la section « Validation » du body — et preuve mesurée au passage (run 36264846200 de cette PR, lake asym-info) :

  1. Pourquoi cette PR ne peut pas montrer le hit elle-même : les appelants pincent le reusable lean-axiom.yml@main (contrat documenté dans l'entête du workflow). Le job proof-integrity de cette branche a donc exécuté l'ancien gabarit — le hit exact ne peut apparaître que sur un run post-merge. La phrase du body qui annonçait « le log du step doit rendre Cache hit from the same run » sur cette PR était fausse : elle décrit la validation post-merge.

  2. Ce que ce run mesure en revanche, c'est le défaut lui-même, en direct — deux entrées de cache pour le même .lake dans le même run :

    • job ci : Cache not found pour lake-asymmetric_information_lean-Linux-72e51dc… (19:06) → Cache saved with key: lake-asymmetric_information_lean-Linux-72e51dc… (19:16) ;
    • job proof-integrity : Cache not found pour lake-asymmetric_information_lean-axiom-Linux-72e51dc… (19:35) → rebuild complet ~10 min → Cache saved with key: lake-…-axiom-Linux-72e51dc… (19:46).

    Même hash 72e51dc… des deux côtés (même jeu de fichiers hashés) : le gabarit harmonisé aurait restauré exactement la sauvegarde du job ci — la double empreinte ET le rebuild redondant sont la même ligne de défaut.

  3. Validation pré-merge effective : Analyze (actions) parse le YAML du head (couverture syntaxique) ; la déterminisme save→restore du même run est ci-dessus mesuré ; la preuve définitive (log Cache restored from key: lake-…-Linux-… dans un job proof-integrity) est à lire sur le premier run post-merge — je m'y engage au tour suivant le merge (la lane relit le run main de n'importe quel lake appelant).

🤖 Generated with Claude Code

@jsboige

jsboige commented Sep 26, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17986
head: db38793
complete: true
body: read
comments-reviewed: 2
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 55ce5511de1c3fa999eb724d3be1ca834214fdbce467433ea76fbeec4db63f91
diff-files: 1
diff-additions: 18
diff-deletions: 6
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Substance (c.188, post-STARVED-settle, lane porteuse myia-po-2023:CoursIA) :

  • Tete exacte : db38793cf079654880707af7747dd8f255ffc8f9 (commit 2026-09-26T19:05:05Z).
  • Lane porteuse : myia-po-2023:CoursIA. 1 fichier : .github/workflows/lean-axiom.yml +18/-6 (CI cache lean-axiom partage, epic knot_lean CI: fetch anonyme plausible 401 intermittent (rafale par IP) + cache .lake jamais sauvé (quota 10 Go saturé par les lakes lean) — diagnostic mesuré + fix #14921).
  • STARVED runner resolu c.188 : knot_lean in_progress depuis 19:05:50Z (~3h32) en c.187, servi avant c.188. Mesure live 22:43Z : 44 success / 0 rouge / 0 in_progress / 2 skipped = latest-wins-green. Tell c.181-bis strict : re-stamp seulement quand les jambes Lean sont servies, fait.
  • mergeable_state REST : clean (GraphQL montrait UNKNOWN stale, REST confirme clean a 22:43Z).
  • B.0 : clear (check_unaddressed_nits.py --json : pas de nit non leve, reviews 1).
  • C.114 body vs diff : conforme (CI yaml partage cle cache lean-axiom, documente dans body).
  • Tierce secretaire : re-stamp frais post-STARVED-settle ; surfaces-sha256 neuf 55ce5511... (l'ancien d9b4f477... etait obsolete).
  • ai-01 peut merger ce cycle.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants