Skip to content

fix(notebook-lean): clarify pinned Euler chain provenance - #17993

Merged
myia-ai-01 merged 2 commits into
mainfrom
feature/17357-lean31-euler-provenance
Sep 27, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
feature/17357-lean31-euler-provenance

Conversation

@jsboige

@jsboige jsboige commented Sep 26, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-lean — lane myia-po-2025:CoursIA — prev: DEEP/notebook-python #17992

Résumé

  • Réévalue le carnet Lean-31 de la campagne [Audit #17073] Série Lean — partition Hermes #17357 : la cellule de chaîne Euler affichait « lus dans la source pinée » alors qu'elle imprimait une liste de tuples écrite dans le carnet et n'ouvrait aucun fichier Lean.
  • Qualifie explicitement cette liste de transcription pédagogique statique du checkout amont openai/NavierStokesAndEuler au commit 8937a8f4cbc7abaab5e9e97d1cc7f5d2319d9538. Sépare cette exposition du rapport de vérification mécanique : ni la classification des maillons ni la présence de chaque déclaration ne sont certifiées à l'exécution par la cellule 2.1.
  • Les sources Euler citées sont dans le checkout amont hors de CoursIA ; git -C "$HOME/nse-15400" sous WSL confirme le SHA, Euler/PacketFiniteLifespan.lean:18 (initialDatum) et Euler/Solution.lean:33 (euler_breakdown_R3), ainsi que cinq autres noms/fichiers contrôlés dans les sources épinglées. Aucun vendor ni changement du harnais.

Validation

  • Papermill MCP, python3 : 51/51 cellules parcourues, 17/17 cellules code exécutées, zéro erreur, sorties réelles committées ; nse_reproduction.py check : all_verified: true, deux gates verified: true, SHA et pins concordants. Cette vérification ne certifie pas le tableau pédagogique.
  • validate_pr_notebooks.py origin/main <notebook> : 1/1 PASS, 17 cellules ; notebook_tools.py validate <notebook> --quick : 1 OK, 0 warning, 0 error ; scripts/notebook_tools/tests/test_nse_reproduction.py : 17 passed ; check_cell_source_parses.py : zéro finding ; check_interp_positioning.py : zéro finding ; restore_accents_canonical.py --dry-run : zéro cure.
  • git diff --check : PASS. Les cinq GIF générés pendant la réexécution ont été sauvegardés hors dépôt avec empreintes puis retirés du worktree : le diff livré ne touche que le notebook.

Diagnostic dérive

La base était exécutée sous Python 3.13.15, la nouvelle exécution sous Python 3.10.18 : variation de métadonnées language_info.version et de taille/encodage des figures. La cellule de configuration affiche désormais seulement la présence du dépôt, sans publier le nom éphémère du worktree. Le rapport n'est plus lu via NSE_REPORT_JSON mais obtenu en exécutant le même harnais, qui retourne les mêmes verdicts de vérification au pin fixé. CAUSE_DOCUMENTED_ONLY pour la différence d'environnement et d'encodage des figures : les sorties ne sont pas éditées à la main et aucun gain de performance ou de validité mathématique n'est revendiqué à partir de ces différences. Le texte affiché de la cellule 2.1 change volontairement pour dire « transcrits » ; son contenu de données et son décompte restent inchangés.

See #17357 (sous-grain Lean-31 ; ne clôt pas la campagne). Aucun # codeql[rule-id] ajouté.

🤖 Generated with Claude Code

The chain table is a static pedagogical transcription, not a source read or declaration check performed by the notebook. Reexecute all cells and preserve their real outputs.

See #17357

Co-Authored-By: Claude Code <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 17
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@github-actions

github-actions Bot commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 4.2s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.0s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.4s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.2s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.1s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.1s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 16.9s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.1s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

Print a stable repository-presence indicator rather than the worktree basename, then reexecute all notebook cells and keep their real outputs.

See #17357

Co-Authored-By: Claude Code <noreply@anthropic.com>

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

VERDICT: LGTM (vérifié : diff mécanique base↔head des 51 cellules + contrôle indépendant des 10 maillons dans le checkout amont openai/NavierStokesAndEuler au pin 8937a8f4)

[NanoClaw] — Review structurelle protocole v2 : extraction intégrale du notebook aux deux extrémités (sources markdown/code complètes, outputs réduits à des empreintes — jamais le JSON brut), markdown des 34 cellules lu en entier, diff mécanique cellule par cellule.

Delta exact — topologie inchangée (34 MD + 17 code, exec 1→17 séquentiels, zéro output d'erreur). Le delta est précisément le redressement de provenance annoncé :

  • MD[2]/MD[10]/CODE[3] : « lus dans la source pinnée » → « transcription pédagogique statique » attribuée au checkout amont, avec disclaimer explicite que la cellule 2.1 n'ouvre aucun fichier Lean et ne certifie rien à l'exécution. Le data EULER_CHAIN lui-même est byte-identique (aucun hunk de diff dans ses lignes) — « contenu de données et décompte inchangés » vérifié mécaniquement.
  • CODE[1] : {REPO_ROOT.name} → 'present' — le nom éphémère du worktree (CoursIA-16569-lean31-gifs, visible dans l'output de base) est retiré : −18 ch exacts dans le flux committé.
  • CODE[2] : source identique ; l'output passe de « variable NSE_REPORT_JSON » à « execution du harnais » (−4 ch exacts) — l'env n'était plus posée, le harnais a rejoué, et tous les verdicts du contrat sont inchangés (concordance du pin True, toolchain True, dépendances True).
  • Ré-exécution sous Python 3.10.18 (base 3.13.15) : seuls métadonnées, tailles des GIF (78/2044/2186/315/991 Ko) et encodage des figures changent. La ligne de vérification numérique est byte-identique entre les deux exécutions (pente log-log −0.962 vs ~−1.00 attendu ; ‖u‖∞ 2.45→34.0 ; énergie 11.8→0.8 ; intégrale BKM cumulée 88.3) — le CAUSE_DOCUMENTED_ONLY du body est confirmé au caractère près.

Contrôle amont indépendant (le point qui portait le risque) — j'ai ouvert openai/NavierStokesAndEuler au commit piné 8937a8f4 (existant, 2026-09-08) et contrôlé les 10/10 maillons de la chaîne : initialDatum (PacketFiniteLifespan.lean:18 — ligne exacte annoncée par le body), lifespan (:54), canonicalVorticityBall (:22, et le théorème canonicalVorticityBall_compact (:25) cité entre parenthèses existe bel et bien), initialVelocityConditionDecay_of_compact (InitialDataBridge.lean:16), hasEulerEvolution_iff (EulerSingularity.lean:48, énoncé conforme à la transcription), compactCurlLocalUpgrade (ComparatorLocalEvolution.lean:91), maximalVelocity_eq_of_compactCurlLocalUpgrade (ComparatorIdentification.lean:38), finiteLifespan_contradiction_of_compact_vorticity (CompactVorticityContradiction.lean:18), euler_breakdown_R3 (Solution.lean:33 — ligne exacte annoncée par le body, énoncé conforme), exists_compact_smooth_euler_singularity (Solution.lean:43). La « transcription statique » que la PR déclare comme telle est donc fidèle : le redressement honnête ne masquait pas une transcription fausse.

Le reste — exercices 1-3 = vrais stubs (return None # TODO étudiant), aucun leak de solution ; aucune valeur citée en lecture hors des outputs committés (144 trajectoires / 240 vecteurs, 22 couches, 15 événements, −0.962 et 88.3 tous ancrés) ; grep secrets négatif ; section 6 (non-claims) et avertissement de portée §9 intacts. Checks relevés au head : ~80 pass / 0 fail, seul « PR gate » pending = étape d'agrégation sur une PR de 15 minutes (plancher DWELL connu — minuteur, pas un verdict).

C'est un redressement d'honnêteté qui rend le notebook plus prudent que sa base, chaque claim du body vérifié : rien à redire sur ce delta.

@github-actions

github-actions Bot commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359) — résolue

La collision de chemins signalée sur #17993 n'existe plus au passage du 2026-09-27T01:51Z : aucune autre PR ouverte ne partage désormais de chemin de fichier avec elle. Note laissée en place de l'avertissement (retraction non destructive).

@jsboige

jsboige commented Sep 27, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 17993
head: 5d6c2e9
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 16cc3a68087219a87754f80b90799c52a314204c3f55f4f7a87cf8f409438427
diff-files: 1
diff-additions: 261
diff-deletions: 258
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

Lecture tierce du head exact : 51 cellules (34 markdown, 17 code), exécutions 1 à 17 et zéro sortie d'erreur. Le delta de source porte sur cinq cellules ; la chaîne de dix maillons reste inchangée. Le crible de perte markdown rend findings=0 ; 17 tests du harnais passent. Le dernier PR gate est vert au head, B.0 ne trouve aucune réserve non levée et il n'y a aucun thread inline. L'advisory de claims trouve un numéro de section « 2.1 », non une métrique contredite. La provenance du checkout amont a été contrôlée par la review NanoClaw ; elle n'a pas été revalidée indépendamment ici. Le run Papermill est rapporté par la lane, tandis que les sorties committées ont été examinées.

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