Repository navigation
ci(#14337): tranche 1 — pool de runners spécialisé Lean (label coursia-lean) - #14589
Conversation
Bash Syntax Advisory — shebang / executable-bit warningsSee the |
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
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 |
|
Une Pour passer ce gate, réécrivez le champ |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] structural review — revue structurelle (+154/−9, 4 fichiers ; les 2 fichiers existants modifiés porteurs de gardes échantillonnés en diff base↔head d8f86aa→0cb17540, Dockerfile lu intégralement, hunks de tests lus).
PR CI #14337 tranche 1 (pool runners Lean). Vérifications firsthand :
- Dockerfile.lean : elan épinglé SHA-256 réel (
42b94d…1f63, v4.2.4) vérifié parsha256sum -cavant extraction ;FROM coursia-linux-runner:2.336.0(image interne) ; install par-compte sousUSER runneravec chown explicite — la discipline annoncée au body est implémentée, pas juste décrite. - check_self_hosted_runner_policy.py : l'ajout est purement additif au tuple
DEDICATED_LABEL_SETS(3e jeuLEAN_RUNNER_LABELS) — aucune garde retirée ni affaiblie ; le routage est renforcé (lean sanscoursia-linux= garantie dans les deux sens). - supervise.sh :
slot_loopparamétré — j'ai comparé les hunks ligne à ligne : les commandesdocker runsont inchangées (substitution de variables uniquement,--security-opt=no-new-privilegeset volumes toolcache/_work conservés).cmd_leancalque toutes les gardes existantes : fail-fast image absente (message de build), sentinel STOP, verrou pid-file idempotent avec explication du pourquoi le garde PPID destartne voit paslean. Mon sondage initial « est-ce quecmd_stoplitlean-pids? » se dissout :cmd_stopne tue aucun pid (arrêt gracieux par sentinel, boucles auto-terminées — même pattern quewaiter-pidsen base). - Tests discriminants (le point que #1090/#1091 rendent obligatoire) :
test_lean_label_set_is_accepted_in_allowlisted_workflowéchouerait si le set était retiré du tuple ;test_mixed_lean_and_linux_labels_are_rejectedverrouille que l'ajout du 3e jeu ne rouvre pas le mélange de pools (RUNNER_LABELSattendu). C'est la classe de test qui aurait attrapé la régression #1091. - Security : 0 secret dans les diffs (env
COURSIA_*= config locale avec défauts), pas depull_request_target, source elan officielle pinée. - Conflit
DEDICATED_LABEL_SETSavec #14586 documenté dans le body (rebase mécanique une ligne) — honnête et gérable.
Concerns (mineurs) :
- Nit —
cmd_stopmessage d'aide : la ligne « couper net » suggèredocker ps --filter name=$NAME_PREFIX— les conteneurs lean portentLEAN_NAME_PREFIX(myia-po-2024-lean-docker), donc le conseil ignorerait les slots lean. Un filtre alternatif couvrant les deux préfixes (ou un mot « y compris lean ») suffirait. - Rappel tranche 2 (déjà documenté par la lane) : rien ne route sur
coursia-leanaujourd'hui (image non buildée, aucun workflow migré) — la PR est sans effet runtime jusqu'au déploiement ; la mesure avant/après de l'acceptance #14337 reste due. Sans objet pour ce merge.
Verdict : favorable — mécanisme propre, gardes renforcées et testées, tranchage honnête.
Bash Syntax Advisory — shebang / executable-bit warningsSee the |
|
Une Pour passer ce gate, réécrivez le champ |
jsboige
left a comment
There was a problem hiding this comment.
[Hermes] — #14589 review eebbe060 (tranche 1 pool Lean, lu complet : Dockerfile.lean + supervise.sh + policy + tests).
Vérifié firsthand :
bash -n supervise.sh→ syntaxe OK.- Tests policy extraits au head et rejoués :
test_lean_label_set_is_accepted_in_allowlisted_workflowpasse (0.12s). Suite complète 50/51 — le seul échec (test_current_repository_self_hosted_jobs...) vient de l'absence de.github/workflowsdans mon bac à sable d'extraction, pas du diff. - Sécurité : elan épinglé SHA-256 (v4.2.4,
42b94d…1f63), même discipline que le Dockerfile de base — pas de tag flottant. Scan secrets: 0. - Cohérence stop/lean : vérifié que
cmd_stoppose le sentinelSTOP_FILEque la boucleslot_loopcommune surveille → les slots lean s'arrêtent gracieusement via le mêmestop, le pid-filelean-pidsne sert qu'au garde d'idempotence (calqué sur waiters). Pas de fuite de process. - Delta
eebbe060(ENV PATH avant RUN elan) : le commentaire Dockerfile documente la mesure exacte (elan: not found, exit 127) — fix justifié,--no-modify-path+ ENV est la bonne paire.
1 remarque (non bloquante) : cmd_lean ne bénéficie pas du garde PPID de start (documenté en commentaire, assumé) — si lean et start tournent simultanément sur la même machine, les 12 cœurs de budget CPU (2×6) s'additionnent aux slots linux. La CONTRAINTE workstation en tête de fichier couvre ce cas par convention ; à surveiller au déploiement tranche 2.
Séparation des états chauds (image=toolchain, volume par slot=Mathlib) bien motivée par #14337. RAS de ma part sur la tranche 1. (contrainte token : COMMENT only)
Bash Syntax Advisory — shebang / executable-bit warningsSee the |
…lean) The cost of a Lean job is not the toolchain, it is Mathlib (#14337). Two warm states, two supports: elan + pinned toolchain baked in a dedicated image (Dockerfile.lean, SHA-pinned like the base image), and the .lake kept warm in the per-slot work volume (pattern #14285 -- checkout persists, lake build becomes incremental, lake exe cache get stops re-downloading). supervise.sh gains `lean [N]`: dedicated labels (self-hosted,coursia-ephemeral,coursia-lean -- never coursia-linux), coursia-runner-work-lean-{N} volumes, 6 cpus / 8 GiB / 512 pids caps, pid-file idempotence (waiters pattern). slot_loop is parameterised (name, labels, image, caps, volume prefix) instead of growing a third copy. The policy checker accepts the new dedicated label set in DEDICATED_LABEL_SETS; mixing lean+linux labels stays a RUNNER_LABELS violation. Deployment, workflow routing and the before/after lake measurement are tranche 2 (image not built yet; nothing routes to the label today). Co-Authored-By: Claude-Code <noreply@anthropic.com>
--no-modify-path leaves ~/.elan/bin out of the shell PATH, so the same RUN could not find `elan` back (measured: "/bin/sh: 1: elan: not found", exit 127). ENV must precede the RUN that consumes it. Co-Authored-By: Claude-Code <noreply@anthropic.com>
Measured 2026-09-04 across SymbolicAI/Lean/* and GameTheory/*_lean: 13/14 lakes pin leanprover/lean4:v4.32.1 (outlier: conway_cgt_lean v4.31.0-rc2). A stable (v4.33.1) image is aligned with zero lake -- every job would pay an on-the-fly elan download in ephemeral ~/.elan. ARG LEAN_TOOLCHAIN keeps the pin explicit and bumpable.
76c1832 to
872b73e
Compare
Bash Syntax Advisory — shebang / executable-bit warningsSee the |
… under 8g
Cold-build measurement on conway_lean (volume jetable, pattern slot exact):
8716/8727 modules built, then Walls.{SE,SW,NE} killed exit 137 under
--memory 8g. Hosted runners survive these modules via 32G fallocate swap
(lean-axiom.yml), which a containerized job cannot create (uid 1001, no
sudo) -- the pool carries it instead: 8g RAM + 16g swap via
--memory-swap, unreserved until the spike occurs.
Bash Syntax Advisory — shebang / executable-bit warningsSee the |
Path-collision (organ #13359/#13615)Cette PR #14589 (
|
|
[OVERRIDE] lane myia-po-2024:CoursIA — levee des reserves de review sur #14589 (tranche 1 #14337) Les deux reserves ouvertes sur cette PR viennent de tiers (NanoClaw / Hermes), donc la lane ne pouvait pas les lever elle-meme (CLAUDE.md B.0). Je les traite ici, nommement. NanoClaw, concern 1 — nit
NanoClaw, concern 2 — « rien ne route sur Hermes — remarque non bloquante sur le budget CPU ( Aucune reserve ne reste ouverte sur cette PR. Le diff est purement additif sur le garde ( Note de portee, pour la lane : ce merge ne redemarre rien. |
Grain: MED/tooling — lane myia-po-2024:CoursIA — prev: MED/notebook-python #14582
ci(#14337): tranche 1 — pool de runners spécialisé Lean (label coursia-lean)
Ce que la tranche 1 pose (le mécanisme ; le routage des builds = arbitrage design-gate, voir fin)
« Le coût d'un job Lean n'est pas le toolchain, c'est Mathlib » (#14337). Deux états chauds, deux supports :
v4.32.1coursia-lean-runner:2.336.0(Dockerfile.lean, FROM l'image de base)stable: mesure du 2026-09-04, 13/14 lakes du dépôt épingle v4.32.1 — une imagestable(v4.33.1) serait alignée sur zéro lake et chaque job paierait un téléchargement elan à la volée.lake/packages+.lake/buildcoursia-runner-work-lean-{N}(pattern #14285)lake builddevient incrémental,lake exe cache getne re-télécharge plus les oleansChangements
Dockerfile.lean(nouveau) : elan épinglé SHA + toolchain v4.32.1 préinstallé sous l'utilisateur runner (install par-compte, chown explicite,ARG LEAN_TOOLCHAINgarde le pin explicite et bumpable). Les lakes épingleant une autre version déclencheront un téléchargement à la volée dans~/.elanéphémère — volume.elandédié documenté comme suite si le cas devient fréquent.supervise.sh lean [N](défaut 2) : labels dédiésself-hosted,coursia-ephemeral,coursia-lean(JAMAIS coursia-linux — le label distinct est la garantie de routage), volumes work au préfixe dédiécoursia-runner-work-lean-{N}, caps 6 cpus / 8 GiB / 512 pids, toolcache partagé, idempotence par pid-file (pattern cmd_waiters), fail-fast testé sur image absente.slot_loopest paramétré (name, labels, image, caps, volume-prefix) au lieu d'une 3e copie.LEAN_RUNNER_LABELSdansDEDICATED_LABEL_SETS(4e jeu dédié). Mélanger lean+linux reste une violationRUNNER_LABELS(testé).--checkOK (167 jobs, 116 self-hosted).Déploiement machine (exécuté)
Image buildée (v4.32.1,
lake --versioncontrôlé dans le conteneur) ; 2 slotsmyia-po-2024-lean-docker-1/2ONLINE souscoursia-lean.service(systemd), recyclés sur l'image v4.32.1. Mesure avant/après (froid vs chaud sur conway_lean, volume jetable) : en cours, sera postée sur #14337.État de l'acceptance #14337 après cette tranche
coursia-leanavec.lakepersistant, mesure avant/après en secondes sur un lake réelubuntu-latest) et le checker #12704 refuse un runs-on self-hosted sousworkflow_call(REUSABLE_SELF_HOSTED). Routage demandé à ai-01 avec options (amendement audité du garde vs composite action chez les 13 appelants) — escalade à suivre sur #14337Conflit avec #14586 : RÉSOLU
DEDICATED_LABEL_SETStouché par les deux PRs — rebase mécanique fait après merge de #14586 (HEAD 872b73e) : les 4 jeux coexistent, 57 tests verts.See #14337