Skip to content

fix(notebook,#17357): Lean-16b -- 4 constats d'audit (F1/F3/F4/F5) - #20115

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/17357-lean16b-audit
Oct 10, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/17357-lean16b-audit

Conversation

@jsboige

@jsboige jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-lean -- lane myia-po-2027:CoursIA -- prev: DEEP/lean #20004

Suite de l'audit Hermes c.5844346305 (partition Hermes, campagne #17073) sur
Lean-16b-Conway-Game-of-Life-Lean.ipynb : 6 constats. Chacun a été revérifié
firsthand sur origin/main
avant toute correction (protocole audit-reassessment) —
jamais depuis le texte de l'audit.

Reassessed by myia-po-2027:CoursIA — F1 CONFIRMED · F3 CONFIRMED · F4 CONFIRMED ·
F5 CONFIRMED · F2 déjà levé par #20015 · F6 CONFIRMED mais différé (voir plus bas).

Corrigés — markdown uniquement (cellules 0/11/13)

Aucune cellule de code n'est touchée : la re-exécution C.2 n'est donc pas due, et le
diff ne porte que de la prose.

# Classe Ce que le carnet disait Ce que la sortie commitée mesure
F1 stale-claim cellule 13, table : « Taille (en-tête) | 2 048 x 2 048 » le witness juste en dessous : en-tete : 2058 x 2058
F3 stale-claim cellule 13, table : « Population (initiale) | ~50 000 cellules » cellules vivantes : 64 691 (écart ~29 %)
F4 progression-break cellule 11 : Acte II = « se reproduire » (Gemini), Acte III = « calculer » (CPU) les sections livrent II = CALCUL (acte2-cpu) et III = REPLICATION (acte3-gemini)
F5 navigation-misplaced cellule 0 : [<< Lean-15 Grothendieck] Lean-16a est le prédécesseur immédiat

F1 — la ligne de table portait la valeur du métapixel nu (2 048², celle de LifeWiki)
sous un libellé qui annonce l'en-tête du fichier. Elle porte désormais la valeur
mesurée (2 058 x 2 058) et un libellé qui dit de quel objet elle parle, ce qui la
distingue de la taille propre du métapixel — laquelle reste donnée en puce à 2 048²,
comme dans la prose de la cellule.

F4 — l'ordre corrigé est celui que la table de synthèse synthese-piliers confirme
déjà (« Remettons les trois actes dans l'ordre où on vient de les voir : I OTCA /
II Turing / III Gemini ») et celui qu'annonce le plan du carnet. La puce II gagne au
passage la machine de Turing de Rendell (2000), qui est le premier moteur cité par
le titre de la section acte2-cpu livrée.

F5 — la preuve est dans le carnet voisin : la navigation de Lean-16a se lit
[<< Lean-15 ...] | [Lean-16b Game of Life >>], donc 16a s'insère bien entre 15 et 16b.
Le lien << de 16b sautait une position.

Non corrigé ici, et pourquoi

F2 — déjà levé par #20015, en file de merge. Cette PR-là remplace les trois
occurrences de « OTCA 70 KB » par « ~165 Ko » (cellules 19, 47 et 51). Rien à faire ici,
et le dire évite une seconde correction du même fait.

F6 — réel, encore ouvert, différé. La cellule 50 revendique « Le seul sorry restant
est P5 » alors que son propre compteur affiche 2 — contradiction visible pour
l'apprenant. Mesuré firsthand : les deux lignes comptées sont de la prose dans des
commentaires de bloc
, sorry-free: ... (L6744) et sorry-free even if ... (L6832) de
HashlifeCorrectness.lean, que le motif ^\s*sorry\b employé par la cellule attrape
parce que le tiret crée une frontière de mot. Ces deux lignes sont les seules
correspondances du motif dans le fichier, donc 0 sorry réel.

Elle n'est pas corrigée dans cette PR parce que la cellule 50 est réécrite par
#20015
(ré-exécution + en-tête de commentaire) : la corriger depuis main produirait
un conflit garanti. Elle part dans la PR de suite, après le merge de #20015 — c'est
l'ordre demandé au dispatch, et c'est le seul constat des six qui soit dans ce cas.

Validation

Les quatre corrections portent sur des lignes de source que #20015 ne touche pas
(vérifié : aucune de ces lignes n'apparaît dans son diff) : les deux PR peuvent donc
merger dans n'importe quel ordre sans conflit.

  • check_cell_source_parses.py : 0 finding
  • check_exec_sequence.py : CLEAN (1..N, 0 DIRTY, 0 UNORDERED / NOT_FROM_1 / GAP / DUPLICATE)
  • check_prose_quantitative_claims.py --diff origin/main...HEAD : [OK] aucun compteur quantitatif en prose (bloquant)
  • check_source_collapse.py / check_output_collapse.py : 1 carnet changé, 0 flagged
  • detect_md_content_loss.py --base origin/main : 0 finding (33 → 33 cellules markdown, 45 512 → 45 600 caractères normalisés — croissance, pas de perte)
  • check_output_failure_text.py : 0 regressed
  • check_split_reading_cells.py : clean · check_interp_positioning.py : 0 finding
  • check_duplicate_sections.py : 0 finding · check_latex_control_chars.py : 0 occurrence
  • check_link_label_agreement.py --json : 0 finding sur ce fichier (le nouveau libellé de navigation est accepté)
  • hooks pre-commit : gitleaks, H.3, #13326 (source non compilable), strips — tous Passed

See #17357 (pas Closes : F6 reste ouvert).

🤖 Generated with Claude Code

…/F5)

Revérification des 6 constats de l'audit c.5844346305 (partition Hermes,
campagne #17073) sur `origin/main` avant correction.

Corrigés (markdown uniquement, cellules 0/11/13 - aucune cellule de code
touchée, donc aucune ré-exécution due au titre de C.2) :

- F1 `stale-claim` (cellule 13) : la table annonçait « Taille (en-tête) |
  2 048 x 2 048 » alors que le witness rendu juste en dessous mesure
  `en-tete : 2058 x 2058`. La ligne porte désormais la valeur mesurée et son
  libellé dit de quel objet elle parle (l'en-tête du fichier `.rle`), ce qui
  la distingue de la taille propre du métapixel (2 048²) donnée en puce.
- F3 `stale-claim` (cellule 13) : « Population (initiale) | ~50 000 cellules »
  contre `cellules vivantes : 64 691` dans le witness — écart ~29 %. Valeur
  mesurée reportée.
- F4 `progression-break` (cellule 11) : l'intro annonçait Acte II =
  « se reproduire » (Gemini) et Acte III = « calculer » (CPU), alors que les
  sections livrent II = CALCUL (`acte2-cpu`, machine de Turing de Rendell) et
  III = REPLICATION (`acte3-gemini`). La table de synthèse (`synthese-piliers`)
  confirme l'ordre livré. Les deux puces sont remises dans l'ordre livré.
- F5 `navigation-misplaced` (cellule 0) : le lien `<<` pointait vers
  Lean-15 Grothendieck, sautant Lean-16a. La navigation de Lean-16a elle-même
  (`[<< Lean-15 ...] | [Lean-16b Game of Life >>]`) établit que 16a est bien
  le prédécesseur immédiat de 16b. Lien corrigé.

Non corrigé dans cette PR, et pourquoi :

- F2 `stale-claim` : **déjà levé par #20015** (en file de merge), qui remplace
  les trois occurrences de « OTCA 70 KB » par « ~165 Ko » (cellules 19, 47, 51).
  Rien à faire ici.
- F6 `stale-claim` (cellule 50) : **réel et encore ouvert**. La cellule
  revendique « Le seul sorry restant est P5 » alors que son propre compteur
  affiche 2 ; les deux lignes comptées sont en réalité de la prose dans des
  commentaires de bloc (`sorry-free: ...` L6744 et `sorry-free even if ...`
  L6832 de `HashlifeCorrectness.lean`), faux positifs du motif `^\s*sorry\b`
  que la cellule emploie. Vérifié firsthand : ces deux lignes sont les seules
  correspondances du motif, donc 0 sorry réel. La cellule 50 est **réécrite par
  #20015** (ré-exécution + en-tête de commentaire) : la corriger depuis `main`
  produirait un conflit. Elle sera traitée dans la PR de suite, après le merge
  de #20015 — c'est l'ordre demandé au dispatch.

Reassessment : `Reassessed by myia-po-2027:CoursIA` — F1 CONFIRMED, F3 CONFIRMED,
F4 CONFIRMED, F5 CONFIRMED, F2 déjà levé par #20015, F6 CONFIRMED mais différé
(conflit de cellule avec #20015).

Gates locaux : `check_cell_source_parses` 0 finding · `check_exec_sequence`
CLEAN (1..N, 0 DIRTY) · `check_source_collapse` / `check_output_collapse`
0 flagged · `check_split_reading_cells` clean · `check_interp_positioning`
0 finding · `check_link_label_agreement` --json : 0 finding sur ce fichier.

See #17357 (pas `Closes` : F6 reste ouvert).

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

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #20115 (fix(notebook,#17357): Lean-16b -- 4 constats d'audit (F1/F3/F4/F5)) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@github-actions

github-actions Bot commented Oct 9, 2026

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 github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Oct 9, 2026
@github-actions

github-actions Bot commented Oct 9, 2026

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

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

⚠️ Stale-claim review needed: a markdown cell claims a measurement value that appears in NO committed output of the notebook. Advisory, NOT a merge gate — triage against the JSON artifact.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 14.8s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 8.0s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 9.6s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 9.7s
Search-01-StateSpace.ipynb ✅ SUCCESS 11.3s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 4.8s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 42.0s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 6.5s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 23.4s

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

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 20
  • 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)

@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2024:CoursIA
pr: 20115
head: 562f9ac
complete: true
body: read
comments-reviewed: 8
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: ed0f1e8ae863126aca98c6096d9a6373fbb098907ba2b51bf4514f156f16066b
diff-files: 1
diff-additions: 5
diff-deletions: 5
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20115
organ-rc: 0
[/ADJOINT PREFLIGHT]

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

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants