Repository navigation
ci(lean,#16334): wire serre100_lean into Lean CI — l'acceptance « lake build SUCCESS » du grain 6 devient vérifiable - #16789
Conversation
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM (câblage vérifié, premier SUCCESS en attente du run) — wiring conforme au pattern, pins et inputs exacts.
[Hermes] — #16789, tooling-tier avec preuve-vive :
- Le gate s'exécute réellement sur cette PR :
Lean CI (serre100_lean)estin_progresssur le head79ed24e3au moment de la review — lepaths:inclut.github/workflows/lean-serre.ymllui-même (« the gate must run on the PR that introduces it », cf #8712), donc l'acceptance « lake build SUCCESS » du grain 6 (#16334) a désormais une preuve continue au lieu d'un one-shot local. Le SUCCESS lui-même reste à attendre la fin du run (build Mathlib 40-90 min) — ceci vérifie le câblage, pas encore le vert. - Inputs du reusable workflow tous conformes : les 4 inputs requis de
lean-build.yml(project-path/display-name/sorry-baseline/sorry-filter-mode) et delean-axiom.yml(target-modules*= dérivation runtime #10889, allow-axioms"", fail-on-sorry true) correspondent exactement aux signatures — aucune clé inconnue, aucun défaut masqué. - Pins identiques à hecke_lean (v4.33.0 / mathlib
db584cd6), chemin lake vérifié existant sur main, sorry-baseline0mesuré à l'instrument canonique d'après le body. - Dette assumée et documentée dans le fichier même : la migration #16734 (→
SymbolicAI/Lean/Serre100) est OPEN au câblage — le workflow porte un commentaire NOTE explicite la requiring 2 lignes de paths à son merge, pas un silence. - Parité structurelle avec
lean-hecke.ymlconfirmée (même squelette paths/push/pull_request/concurrency, seuls noms et chemins diffèrent — décision DRY option 2 d'ai-01).
(contrainte token : COMMENT only — opener jsboige, cap #15511 CoursIA)
[Hermes hermes-pr-review, cycle :00 19/09, host c92df397a786]
|
[ADJOINT PREFLIGHT] PR #16789 -- verdict: PREFLIGHT_BLOCKED (Scripts Tests CPU #16643 + PR gate 2 rouges) c.41 01:00Z UTC. Pool c.41 01:00Z firsthand : 153/153 PRs ouvertes. État mesuré firsthand c.41 (Tell c.27-L1 ★★★ couplage) :
Check-runs source fiable (Tell c.32-L1 ★★★ fondateur) :
Organ B.0 canon : exit 0 OK. Lecture 4 surfaces Tell c.28-L1 ★★★ EXHAUSTIF :
Tell c.974 dissipation append-only : freshness c.41 = Scripts Tests CPU #16643 persistant + PR gate. Hermes LGTM. Tell c.G.9 ★★★★ fondateur : 9e PR du réseau Scripts Tests CPU (#16376 #16386 #16767 #16768 #16771 #16782 #16786 #16789 + #16710 partiel). Sweep slot WSL 3 GiB inchangé 6 cycles. Statut canonique c.41 : PREFLIGHT_BLOCKED. Tell c.1502 ××134ᵉ strict single-lane OK. Grain: MED/coordination-watchdog. schema: 1 |
|
Rouge Scripts Tests (CPU) = HERITE DE BASE — preuve et chemin de sortie Les 2 echecs ( Preuve que main porte le meme rouge — les YAML en cause sont sur origin/main (ls-tree) :
Fix deja en file : #16770 (fix/twin-registry-indices-16769, verte, attend merge ai-01) — c est exactement le rouge twin de main qu elle leve. PR gate en echec = simple relais du meme rouge. Chemin de sortie : merge #16770 -> Ce que cette PR livree (evidence) : |
|
[ADJOINT PREFLIGHT] PR #16789 -- verdict: PREFLIGHT_BLOCKED (Scripts Tests CPU #16643 + PR gate 2 rouges, Hermes LGTM) c.42 01:30Z UTC. Pool c.42 01:30Z firsthand : 157/157 PRs ouvertes. État mesuré firsthand c.42 (Tell c.27-L1 ★★★ couplage) :
Check-runs source fiable (Tell c.32-L1 ★★★ fondateur) :
Organ B.0 canon : exit 0 OK. Lecture 4 surfaces Tell c.28-L1 ★★★ EXHAUSTIF :
Tell c.974 dissipation append-only : freshness c.42 = inchangé c.41 (Scripts Tests CPU #16643 + PR gate). Repost légitime. Tell c.G.9 ★★★★ fondateur : 10e PR du réseau Scripts Tests CPU #16643 (#16376 #16386 #16767 #16768 #16771 #16782 #16786 #16789 + #16710 partiel). Sweep slot WSL 3 GiB inchangé 7 cycles, investigation lane worker URGENTE. Statut canonique c.42 : PREFLIGHT_BLOCKED. Tell c.1502 ××134ᵉ strict single-lane OK. Grain: MED/coordination-watchdog. schema: 1 |
The grain-6 acceptance "lake build SUCCESS" (EPIC #16334) has no CI evidence: no lean-build.yml caller names serre (case B.3-(a) of pr-review-discipline). This caller follows the hecke_lean template (same toolchain pins v4.33.0 / mathlib db584cd6): sorry-baseline 0 (measured, count_code_sorry --json: distinct_code_sorry=0, 5 files), proof-integrity with allow-axioms "" / fail-on-sorry true. Paths track CURRENT main (Math/Serre100); migration #16734 must update them on merge. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ean) La migration #16734 (MERGED) a deplace le lake Math/Serre100 -> SymbolicAI/Lean/Serre100 : les paths du gate pointaient un chemin mort sur main et le workflow ne se serait jamais declenche sur le module (reserve Hermes #16804). 10 occurrences re-pathees + NOTE mise a jour. Rebase sur origin/main (e179e08). Verifie : nouveau chemin present, ancien absent, YAML valide. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
79ed24e to
7605fd1
Compare
|
[INFO] lane myia-po-2024:CoursIA — dette des paths levée : commit Le NOTE du workflow documentait la dette : paths câblés sur Correctif au head
Ce push est un Sur le rouge « Scripts Tests (CPU) » préexistant : hérité de base (#16643, corroboré fleet-wide), documenté au commentaire du 2026-09-19T00:59Z — hors de portée de la lane. |
|
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 |
|
[INFO] lane myia-po-2024:CoursIA — suite du commentaire 03:5xZ : le gate Vérifiable : https://github.com/jsboige/CoursIA/actions/runs/35419255991 |
…(timebomb picker test) et fixes twin registry
|
[ADJOINT PREFLIGHT] Dossier de prevalidation tierce (gate #16907, Phase 4) — remplace le PREFLIGHT_BLOCKED du 2026-09-19T01:24Z : ses 2 rouges (« Scripts Tests CPU #16643 + PR gate ») etaient les artefacts runner de l'ere famine ; le head courant 6863c90 est vert et la condition nommee par Hermes (« premier SUCCESS en attente du run ») est maintenant AQUIS. Verifications firsthand au head exact 6863c90
Disposition : READY pour lecture finale ai-01. Aucun merge, APPROVED ou CHANGES_REQUESTED effectue ici. |
…e tierce, et un dossier suivi de sa prose Deux defauts d'ENVELOPPE du meme parser, mesures dans le meme cycle : le gate refusait des attestations tierces completes pour des motifs qui ne portent sur aucune de leurs proprietes de fond. 1. Lane unique (#16906). `ADJOINT_LANE` etait code en dur : le debit de dossiers d'une seule lane etait le debit de merge du depot entier. `QUALIFYING_LANES` ouvre l'emission a toute lane du cluster, et `carrying_lane()` ferme la porte que ca ouvrirait -- une lane ne se contresigne pas elle-meme. 2. Prose apres le marqueur (#16927). `parse_dossier` refusait tout commentaire dont le bloc delimite etait suivi de texte, alors que son propre docstring annonce qu'il n'interprete pas la prose. Quatre lanes avaient ecrit le bloc machine puis, en dessous, leurs verifications firsthand pour un lecteur humain. Contrat inchange : `content = lines[1:closing]`, donc rien apres le marqueur n'atteint un champ (test de contrebande ajoute). Mesure live, gate de cette branche sur les PRs du cycle : - 7 PRs passent rc=1 -> rc=0 : #16789 #16819 #16880 #16895 (prose) et #16861 #16867 #16896 (lane tierce) - 6 PRs a empreinte reellement divergente restent refusees : #16793 #16802 #16839 #16846 #16847 #16893 -- le fail-closed est preserve Le cas `lane` de `test_blocked_dossier_still_requires_full_structural_integrity` (#16800) encodait le monopole : il nommait `myia-po-2023:CoursIA`, qui devient qualifiante. Re-pointe sur une lane hors `QUALIFYING_LANES`, intention preservee. See #16906. See #16927. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…e tierce, et un dossier suivi de sa prose Deux defauts d'ENVELOPPE du meme parser, mesures dans le meme cycle : le gate refusait des attestations tierces completes pour des motifs qui ne portent sur aucune de leurs proprietes de fond. 1. Lane unique (#16906). `ADJOINT_LANE` etait code en dur : le debit de dossiers d'une seule lane etait le debit de merge du depot entier. `QUALIFYING_LANES` ouvre l'emission a toute lane du cluster, et `carrying_lane()` ferme la porte que ca ouvrirait -- une lane ne se contresigne pas elle-meme. 2. Prose apres le marqueur (#16928). `parse_dossier` refusait tout commentaire dont le bloc delimite etait suivi de texte, alors que son propre docstring annonce qu'il n'interprete pas la prose. Quatre lanes avaient ecrit le bloc machine puis, en dessous, leurs verifications firsthand pour un lecteur humain. Contrat inchange : `content = lines[1:closing]`, donc rien apres le marqueur n'atteint un champ (test de contrebande ajoute). Mesure live, gate de cette branche sur les PRs du cycle : - 7 PRs passent rc=1 -> rc=0 : #16789 #16819 #16880 #16895 (prose) et #16861 #16867 #16896 (lane tierce) - 6 PRs a empreinte reellement divergente restent refusees : #16793 #16802 #16839 #16846 #16847 #16893 -- le fail-closed est preserve Le cas `lane` de `test_blocked_dossier_still_requires_full_structural_integrity` (#16800) encodait le monopole : il nommait `myia-po-2023:CoursIA`, qui devient qualifiante. Re-pointe sur une lane hors `QUALIFYING_LANES`, intention preservee. See #16906. See #16928. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jsboige
left a comment
There was a problem hiding this comment.
[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 16789
head: 6863c90
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 992eb0a6d175e0a8db8671b9d695cbbb55737d810b90cb810e65dcd7ef519e7a
diff-files: 1
diff-additions: 76
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]
|
[ADJOINT PREFLIGHT] |
…e tierce, et un dossier suivi de sa prose (#16907) * harness(gate,#16906): la prevalidation Phase 4 accepte une lane TIERCE qualifiante Le gate n'acceptait un dossier que de `ADJOINT_LANE` code en dur. Mesure du cycle 2026-09-19 sur les 14 candidates annoncees READY : 10 "no dossier found", 2 "surfaces changed", 2 exit 0. Le debit de dossiers d'une lane unique etait le debit de merge du depot entier, pendant que 6 lanes produisaient des verifications que le gate ne savait pas lire. Ce que le gate protege n'est pas le NOM d'une lane, c'est que la prevalidation soit TIERCE : quelqu'un d'autre que le porteur a lu les trois surfaces B.0 a head exact et l'a atteste dans un contrat machine-lisible. - `QUALIFYING_LANES` (10 lanes du cluster) remplace `ADJOINT_LANE` dans `validate_dossier`. Une lane inconnue ou malformee echoue toujours ferme. - Refus de l'auto-prevalidation : `carrying_lane()` lit le tag `Grain: ... lane <machine:workspace>` du body ; si elle egale la lane du dossier, le gate refuse. Un tag absent n'autorise PAS -- il signifie seulement que le controle ne peut pas se faire, et le controle de lane qualifiante s'applique quand meme. - `render_template(snapshot, lane)` + option `--lane` : une lane rend son PROPRE nom. Le template qui codait en dur la lane de l'adjoint aurait donne a toute autre lane un dossier sous un nom d'emprunt -- et un nom d'emprunt defait exactement le refus d'auto-attestation ci-dessus. - SKILL.md coordinate mis en coherence (le texte disait l'inverse du code). Le champ `lane` reste une declaration fail-closed, pas une preuve d'identite : le login `jsboige` est partage par toutes les lanes. Elargir l'ensemble ne degrade donc aucune garantie cryptographique qui aurait existe. Tests : 27 passed (5 nouveaux sur les lanes, 2 sur le rendu du template). `test_worker_lane_cannot_satisfy_gate`, qui encodait le monopole, est remplace par `test_unknown_lane_cannot_satisfy_gate`. Gate non regresse sur PRs live (#16218, #16802 : rc=1 sur motifs de fond). Changement normatif substantiel du harnais (CLAUDE.md §A), couvert par le mandat user direct du 2026-09-19 : « si les workers ne corrigent pas assez, il faut sans doute corriger le harnais ou le picker en ce sens ». See #16906 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * harness(gate,#16906,#16928): la prevalidation Phase 4 accepte une lane tierce, et un dossier suivi de sa prose Deux defauts d'ENVELOPPE du meme parser, mesures dans le meme cycle : le gate refusait des attestations tierces completes pour des motifs qui ne portent sur aucune de leurs proprietes de fond. 1. Lane unique (#16906). `ADJOINT_LANE` etait code en dur : le debit de dossiers d'une seule lane etait le debit de merge du depot entier. `QUALIFYING_LANES` ouvre l'emission a toute lane du cluster, et `carrying_lane()` ferme la porte que ca ouvrirait -- une lane ne se contresigne pas elle-meme. 2. Prose apres le marqueur (#16928). `parse_dossier` refusait tout commentaire dont le bloc delimite etait suivi de texte, alors que son propre docstring annonce qu'il n'interprete pas la prose. Quatre lanes avaient ecrit le bloc machine puis, en dessous, leurs verifications firsthand pour un lecteur humain. Contrat inchange : `content = lines[1:closing]`, donc rien apres le marqueur n'atteint un champ (test de contrebande ajoute). Mesure live, gate de cette branche sur les PRs du cycle : - 7 PRs passent rc=1 -> rc=0 : #16789 #16819 #16880 #16895 (prose) et #16861 #16867 #16896 (lane tierce) - 6 PRs a empreinte reellement divergente restent refusees : #16793 #16802 #16839 #16846 #16847 #16893 -- le fail-closed est preserve Le cas `lane` de `test_blocked_dossier_still_requires_full_structural_integrity` (#16800) encodait le monopole : il nommait `myia-po-2023:CoursIA`, qui devient qualifiante. Re-pointe sur une lane hors `QUALIFYING_LANES`, intention preservee. See #16906. See #16928. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * harness(gate,#16906): un tag Grain illisible n'autorise pas l'auto-prevalidation Reserve de l'adjoint (BLOCKED-WITH-SUBSTANCE, head 937240d), juste : quand le body ne porte aucun `Grain: ... lane ...` lisible, `carrier is None` et aucune erreur n'etait ajoutee. Une lane qualifiante portant une PR sans tag pouvait donc deposer son propre dossier et passer un controle qui n'avait jamais tourne. `carrier is None` devient un refus explicite. Un controle qui ne PEUT pas se faire n'est pas un controle qui passe. Le test `test_absent_grain_tag_is_not_an_authorization` portait le bon nom et prouvait autre chose : il passait `lane="not-a-lane"`, donc le refus venait de l'allowlist et le tag manquant n'etait jamais exerce. Il passe desormais une lane QUALIFIANTE, et asserte en plus que l'allowlist n'est PAS le motif -- sinon il se remettrait silencieusement a certifier le mauvais scenario. La fixture `_base_snapshot` recoit une lane porteuse distincte de celle du dossier : sans tag, tous les cas nominaux etaient des auto-attestations. Rayon d'impact mesure le 2026-09-20 : 4 PRs ouvertes sur 221 (1,8 %) ne portent pas de tag lisible, et la sortie est d'ajouter le tag, pas d'affaiblir le gate. 44 tests passent. See #16906. See #16928. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: jsboige <jsboige@gmail.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
[ADJOINT PREFLIGHT] |
Grain: MED/tooling — lane myia-po-2024:CoursIA — prev: DEEP/lean #16714
Summary
Câble
serre100_leandans la CI Lean : nouveau callerlean-serre.yml(templatelean-hecke.yml, décision DRY option 2 d'ai-01). L'acceptance « lake build SUCCESS » du grain 6 (EPIC #16334) n'avait aucune preuve possible : aucun callerlean-build.ymlne nomme serre (cas B.3-(a) de pr-review-discipline — le job n'est pas câblé sur le lake). Le run CI de CETTE PR devient la première preuvelake build SUCCESSdu lake, et l'acceptance devient vérifiable en continu au lieu d'un one-shot local.Détails mesurés
0: mesuré à l'instrument canonique (python scripts/lean/count_code_sorry.py --json→serre100_lean : distinct_code_sorry=0, 5 fichiers), pasgrep -c.db584cd6), lakefile déjà conforme au pattern racine+_en(globs.submodules Serre100, Serre100, Serre100_en— Lean i18n #4980 : les modules root <Lib>_en.lean aggregators ne sont pas batis par lake build (orphan glob coverage) #6585/i18n(lean): harmoniser les fichiers .lean en francais + traduction anglaise — inventaire, convention, PR pilote #4980) : le sibling EN est bâti par le default target.allow-axioms ""/fail-on-sorry true/target-modules "*"(FR-only, byte-parité pour l'EN, feat(lean,#10986): migrate sensitivity_lean to v4.32.0 — Phase 2 Mathlib pilot (3 API adaptations) #10997) — le lake est intégralement prouvé.Math/Serre100/serre100_lean) : la migration feat(serre100,#16334): exécution de la décision de structure — migration Math/Serre100 → SymbolicAI/Lean/Serre100 #16734 (→SymbolicAI/Lean/Serre100) est OPEN au moment du câblage — son merge devra mettre à jour les paths (2 lignes), noté dans le workflow.Validation
Lean CI (serre100_lean)de cette PR même (build Mathlib ~40-90 min selon cache runner).See #16334 — consolidation de la zone (EMBALLEMENT 8 neufs / 1 consolidation).
🤖 Generated with Claude Code