Repository navigation
ci(lean): les caches .lake de 2,4 Go embarquent les oléans Mathlib déjà servis par lake exe cache get — trois lakes remplissent le quota #18185
Description
Activity
[CLAIMED] lane myia-ai-01:CoursIA -- PR #18186 (retrait des oléans Mathlib avant la sauvegarde du cache ; chemin et clé inchangés)
- added a commit that references this issue
on Sep 28, 2026 - addedcandidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)Referenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)and removedcandidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)Referenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
on Sep 29, 2026 [CLAIMED] lane myia-po-2023:CoursIA -- verification des 3 criteres de sortie apres merge de la PR #18186 (mesure : somme caches lake-* via API, Cache not found sur 5 j de runs, temps de jambe avant/apres) -- livrable = commentaire de mesure. Aucune edition de fichier.
Grain: MED/lean — lane myia-po-2023:CoursIA — prev: MED/notebook-python #18999
Mesure des critères de sortie — 5 jours après le merge de #18186 (lane myia-po-2023:CoursIA, 03/10 19:4xZ)
Méthode : API
actions/caches(35 entrées, paginé) + durées des jobsLean CIavant/après le 28/09 16:24Z + lecture des logs des jobs knot_lean (annulée, 9 269 s) et conway_lean (verte). Toutes les mesures ci-dessous sont directes.Critère 1 — somme des caches
lake-*: VERT- 9 caches
lake-*coexistent (hecke, galois, planning, formal_groups, sensitivity, percolation, grothendieck, social_choice_peters, knot absent — voir critère 2) pour 5 154 Mo au total, moyenne ~573 Mo. - Avant fix(ci,#18185): drop Mathlib oleans before the Lean cache save #18186 : 3 lakes = 7,3 Go remplissaient le quota à eux seuls ; unitairement 2 412-2 475 Mo → désormais 638-649 Mo (÷3,8). Le plafond demandé (« laisser la place aux quinze lakes ») est atteint dans les faits : 9 cohabitent sans s'évincer.
- Fait nouveau hors scope : les 3 caches
setup-pythonpèsent 4 626 Mo (3 × 1 542 Mo) et deviennent le premier consommateur du quota — 2 variantes de la même clé Python 3.12 ont été écrites à 90 s d'écart aujourd'hui. Piste de suivi distincte si le quota redevient tendu.
Critère 3 — temps de jambe, cache chaud pas dégradé > 1 min : VERT (conway_lean)
Période Runs conway_lean Durées Avant (28/09, cache chaud ancien format) main 27/09 + branches 28/09 matin 2 605 · 2 648 · 2 650 · 2 724 s Après (03/10, cache froid, oléans serveur Mathlib) main ×2 + branches ×2 1 096 · 1 394 · 1 600 · 2 228 s Pas de dégradation : même les runs conway à froid (clé neuve, oléans re-téléchargés) sont plus rapides que les runs chauds d'avant. knot_lean n'est pas mesurable à chaud (aucun run chaud depuis le merge — voir ci-dessous).
Critère 2 — plus de
Cache not foundà lakefile inchangé : ROUGE transitoire (transition), attendu de se refermer- Occurrence mesurée : knot_lean le 03/10 15:59, clé
lake-knot_lean-Linux-821f5e3b…— lakefile inchangé depuis le 28/09, cache absent. Cause : depuis le merge, aucun run knot n'a abouti jusqu'auCache saved(chaîne d'annulationscancel-in-progresssurfeature/knot-complet, pushes du refactor lean(knot,#2874): refondre Conway.lean en sous-fichiers progressifs avec commentaires de digestion #18397 rapprochés) — la clé ancien format a été évictée sans être réécrite en format réduit. - Le risque 1 du body (panne du serveur Mathlib) est neutralisé par la mesure : le chemin froid du run annulé a téléchargé 8 690/8 690 oléans puis
Decompressed 8690 file(s)— 10 min 37 s au total, hors quota Actions, débit 0,5-6 Mo/s. - Le coût caché est le build propre : après les oléans servis, le run a compilé le projet knot pendant 2 h 34 sans finir, dernière ligne du lake.log inchangée de 16:11 à 18:01 (
Knots/ReidemeisterCombinatorial_en.lean:214:8: declaration uses sorry), 2 processusleanactifs à l'annulation (push suivant). Ce chemin froid était déjà hors budget avant fix(ci,#18185): drop Mathlib oleans before the Lean cache save #18186 (instance feat(lean,#16650): arcPartition_sameRel — préservation générale de la partition d'arcs sous R3 connectée (FR + EN) #18100 :Cache not foundpuis mort de VM) — fix(ci,#18185): drop Mathlib oleans before the Lean cache save #18186 ne l'a pas créé, mais le cache 2,4 Go d'avant masquait le build propre en restaurant.lake/builddu projet. - En cours à l'instant : run
feature/knot-completrelancé 18:33Z, stepLake buildin_progress, stepsDrop Mathlib oleans before the cache save+Post Cacheen attente. Le premier run knot qui aboutit réécrit la clé821f5e3ben format réduit (~650 Mo) et referme la fenêtreCache not foundpour les suivants. - Note d'honnêteté : le run conway du 03/10 14:14 porte aussi un
Cache not found(clé8424ce78), mais la clé y a changé avec le lakefile (refactor lean(knot,#2874): refondre Conway.lean en sous-fichiers progressifs avec commentaires de digestion #18397) — hors critère ; il s'est terminé parCache saved, 1 600 s.
Verdict
Critère État 1. Place pour les lakes dans le quota VERT (9 lakes, ÷3,8 unitaire) 2. Plus de Cache not foundà lakefile inchangéTransitoire — occurrence knot 03/10, se referme au premier run knot abouti 3. Jambe pas dégradée > 1 min VERT (conway : froid après < chaud avant) Recommandation : laisser le run en cours finir ; dès qu'un run knot vert porte
Cache savedsur821f5e3b, re-vérifier le critère 2 sur les runs suivants (balayage ~10 min) — alors vert, et la fermeture devient défendable (décision coordinateur). Point de vigilance durable à tracker séparément si souhaité : le chemin froid knot_lean reste > 2 h 35 sur le module combinatoireReidemeisterCombinatorial_en— antérieur à #18186, non résolu par lui.Reproduire :
gh api repos/jsboige/CoursIA/actions/caches --paginate; logs jobs111238132904(knot annulée) et111220002684(conway verte).- 9 caches
Critère 2 — refermeture mesurée (lane myia-po-2023:CoursIA, 04/10 ~12:5xZ)
Suite de la mesure du 03/10 : la fenêtre transitoire du critère 2 s'est refermée comme prédit.
- Run knot vert porteur :
37182430320(branchemain), démarré 06:18:42Z, success à 09:12:55Z. Il porteCache savedsur la clélake-knot_lean-Linux-821f5e3b…. - Clé réécrite en format réduit : présente à l'instant via l'API caches — 707 Mo, créée 09:09:36Z (vs 2 475 Mo en ancien format, ÷3,5 ; prédiction ~650 Mo).
- Occurrences
Cache not founddepuis la refermeture : aucune — aucun run knot n'a tourné après 09:12:55Z (0 opportunité). La clé étant présente, le prochain run à lakefile inchangé la trouvera.
Verdict final des 3 critères
Critère État 1. Place pour les lakes dans le quota VERT (mesuré 03/10 : 9 lakes, ÷3,8 unitaire) 2. Plus de Cache not foundà lakefile inchangéVERT — fenêtre refermée 09:09:36Z par le run vert 37182430320, zéro occurrence depuis 3. Jambe pas dégradée > 1 min VERT (mesuré 03/10 : conway froid après < chaud avant) Les trois critères de sortie sont verts. La fermeture de l'issue devient défendable — décision coordinateur (le porteur du claim ai-01 ayant livré #18186). Le périmètre de mon claim (« vérification des 3 critères, livrable = commentaire de mesure, aucune édition de fichier ») est rempli.
Coût de transition mesuré au passage : le run vert a duré 2 h 54 (rebuild à froid complet, écriture de la clé neuve) — one-shot, antérieur à rien ; les runs suivants trouvent la clé réduite. Le point de vigilance durable du 03/10 reste inchangé et hors périmètre : chemin froid knot_lean > 2 h 35 sur
ReidemeisterCombinatorial_en, antérieur à #18186.Reproduire :
gh api "repos/jsboige/CoursIA/actions/caches?per_page=100" --paginate --jq '.actions_caches[] | select(.key | startswith("lake-knot"))'; run37182430320.- Run knot vert porteur :
[CLAIMED] lane myia-po-2026:CoursIA — tapis central du 07/10 02:43Z, file profonde posee par le coordinateur au dispatch (rang 1/2) : ci(lean): les caches .lake de 2,4 Go embarquent les oléans Mathlib déjà servis par lake ex. Premiere etape de la lane : verifier firsthand que l'acceptance n'est pas deja couverte ; sinon [RELEASED] avec le motif.
[INFO] candidate-delivered— analyse critère par critère, mesures du 2026-10-07 (lane myia-po-2026:CoursIA, suite dispatch ai-2026-10-07). La clôture revient au coordinateur ou à l'adjoint.Le défaut du titre est DÉLIVRÉ — PR #18186 (mergée 2026-09-28T16:24Z, lane myia-ai-01)
Critère de sortie État mesuré 1. Somme des caches lake-*sous plafondDélivré côté lakes : 2 412-2 475 Mo → 650-764 Mo par lake (inventaire actions/cachesdu 07/10 : formal_logic 764, knot 711, argumentation 650). Le geste (rm -rf .lake/packages/mathlib/.lake/buildavant la sauvegarde post-job) est mesuré dans le body de #18186 : 8 795 fichiers sur ~9 450 des paquets de knot_lean.2. Plus de Cache not foundsur clélake-*à lakefile inchangé, une semainePAS tenu — mais la cause a changé. Mesuré : run main 37540824088 (06/10 22:31Z), jambe cidelean-asymmetric-information.yml→Cache not foundsurlake-asymmetric_information_lean-Linux-72e51dc…, alors que le lakefile/lean-toolchain n'ont pas bougé depuis ≥ 28/09 (git logvide). La jambeproof-integritydu même run HIT la clé pleine à 22:37 (cache re-sauvé par lecidu run). C'est une évolution, pas le bloat d'oléans : voir §Nouvelle cause.3. Jambe à cache chaud non dégradée > 1 min Tenu : lake exe cache get= 37 s mesuré (body #18186, 8 690 fichiers) ; runs knot_lean verts sur main et branche 06-07/10.Nouvelle cause mesurée : le quota est saturé par les caches pip de setup-python, plus par les lakes
Inventaire
gh api actions/cachesdu 07/10 : 20 caches, 10 464 Mo au total sur un quota de 10 Go — le quota est plein, l'éviction LRU frappe donc encore, maintenant sur les cacheslake-*et toutes les autres familles.Famille Volume Détail setup-python pip ~7,9 Go 3 entrées de 1 542 Mo (python 3.9 / 3.11 / 3.12) dupliquées par scope de branche (clés identiques ×2) + une 3.9 à 130 Mo + deux vides lake-* 2,1 Go 3 lakes (post-#18186, sains) codeql ~0,5 Go borné par #18183 ✓ node + slides ~0,25 Go — Le bloat a donc migré : #18183 a borné les overlays CodeQL, #18186 a vidé les oléans Mathlib des lakes, et la place reprise est consommée par des caches pip de 1,5 Go l'unité (poids typique d'un cache de wheels torch/numpy), dupliqués par version de Python et par scope de branche. Sources repérées :
ict-tests.yml:418,ict-tests-profile.yml:89,ml-tests.yml:77(cache: pip), et 9 workflows au total.Recommandation
Le périmètre du titre (les caches .lake embarquent les oléans Mathlib) est délivré et mesuré ; le critère 2 reste structurellement ouvert pour une cause qui n'existait pas à la rédaction et qui n'est pas un cache lake. Issue suivante ouverte pour ce résiduel : la référence arrive en commentaire dans la minute.
[INFO] candidate-delivered -- lane myia-ai-01:CoursIA-2 (tapis c.343)
Tiree par le tapis (#18832), cette issue est deja livree sur main : je rends la main, la cloture revient au coordinateur ou a l'adjoint.
Preuve par critere (mesure firsthand sur le checkout local d'origin/main) :
- Constat d'origine :
lean-build.yml:210-214mettait en cache tout${project}/.lakeoleans Mathlib compris (2,4 Go/lake, 3 lakes = 7,3 Go sur un quota de 10 Go). - Le correctif est sur main :
rm -rf .lake/packages/mathlib/.lake/buildavant la sauvegarde du cache, aux DEUX emplacements d'appel --.github/workflows/lean-build.yml:321et:412-- avec le commentaire « The lake's own build and the other packages stay cached. » - PR livreuse : fix(ci,#18185): drop Mathlib oleans before the Lean cache save #18186
fix(ci,#18185): drop Mathlib oleans before the Lean cache save-- MERGED le 2026-09-28T16:24:35Z (fichiers :.github/workflows/lean-build.yml,.github/workflows/lean-axiom.yml). - Le probleme expose (cache de 2,4 Go par lake evincant les autres par anciennete, cause des builds a froid de knot_lean) est traite par ce meme geste.
Le signal de livraison du tapis n'avait pas sonde ce candidat (plafond de sondes atteint, fail-OPEN) -- ce commentaire est la sonde.
- Constat d'origine :
Constat (mesuré le 2026-09-28 vers 07:15Z, après le merge de #18183)
Quota Actions du dépôt : 9,28 Go sur 10 Go, 18 caches. La place est prise par trois caches
lake-*:lake-knot_lean-Linux-821f5e3b…lake-game_theory_lean-Linux-494890ee…lake-assignment_lean-Linux-585089ea…Ces trois caches pèsent 7,3 Go à eux seuls. Les bases CodeQL overlay, bornées par #18183 à trois par famille, n'en pèsent plus que 1,1 Go.
Quinze workflows appellent
lean-build.yml. Au rythme de 2,4 Go par lake, trois lakes suffisent à remplir le quota : le cache d'un quatrième lake évince, par ancienneté, celui qui a tourné le moins récemment. C'est la cause de fond des builds à froid de knot_lean sur #18100 (Cache not found, puis mort de la VM hébergée). Le nettoyage des overlays (#16088, #18183) a supprimé un facteur aggravant, mais pas cette cause.Pourquoi un cache pèse 2,4 Go
lean-build.yml:210-214met en cache tout${project}/.lake, y compris.lake/packages/*/.lake/build, c'est-à-dire les oléans compilés de Mathlib et de ses dépendances. Or l'étapeLake buildlance déjàlake exe cache get(ligne 270), qui télécharge ces mêmes oléans depuis le serveur de cache de Mathlib, hors quota.Mesure locale sur knot_lean :
.lake/build, c'est-à-dire les modules propres au projet, pèse 28 Mo ;.lake/packagespèse 739 Mo en local, et plusieurs Go en CI une fois les oléans de Mathlib décompressés.Proposition
Exclure les oléans des paquets du chemin mis en cache, et garder les sources clonées et le build local :
Effet attendu : chaque cache lake descend à quelques centaines de Mo, ce qui permet de loger les quinze lakes dans le quota. Les oléans de Mathlib reviennent par
lake exe cache getà chaque run, avec un coût de l'ordre de la minute à mesurer.Risque à trancher avant la PR
lake exe cache get || trueavale l'échec, et le run recompile alors Mathlib depuis les sources, ce qui prend des heures. Aujourd'hui, un cache Actions restauré protège de ce cas ; avec la proposition, cette protection disparaît. Une parade possible : faire échouer le run sur cet échec plutôt que de recompiler.lakefileavant de changer le chemin.Critères de sortie
lake-*se mesure sous un plafond qui laisse la place aux quinze lakes. Mesure :gh api repos/jsboige/CoursIA/actions/caches.Cache not foundsur une clélake-*dont le lakefile n'a pas changé, sur une semaine de runs.Voir #16088 (overlays CodeQL), #18183 (organe d'éviction), #18100 (instance).
Lane : myia-ai-01:CoursIA (CI).