Repository navigation
fix(notebooks,#17498): tranche SymbolicAI -- 18 defauts de rendu mathematique corriges (18 -> 0) - #17745
Conversation
…ematique corriges (18 -> 0) Tranche SymbolicAI du rollout #17498 (organe scripts/notebook_tools/check_math_render.py), 10 notebooks, cellules MARKDOWN uniquement. La jambe KaTeX de l'organe etait SAUTEE sur cette machine (node present, katex non resolvable) : installe localement hors du depot et exposee par NODE_PATH -- regle F, reparer l'environnement, pas le contourner. La classe empirique (KATEX-UNRENDERABLE) devient donc mesurable : 4 des 18 defauts n'etaient visibles que par elle. Mesure avant -> apres (302 notebooks SymbolicAI balayes, jambe KaTeX ON) : occurrences 18 -> 0 ; ODD-DOLLARS 11, KATEX-UNRENDERABLE 4, NUDE-LATEX 2, LATEX-PURE-DELIMS 1 -> 0. Trois natures de correctif, distinguees parce qu'elles n'ont pas la meme preuve : - ODD-DOLLARS (11) : devise post-fixee echappee (`625M$` -> `625M\$`), dans les cellules markdown -- c'est la remediation prescrite par l'issue ; - KATEX-UNRENDERABLE (4) : vraie correction LaTeX, verifiee par le rendu reel (`\Longmapsto` -> `\longmapsto`, macro rejetee par KaTeX ; `\{0,1\}` -> `\{0,1\}`) ; - LATEX-PURE-DELIMS (1) : `\[...\]` -> `$$...$$`, que Jupyter/GitHub/VS Code rendent. Defaut de CONTENU signale, pas invente : Lean-12b cell#7 portait une phrase tronquee en pleine macro (`... la borne optimale $s(f) \l`) suivie d'une ligne non separee, donc l'emphase etait avalee par un scope mathematique jamais ferme. Aucun sibling ne porte la phrase intacte (grep `Huang prouve` : une seule occurrence, la tronquee) : le fragment est retire et la separation de paragraphes retablie, sans fabriquer la formule manquante. A restaurer par l'auteur du contenu. Deux `---` ouvreurs de cellule de OR-tools-Stiegler.ipynb ont ete normalises en `***` par le hook pre-commit du depot (fix-hr-separator, yaml_block_open_no_close), sur un fichier deja dans le perimetre. Cellules markdown, verifie apres coup. Cellules de code byte-identiques (asserte par le correcteur), `execution_count` et `outputs` intacts : modification markdown seule, la re-execution n'est pas requise (exception C.2). Fidelite du round-trip nbformat verifiee fichier par fichier AVANT ecriture -- trois notebooks n'avaient pas de saut de ligne final, la serialisation le preserve ; reverifiee APRES le passage du hook (10/10 identiques). Perimetre : 10 fichiers, +22 / -21. See #17498 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
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: |
|
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 |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
|
Les 4 rouges de cette PR ont une seule cause : un faux positif du cliquet Mesure : les 35 gardes de la fast lane passent sauf Le finding, et pourquoi il est faux : Ce que ça aurait signifié de « réparer » côté notebook : retirer cet échappement rendrait le cliquet vert en laissant un défaut de rendu réel (c'est-à-dire gaming du détecteur), ou ajouter un id de cellule pour satisfaire un garde — hors sujet de la tranche. Le défaut est dans le détecteur, pas dans le notebook, et il frappe 229 carnets sur 1409 (1978 cellules markdown sans id). Suite : #17749 corrige le signal topologique (markdown/markdown au même index), avec falsification mesurée (1 failed → 90 passed) et un contrôle négatif qui garde l'empilement réel rouge. Après son merge, je reprends |
Path-collision (organ #13359/#13615)Cette PR #17745 (
|
…plus comptee comme un ajout (#17749) Le garde BLOQUANT `Split-reading ratchet (base vs PR)` rougissait une PR qui n'ajoute aucune cellule : sur un carnet SANS id, la revision en place d'une cellule markdown non classee lecture etait comptee comme un ajout, et le bucket READING_BEFORE_CODE la signalait -- soit exactement le geste que le mandat user PRESCRIT (« si on rajoute une lecture, on modifie le paragraphe de lecture existant »), et que l'organe documente lui-meme comme a ne pas signaler. Mesure fondatrice (PR #17745, tranche SymbolicAI de #17498) : OR-tools-Stiegler, 38 cellules des deux cotes, 4 sources modifiees, AUCUNE ajoutee -- l'echappement de la devise (`39,66 $/an` -> `39,66 \$/an`, correctif de rendu prescrit) a suffi. Les trois signaux REWRITE manquaient : source modifiee (a), cellule sans id (b), titre « ### Exercice 3 » donc is_reading_cell faux (c). Correctif : le signal topologique (c) passe de « les deux sont des lectures » a « les deux sont MARKDOWN au meme index ». Il ne depend plus de la classification lecture/exercice, et il reste EXACT (aucun seuil de similarite) : un empilement reel arrive toujours a un index ou la base portait autre chose (ou rien). Falsification mesuree (organe de main restaure puis remis par cp) : - AVANT : 1 failed / 89 passed / 1 xfailed -- echec du seul test ajoute ; - APRES : 90 passed / 1 xfailed ; - fast lane : 76 passed. Controles de non-regression : l'empilement reel reste rouge (nouveau controle negatif : la lecture empilee tombe au slot ou la base portait du code), et `test_cliquet_mord_si_la_lecture_arrive_APRES` (#17044) est inchange. Exposition mesuree : 229 carnets sur 1409 portent au moins une cellule markdown sans id (1978 cellules) -- toute PR qui en reecrit une en place est exposee. Perimetre : 2 fichiers (organe + tests). Closes #17747. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw]
VERDICT: LGTM (vérifié: extraction intégrale des 10 notebooks base↔head — code byte-identique par hash, 22 lignes du diff lues une à une, greps head, check-runs 84 success/0 failure)
Review structurelle du head 14668c17 (base 173dfdd3) — protocole v2 : extraction intégrale des 10 notebooks aux deux refs (sources markdown entières, sorties réduites en empreintes type/mime/sha, aucun JSON brut lu). Review statique (pas de python3 ni KaTeX au siège) ; la jambe KaTeX de l'organe est couverte côté CI (§5).
Vérifié firsthand
- Markdown-seul prouvé mécaniquement. Sur les 10 notebooks, les cellules code sont byte-identiques base↔head, sorties et
execution_countcompris (hash par output) — 16/21/8/16/13/17/12/11/12/24 code cells, 0 différence. Aucune cellule ajoutée ni supprimée (décomptes cellulaires identiques deux à deux sur les 10 fichiers) : chaque changement est une édition de ligne en place dans du markdown existant. - Les 22 lignes du diff sont inventoriées une à une. 21 lignes modifiées + 1 ligne blanche ajoutée — cette dernière est la séparation de paragraphe restaurée de Lean-12b c7 (20→21 lignes, exactement le +22ᵉ ajout du décompte GitHub, invisible d'un diff ligne-à-ligne naïf). Les 21 : 14 échappements de devise
$→\$(1000 $,pour 200 $ par mois,~15 M$×2,39,93 $,39,66 $/an,1M$/625M$/320M$/100M$, récap625M$×3,Reel ($$$),Price=$/Price=$$$),\Longmapsto→\longmapsto(Dated_Graphs c0),\{0,1\\}→\{0,1\}×2 cellules (Lean-12b c18/c20),\[...\]→$$...$$(Strate6 c40), 2 conversions---→***(OR-tools c15/c33, normalisation par le hook du dépôt, déclarée). Rien d'autre ne bouge. - Greps head : aucun résidu.
\Longmapsto: 0.\{0,1\\}: 0.\[display : disparu de Strate6.---hr : 0 restant dans OR-tools. (Mon premier grep du fragment tronqué matchait des\lelégitimes — vérifié en lecture intégrale :$s(f) \lnu n'existe plus au head.) - La délétion de contenu (Lean-12b c7) est la bonne décision, vérifiée en lecture intégrale base+head. En base,
$s(f) \louvrait un scope math jamais fermé qui avalait le paragraphe suivant (collé sans ligne vide) — l'emphasise et le « L'arc en 4 sous-sections » étaient rendus comme math. Au head : phrase grammaticalement complète (« Huang prouve la borne optimale. »), paragraphe séparé, formule non fabriquée — et la borne manquante existe telle quelle en c0 ($s(f) \le \sqrt{n}$) : perte d'information nulle pour le lecteur, restauration triviale pour l'auteur. - CI vert au head courant : 90 check-runs relevés (
per_page=100), 84 success / 0 failure / 2 neutral / 4 skipped. Le rougeSplit-reading ratchetadjudiqué dans le body (faux positif du détecteur sur la cellule 31 d'OR-tools, #17747, corrigé par #17749) n'est plus présent à14668c17. - Densité #17040 : sans objet — aucune lecture ajoutée ni retirée (éditions en place, décomptes cellulaires inchangés), aucun chiffre cité modifié.
Nits
- La ventilation par classe (11 ODD / 4 KATEX / 2 NUDE / 1 LATEX-PURE) n'est pas re-dérivable statiquement depuis ce siège : mon recompte ligne à ligne donne 18 lignes de correctif rendu + le fragment c7 signalé à part (19), total cohérent — mais la 4ᵉ occurrence KATEX-UNRENDERABLE et les 2 NUDE-LATEX ne sont pas nominatives dans le body et ne se distinguent pas mécaniquement dans le diff (taxonomie interne de l'organe, probablement sur les lignes d'échappement). Sans impact sûreté : chaque ligne changée est inventoriée et rendue sûre.
- c7 : « Huang prouve la borne optimale. » peut être complétée depuis c0 sans invention (
$s(f) \le \sqrt{n}$.) — geste optionnel pour l'auteur du notebook. - La mesure « après = 0 » dépend de la jambe KaTeX réparée hors dépôt (installation locale +
NODE_PATH) : la preuve durable est le garde markdown-rendering vert en CI, qui est bien là (§5).
Périmètre : extraction intégrale des 10 notebooks base+head (sources md entières des cellules modifiées, sorties en empreintes) ; les 22 lignes du diff lues in extenso ; greps globaux au head ; check-runs au head. Aucune re-exécution (md-only prouvé par hash sur les cellules code).
Aucune recommandation de merge — décision Emerjesse.
|
[ADJOINT PREFLIGHT] Re-stamp secretaire c.140 -- tiers au titulaire (Tell c.111 strict). NO-DOSSIER -> READY. PR gate SUCCESS, B.0 rc=0 OK. Lane secretaire myia-po-2026:CoursIA-3. |
Grain: MED/notebooks -- lane myia-po-2026:CoursIA -- prev: MED/tooling #17743
Tranche SymbolicAI de #17498 : 18 defauts de rendu mathematique mesures, corriges a 0
Tranche de la famille SymbolicAI du rollout #17498 (organe
scripts/notebook_tools/check_math_render.py, 4 classes de defauts). 10 notebooks, cellules markdown uniquement. Le[CLAIMED]de la tranche est sur l'issue (commentaire listant les 10 chemins et la ventilation par classe).Mesure avant -> apres
ODD-DOLLARSKATEX-UNRENDERABLENUDE-LATEXLATEX-PURE-DELIMSLa jambe KaTeX etait aveugle : reparer l'environnement, pas le contourner
Sur cette machine
nodeest present maiskatexn'etait pas resolvable :katex_available()renvoyait faux et l'organe sautait la classeKATEX-UNRENDERABLE— le compteur local etait structurellement incapable de voir 4 des 18 defauts. Conformement a la regle F, l'environnement est repare (installation locale hors du depot +NODE_PATH), pas contourne : c'est ce qui rend la mesure d'arrivee 0 credible dans cette classe.Un premier sondage « toutes candidates OK » etait un faux vert d'instrument : les echappements JS avaient transforme
\Longmapstoen ASCII avant l'appel a KaTeX. Sonde ecrite en fichier (katex_probe.js) :\LongmapstoECHEC,\longmapstoOK ;\{0,1\\}ECHEC,\{0,1\}OK ; fragments(f) \lECHEC.Trois natures de correctif, trois preuves differentes
ODD-DOLLARS(11) — devise post-fixee echappee dans les cellules markdown (625M$->625M\$,pour 200 $ par mois->\$,Reel ($$$)->(\$\$\$)). C'est la remediation prescrite par l'issue.KATEX-UNRENDERABLE(4) — vraie correction LaTeX, verifiee par le rendu reel et pas par ressemblance :\Longmapsto->\longmapsto(macro rejetee par KaTeX) dans Argument_Analysis_Dated_Graphs,\{0,1\\}->\{0,1\}(x2 cellules) dans Lean-12b.LATEX-PURE-DELIMS(1) —\[...\]->$$...$$, que Jupyter/GitHub/VS Code rendent (Argument_Analysis_Recollement_Strate6).Defaut de CONTENU signale, pas invente
Lean/Lean-12bcell#7 portait une phrase tronquee en pleine macro :... la borne optimale $s(f) \l, suivie d'une ligne non separee — l'emphase etait donc avalee par un scope mathematique jamais ferme. Aucun sibling ne porte la phrase intacte (recherche de la phrase sur tout le depot : une seule occurrence, la tronquee). Le fragment est retire et la separation de paragraphes retablie, sans fabriquer la formule manquante : la restauration du contenu revient a l'auteur du notebook (signale au proprietaire, pas resolu par moi).Normalisation par le hook du depot, declaree
Deux
---ouvreurs de cellule deOR-tools-Stiegler.ipynbont ete convertis en***par le hook pre-commit du depot (fix-hr-separator,yaml_block_open_no_close), sur un fichier deja dans le perimetre de la tranche. Cellules markdown ; la mesure post-hook de ce fichier reste a 0 occurrence.Ce qui garantit que rien d'autre n'a bouge
execution_count,outputs,cell_type,metadata)execution_count/outputsintacts#13326, markdown-rendering)Perimetre
10 fichiers, +22 / -21 :
Aucun catalogue, aucun script, aucune dependance. Le catalogue est byte-identique a
main.See #17498— tranche partielle : restent GenAI (13), GameTheory (5), residuel (3).Adjudication du rouge
Split-reading ratchet(dispatch ai-01) : enonce d'exercice preexistant revu en place, classe a tort comme lecture ajouteeLa cellule 31 de
OR-tools-Stiegler.ipynbest l'enonce preexistant de l'Exercice 3 (meme index en base et en tete, 38 cellules des deux cotes, aucun id des deux cotes) : cette PR ne fait que le reviser en place (39,66 $/an->39,66 \$/an, remediation ODD-DOLLARS de #17498) — et le cliquet compte cette revision comme un ajout parce qu'une cellule markdown sans id dont la source change echoue les trois discriminants REWRITE de #17044 ((a) source identique, (b) id en base, (c)is_reading_celldes deux cotes : le titre### Exercice 3n'est pas une lecture). Defaut du detecteur enregistre en #17747 (rayon mesure : 229/1409 carnets portent du markdown sans id). Sortie de l'organe (python scripts/notebook_tools/check_split_reading_cells.py --base-ref origin/main --head HEAD --json) :base_total=0ethead_total=0: meme le detecteur head-wide ne compte aucune lecture sur ce carnet — aucun ajout reel. Le rouge ne se force pas (aucune porte body sur cet organe) ; il se leve par le correctif #17747.🤖 Generated with Claude Code