Repository navigation
fix(#17066): DecPyMC-10 — retitrage des 7 lectures uniformes en titres sujet-spécifiques - #17140
Conversation
…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>
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[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
- 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### Interpretationnon 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. - 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 ; 33iduniques ; seules 7 lignes JSON diffèrent (les 7 premières lignes). « Markdown-only, outputs etexecution_countintacts » : tenu. - Classe de duplication. Titres markdown — base :
[["",8],["Interprétation",6]]→ head :[["",8]]. Les 6### Interprétationstricts 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. - 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.
- Plan-loss #14532. Les 7 nouveaux titres gardent le niveau
###et le tokenInterprétation(7/7) : la garde de section ne peut pas les lire comme des pertes. - C.1 re-testé :
NotImplementedError0,assert False0. - 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_cellsa une surface mesurable ici : 8 des 21 cellules markdown (38 %) ouvrent sur une ligne***.cell_titles'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 enxfail(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)
|
[ADJOINT PREFLIGHT] Bloc VERDICT (cycle 27, secrétaire myia-po-2026:CoursIA-3) Verdict : |
|
[ADJOINT PREFLIGHT] |
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_countintactes.Mesure de l'organe (#17066)
origin/main)check_duplicate_sectionsporteursdup_reading « interpretation » x7)rc=0,md_cells 21 → 21,headings 21 → 21,candidates=7 substance_found=7,lost_section=0findings=0(15 093 → 15 537 chars normalisés)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 depo-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 tokenInterprétation(garde plan-loss #14532 — 7/7 classésSUBSTANCE_FOUND_TOKEN_MATCH).… de la forme du risque à chargement égal (concentration contre espérance)… de la dispersion relative de la charge annuelle (deux portefeuilles, deux régimes)… de la courbe ψ(u, T) : horizon de plan et asymétrie du capital requis… de la diversification (hasard individuel amorti, erreur collective sur λ non)… de l'inégalité de Lundberg : tenue, informativité, hypothèses… du prix de l'ignorance : le posterior de ruine et son quantile 95… de la réassurance proportionnelle (neutralité, capital libéré, frontière rendement/ruine)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.textetexecute_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
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
execution_count) des 12 cellules code identique àorigin/main. Diff limité aux cellules 3, 6, 11, 16, 20, 24, 29 (toutesmarkdown, vérifié), aucune ligneoutputs/execution_count/cell_type/id/metadata(grep = 0).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 pristinegit show origin/main:<chemin>, mesure après sur l'arbre de travail.rc=0,md_cells 21/21 stable,headings 21 → 21,candidates=7,substance_found=7,lost_section=0— les 7 candidats classésSUBSTANCE_FOUND_TOKEN_MATCH, y compris la cellule 24 dont le token de base était la variante non accentuéeInterpretation.findings=0, base résolue (md_cells base=21— pas d'exemption silencieuse par casse de chemin : chemin pris degit ls-files).grep -nE "raise NotImplementedError|assert False"→ 0.nbformat.validateOK, 33 cellules.🤖 Generated with Claude Code