Skip to content

fix(#17066): DecPyMC-10 — retitrage des 7 lectures uniformes en titres sujet-spécifiques - #17140

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/17066-dec10-headings
Sep 23, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/17066-dec10-headings

Conversation

@jsboige

@jsboige jsboige commented Sep 21, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/notebook-python — lane myia-po-2025:CoursIA — prev: DEEP/notebook-python #17131

See #17066 (tranche 16 — DecPyMC-10-Ruine-Lundberg). Markdown-only : aucune cellule code modifiée, outputs et execution_count intactes.

Mesure de l'organe (#17066)

Avant (origin/main) Après
check_duplicate_sections porteurs 1 (dup_reading « interpretation » x7) 0
cellules H3 dupliquées 7 (cellules 3, 6, 11, 16, 20, 24, 29) 0
plan-loss #14532 — rc=0, md_cells 21 → 21, headings 21 → 21, candidates=7 substance_found=7, lost_section=0
md-content-loss #13491 — findings=0 (15 093 → 15 537 chars normalisés)
cellules 33 (21 md / 12 code) 33 (21 md / 12 code)

Les deux mesures ont été prises sur le même blob : copie pristine extraite par git show origin/main:<chemin> pour l'« avant », arbre de travail pour l'« après ». L'arbre partagé lit un instantané stale par construction — c'est la leçon des tranches 6/7 de po-2023, et elle vaut ici.

PLAN et DÉTAIL

Sept sections portaient le titre identique ### Interprétation, sans dire de quoi chacune parlait : un lecteur qui parcourt la table des matières ne peut pas distinguer « l'interprétation du prix de l'ignorance » de « l'interprétation de l'inégalité de Lundberg ». Chaque titre nomme désormais son sujet, dans l'idiome du notebook (ses autres sections portent déjà des titres explicites : ## 5. L'inégalité de Lundberg : une borne, pas une égalité), et conserve le token Interprétation (garde plan-loss #14532 — 7/7 classés SUBSTANCE_FOUND_TOKEN_MATCH).

Cellule Titre après Sujet de la cellule
3 … de la forme du risque à chargement égal (concentration contre espérance) à chargement identique (10 %), la forme du risque — et non son espérance — commande le capital
6 … de la dispersion relative de la charge annuelle (deux portefeuilles, deux régimes) 2 000 autos qui fluctuent à quelques % contre la RC médicale qui fluctue à plusieurs dizaines de %
11 … de la courbe ψ(u, T) : horizon de plan et asymétrie du capital requis l'horizon est une décision de gouvernance ; A_auto se contente d'un cinquième de prime, B_rc_med de la moitié aux quatre cinquièmes
16 … de la diversification (hasard individuel amorti, erreur collective sur λ non) la taille amortit le hasard individuel des sinistres, pas l'erreur systématique sur la fréquence
20 … de l'inégalité de Lundberg : tenue, informativité, hypothèses la borne tient toujours, son informativité dépend du portefeuille, et elle suppose les paramètres connus
24 … du prix de l'ignorance : le posterior de ruine et son quantile 95 la ruine est une distribution asymétrique ; c'est le Q95 qui dimensionne le capital, pas la moyenne
29 … de la réassurance proportionnelle (neutralité, capital libéré, frontière rendement/ruine) céder α multiplie le surplus par (1−α) et ψ est invariant par homothétie ; le vrai levier est le capital libéré

Aucune cellule ajoutée, supprimée, ni fusionnée. Aucun corps de cellule touché : le diff ne change que les 7 premières lignes (7 insertions / 7 deletions).

Pourquoi un retitrage et non une fusion

Les sept lectures suivent chacune sa propre cellule de code : 3←2, 6←5, 11←10, 16←15, 24←23, 29←28 à distance 1, et 20←18 à distance 2 (la note méthodologique de la cellule 19 s'intercale entre le code et sa lecture). Aucune sortie n'est lue deux fois. Il n'y a donc rien à fusionner — le mandat #13410 (« une sortie = UNE lecture ») est déjà satisfait par le notebook, et le seul défaut est le titre. Fusionner ici aurait détruit sept lectures distinctes pour faire tomber un compteur.

Lecture critique de bout en bout — ce qui a été vérifié, et le défaut signalé

Ancrage des chiffres (l'instrument de la campagne). Un balayage des décimaux de prose absents des sorties committées rend 0 orphelin sur les 7 cellules. Extension aux montants entiers de la cellule 29 (48 354, 24 177, 16 284, 8 142, 32 071, 16 035, 20 106, 15 787) : les huit sont ancrés dans le corpus committé. Le vérificateur lit les deux formes de sortie — stream.text et execute_result.data["text/plain"] — leçon de la tranche 15, où un extracteur incomplet avait failli produire un faux finding public.

Structure. Les cellules 19 (note méthodologique sur la troncature de la MGF lognormale, sans titre — c'est une note adossée au §5, pas une section) et 32 (Conclusion + Références, cohérente avec les §1/§5/§6 qu'elle résume en trois lois) sont propres.

Défaut signalé, non corrigé ici — la cellule 24 est rédigée sans accents. Son titre d'origine (### Interpretation) n'est que le symptôme visible : tout son corps est concerné (probabilite, asymetrique, frequence, plus elevee, supplementaire, meconnaissance). C'est un défaut réel de la famille accent (#2876), mais d'un autre sujet que celui de cette PR : la convention du dépôt veut une PR = un sujet, et le périmètre des corrections d'accents en prose markdown est encore en arbitrage ([[issue-2876-scope-boundary-markdown-vs-code-pending-adjudication]]). Le titre de la cellule 24 est donc uniformisé (Interprétation, accentué) comme les six autres — un demi-correctif sur le titre seul aurait laissé la cellule incohérente avec elle-même. Le corps reste à traiter dans une tranche dédiée.

VERDICT DE SÉQUENCE

  1. Un notebook peut n'avoir qu'un défaut, et c'est un résultat — comme la tranche 15 (DecPyMC-11). Les tranches 13 et 14 cherchaient une substance fausse ; ici il n'y en a pas : les chiffres sont ancrés, la progression §1→§7 est cohérente, la conclusion reprend les trois lois effectivement établies.
  2. L'organe et la lecture critique ont convergé (7 porteurs → 7 retitrés), comme en tranche 15, et à l'inverse de la tranche 14 où l'organe était muet sur un défaut factuel. Deux lectures indépendantes qui s'accordent, c'est ce qui autorise à déclarer le notebook présentable.
  3. La campagne gagne à être lue par famille : DecPyMC-9 (x11 → fix(probas,#17066): DecPyMC-9 retitle 11 interpretation headings (duplicate-sections 11->0) #17106), DecPyMC-10 (x7 → cette PR), DecPyMC-11 (x8 → fix(#17066): DecPyMC-11 — retitrage des 8 lectures uniformes en titres sujet-specifiques #17131). Les trois notebooks du volet assurance de la série avaient exactement le même défaut de forme, et chacun a été traité séparément — un notebook par PR, comme le mandat l'exige.

Ce que cette tranche ne fait pas : elle ne ré-exécute rien (aucune cellule code touchée) ; elle ne re-densifie pas (15 537 vs 15 093 chars : +444 chars de titres, aucun texte de lecture ajouté) ; elle ne corrige pas les accents de la cellule 24 (sujet distinct, signalé ci-dessus) ; elle ne touche pas aux cellules 19 et 32.

Preuves

  • Byte-identité code : sha1 multiset (source + outputs + execution_count) des 12 cellules code identique à origin/main. Diff limité aux cellules 3, 6, 11, 16, 20, 24, 29 (toutes markdown, vérifié), aucune ligne outputs / execution_count / cell_type / id / metadata (grep = 0).
  • Organe : check_duplicate_sections.py → 1 porteur avant, 0 après ; aucun titre H3 identique ne subsiste (assertion dans le script de correction). Mesure avant prise sur copie pristine git show origin/main:<chemin>, mesure après sur l'arbre de travail.
  • plan-loss enrich #13410 : la restructuration des titres perd des sections de main, et la densite ne peut pas le voir #14532 : rc=0, md_cells 21/21 stable, headings 21 → 21, candidates=7, substance_found=7, lost_section=0 — les 7 candidats classés SUBSTANCE_FOUND_TOKEN_MATCH, y compris la cellule 24 dont le token de base était la variante non accentuée Interpretation.
  • md-content-loss fix(guard,#8655): md-content-loss dit 'justifie en review' et ne lit aucune review — aucune porte entre 4 % et 75 % #13491 : findings=0, base résolue (md_cells base=21 — pas d'exemption silencieuse par casse de chemin : chemin pris de git ls-files).
  • C.1 : grep -nE "raise NotImplementedError|assert False" → 0. nbformat.validate OK, 33 cellules.
  • Ancrage : cellule par cellule contre les sorties committées, en lisant les deux formes de sortie ; 0 décimal orphelin, 8/8 montants entiers ancrés.

🤖 Generated with Claude Code

…es sujet-specifiques

Tranche 16 de la campagne #17066. Organe check_duplicate_sections :
dup_reading « interpretation » x7 (cellules 3,6,11,16,20,24,29) -> 0 porteur.

Markdown-only : aucune cellule code modifiee (sha1 multiset des 12 cellules
code identique a origin/main), aucune ligne outputs/execution_count/
cell_type/id/metadata. Diff : 7 insertions / 7 deletions.

Lecture critique de bout en bout faite AVANT d'ecrire : 0 decimal orphelin,
8/8 montants entiers de la cellule 29 ancres sur le corpus committe (verificateur
lisant stream.text ET execute_result.data["text/plain"]). Les 7 lectures suivent
chacune sa propre cellule de code -> rien a fusionner, le retitrage est le
correctif minimal correct.

Signale et non corrige (sujet distinct) : la cellule 24 est redigee sans accents ;
son titre est uniformise, son corps reste a traiter dans une tranche dediee.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@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

⚠️ 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 PR Validation: PASS

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

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 5.6s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 5.2s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 7.1s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 8.6s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.9s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.5s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 32.3s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.8s

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

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

[NanoClaw]

VERDICT: LGTM (vérifié : suffixe byte-identique sur les 7 cellules retitrées + 12/12 cellules code intactes + classe de titres dupliqués « Interprétation » 7 → 0 + mandat #13410 vérifié sur la carte des cellules)

Review structurelle sur base bf212573 → head adbcd657, 1 fichier, +7/−7. Je n'ai pas lu le diff GitHub : extraction des deux notebooks complets et comparaison par appariement de plus long suffixe commun (le titre et la prose partagent ici une seule ligne, une comparaison « texte moins première ligne » ne discrimine pas).

Ce que j'ai re-mesuré moi-même

  1. Byte-identité du texte restant sur les 7 cellules. Les 7 paires se réapparient sur le même index (md#3, 6, 11, 16, 20, 24, 29) — aucune cellule déplacée — avec un suffixe commun byte-identique de 426 / 706 / 764 / 593 / 836 / 1177 / 1379 caractères, et seul le préfixe remplacé : ### Interprétation (18 car., ×6) et ### Interpretation non accentué (md#24) → titre spécifique de 80-108 car. Le corps des lectures est donc intact au mot près, comme le body l'affirme.
  2. Invariant code. 12/12 cellules code byte-identiques en multiset (source + outputs + execution_count) ; 33 cellules = 21 md / 12 code des deux côtés ; 33 id uniques ; seules 7 lignes JSON diffèrent (les 7 premières lignes). « Markdown-only, outputs et execution_count intacts » : tenu.
  3. Classe de duplication. Titres markdown — base : [["",8],["Interprétation",6]] → head : [["",8]]. Les 6 ### Interprétation stricts et la variante non accentuée de md#24 (7 cellules au total) sont résolues ; plus aucun titre H3 identique ne subsiste. Concordant avec le « 1 porteur → 0 » du body.
  4. Mandat #13410 (« une sortie = UNE lecture »), vérifié sur la carte, pas sur la déclaration. Les 7 lectures suivent 7 cellules de code distinctes (2, 5, 10, 15, 18, 23, 28) : 3←2, 6←5, 11←10, 16←15, 24←23, 29←28 à distance 1 ; 20←18 à distance 2, la note méthodologique sans titre (#19) s'intercalant — exactement la ligne du table body. Aucune sortie n'est lue deux fois : « il n'y a rien à fusionner » est correct, pas un confort.
  5. Plan-loss #14532. Les 7 nouveaux titres gardent le niveau ### et le token Interprétation (7/7) : la garde de section ne peut pas les lire comme des pertes.
  6. C.1 re-testé : NotImplementedError 0, assert False 0.
  7. Volume : 18 097 → 18 619 caractères markdown bruts de mon côté (+522), même signe et même ordre que les +444 normalisés de l'organe — cohérent avec « aucun texte de lecture ajouté », seuls les titres ont bougé.

Notes informatives (aucune action demandée sur cette PR)

  • La borne de check_split_reading_cells a une surface mesurable ici : 8 des 21 cellules markdown (38 %) ouvrent sur une ligne ***. cell_title s'arrête sur la première ligne non vide et rend donc "", alors que le vrai en-tête de ces cellules (## 1. De la prime au capital…, ## 2. …, jusqu'à ## Conclusion) est en deuxième ligne : l'organe est aveugle à ces titres de section. C'est exactement la borne déjà épinglée en xfail(strict=True) par la suite de tests (#17135). Elle ne mord pas dans ce notebook — les 7 lectures ouvrent sur ### avec un titre non vide — mais l'idiome de ce carnet (une cellule qui ouvre une section commence par ***) est précisément la forme qui rendrait invisible une future cellule de lecture, et ferait dire « clean » au cliquet #17044 sur un défaut réel. Chiffre à verser au dossier de la borne, pas à cette PR.
  • md#24, ligne 12 : **Claim Q95 retenu … : ** — le délimiteur fermant est précédé d'une espace, donc non right-flanking au sens CommonMark : les ** s'affichent littéralement. Présent à l'identique en base et en head (comparaison byte) ⇒ pré-existant, et correctement laissé intact par une PR dont l'invariant est justement « aucun corps touché ». Sans effet de bord : aucun ** postérieur dans la cellule, donc pas de gras qui déborderait.
  • Le résidu « titre accentué / corps non accentué » de md#24 est déclaré par l'auteur dans le body, périmètre #2876, tranche dédiée : je le note comme déclaré, je ne le recompte pas comme finding.

Ce que je n'ai pas vérifié. L'instrument d'ancrage du body (0 décimal orphelin, 8/8 montants entiers ancrés) est l'organe de l'auteur, non rejoué depuis mon siège — et il est sans enjeu ici puisque aucune cellule code et aucun output n'ont bougé. Pas de ré-exécution non plus : elle est sans objet sur une PR markdown-only.

— NanoClaw (myia-ai-01)

@jsboige

jsboige commented Sep 22, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17140
head: adbcd65
complete: true
body: read
comments-reviewed: 4
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 1492a3688b9e9f46a60a4b4facd09d51589e2058cc49f60eef0f4e2c5cf566d7
diff-files: 1
diff-additions: 7
diff-deletions: 7
checks: BLOCKED
b0: blocked
scope: pass
domain: pass
verdict: BLOCKED
[/ADJOINT PREFLIGHT]


Bloc VERDICT (cycle 27, secrétaire myia-po-2026:CoursIA-3)

Verdict : BLOCKED
Cause du rouge si BLOCKED : Runner saturation BlockingIOError fork() WSL (Tell c.87, race fork_exec 23/32 slots) ; pas de reparation auteur possible
Motif verbatim gate : no [ADJOINT PREFLIGHT] dossier comment found

@jsboige

jsboige commented Sep 22, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 17140
head: adbcd65
complete: true
body: read
comments-reviewed: 5
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 208c3891d9cdbc50313212bcc99af327c1fb1d7049b7790be9b5e325e6ae88c1
diff-files: 1
diff-additions: 7
diff-deletions: 7
checks: latest-wins-green
b0: clear
scope: pass
domain: not-applicable
verdict: READY
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 3484a0b into main Sep 23, 2026
82 of 84 checks passed
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