Repository navigation
fix(claims,#14905): ne pas flaguer les coordonnees (2,2)->2.2 en decimal (check_markdown_claims_output) - #14929
Conversation
Le detecteur anti-fabrication normalisait la prose de coordonnees de grille
"(2,2)" en "2.2", puis cherchait ce "2.2" dans la sortie 3x3 ou il n'existe
jamais -- d'ou un faux positif de fabrication sur DecPyMC-7 md[67] ("un but
en (2,2) et un obstacle en (1,1)"). On ajoute un filtre de famille D : un
chiffre UNIQUE de part et d'autre d'une virgule, entre parentheses, est un
tuple positionnel, pas un decimal francais. "(0,75)" (deux chiffres apres la
virgule) reste un vrai decimal eligible. 3 tests de controle positif/negatif
ajoutes (grille -> CLEAN, "(0,75)" -> FABRICATION, c.290 toujours attrape).
Co-Authored-By: Claude-Code <noreply@anthropic.com>
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] — Review deep avec reproduction firsthand (head 7ec7b89e).
Reproduction (venv uv Python 3.12, fichiers fetchés au head) :
TestCoordinateTupleFilter: 3/3 pass — cas fondateur grille 3x3(2,2)/(1,1)-> CLEAN ; contrôle négatif(0,75)(2 chiffres = vrai décimal) -> FABRICATION_DETECTED comme exigé ; contrôle positif~1,2 M/0,09 %-> toujours détecté.- Module complet : 109/109 pass — 0 régression.
- Scan du notebook fondateur
DecPyMC-7-Sequential.ipynb(fetché au head) : 0 finding de coordonnées — md[67](2,2)/(1,1)absents du rapport. Les 10 findings restants = exactement les classes hyperparametre (gamma=0.9), spec ([0.2..0.8]), « Bras 1=0.3 » que le body reporte explicitement a un grain separe -> claim du body exact.
Issue-first #14905 : méthode match. Le critère d'acceptance documente (single-digit de part et d'autre de la virgule, entre parentheses ; (0,75) reste eligible) est implémenté tel quel avec le test d'acceptance correspondant. Scope discipliné : une seule des 4 classes de l'issue, les 3 autres explicitement reportees.
Garde : _is_coordinate_tuple exige BOTH token \d,\d exact ET parentheses englobantes (fenêtre ±1 char) — pas de sur-suppression possible par le regex seul. prev_guard #14885 MERGED ✓. CI verte au head. Security scan : 0 match.
Verdict : APPROVE.
Grain: MED/tooling -- lane myia-po-2026:CoursIA -- prev: MED/notebook-python #14885
See #14905
Resume
Le detecteur anti-fabrication
check_markdown_claims_output.pynormalise la prose de coordonnees de grille "(2,2)" en "2.2", puis cherche ce "2.2" dans la sortie d'une grille 3x3 ou il n'existe jamais — d'ou un faux positif de fabrication surDecPyMC-7-Sequential.ipynbmd[67] ("un but en (2,2) et un obstacle en (1,1)").Correctif : nouveau filtre de famille D
_is_coordinate_tuple, applique danscheck_notebookapres les filtres c.415. Le critere est celui de l'acceptation #14905 : un chiffre UNIQUE de part et d'autre d'une virgule entre parentheses est un tuple positionnel, pas un decimal francais. Le match est supprime uniquement sitoken == "<digit>,<digit>"ET qu'il est entoure d'une paire de parentheses immediate.Non-regression : "(0,75)" (deux chiffres apres la virgule) reste un vrai decimal eligibile — une fabrication impliquant "(0,75)" est toujours detectee. La pathologie c.290 ("~1,2 M" / "0,09 %") reste attrapee.
Preuves de validation
TestCoordinateTupleFilter) :pytest scripts/tests/test_check_markdown_claims_output.py-> 109 passed (0 regression).check_notebook(DecPyMC-7-Sequential.ipynb)-> 0 finding de coordonnees (les findings resultants sont les hyperparametres \gamma=0.9 / spec `0.8+0.2V1`, classes hors de ce grain).Perimetre et residuel
Ce PR resout uniquement la classe "coordonnees" de l'issue #14905. Les 3 autres classes de faux positifs (hyperparametre \gamma=0.9, spec `0.8+0.2V1`, "Bras 1=0.3") sont des regles, pas des fixes de parse : elles relevent d'une decision de politique de detection (supprimer un claim legitime de spec / hyperparametre), distincte d'une correction de normalisation. Elles restent ouvertes dans #14905 (
See), traitees dans un grain separe.Note de distinction de grain (G-VAR-3, §3)
Le genre
toolingdiffere du precedent de la lane (notebook-python, #14885). Le present grain est un correctif d'outil de garde (script de validation + tests), distinct du rendu LaTeX (#14885) et de la correction de logique SL-3 (#14928, encore ouverte). Aucun notebook de cours n'est modifie ; le catalogue n'est pas touche.