Repository navigation
fix(sudoku,#17239): Sudoku-14-BDD-Python — 3 findings Hermes (docstring MDD fantôme, énoncé BDD-vs-MDD inexecutable, numérotation) - #17349
Conversation
…ng MDD fantome, enonce BDD-vs-MDD inexecutable, numerotation) - F1 stale-claim: la docstring de solve_sudoku_mdd annoncait « 1. Construit un MDD par ligne » — le corps n'en construit aucun (propagation CP + MRV ; 0 occurrence de RowMDDBuilder hors docstring). Docstring veridique : elimination croisee entre pairs = la SEMANTIQUE du MDD sans sa structure, en coherence avec la note pedagogique 6.3 qui l'admettait deja - F2 exercise-mismatch: l'enonce exigeait « la MEME contrainte » en BDD booléen — encodage one-hot 729 variables construit nulle part. Reecrit executable avec les outils du notebook (exactly_one_of_n Exercice 1 + RowMDDBuilder + count_nodes, APIs verifiees) : contraintes voisines dans leur encodage naturel, le blowup d'encodage comme lecon - F3 numbering: Exercices 1/2/3 numerotes — les « Exercices supplementaires » 4-5 de la conclusion deviennent coherents - md 23 re-ancre sur le runtime re-execute (1,7 -> 1,4 ms), lecon #16590 : la re-exec etait requise (cell 32 code modifiee), donc le litre machine-dep re-cite le nouveau commis - papermill re-exec complet : 14 cellules code, 0 erreur, ec 1-14 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM
[Hermes] po-2026 — close-the-loop #17349 (fix des 3 findings Hermes #17239 Sudoku-14-BDD-Python), head ea330265. Notebook complet extrait au head ; les trois réparations vérifiées sur l'artefact, pas sur le body :
- F1 stale-claim RÉSOLU — docstring de
solve_sudoku_mdd(cb09a8ca) véridique : « propagation de domaines + backtracking MRV », renvoi explicite à la sémantique « N valeurs distinctes » du MDD §4 « sans en construire la structure (cf. note §6.3) » — la contradiction interne docstring/note est levée. - F2 exercise-mismatch RÉSOLU — énoncé (66f2f0c7) exécutable avec les outils du notebook, vérifiés présents :
exactly_one_of_ndéfinie cell 6,RowMDDBuilder§4,count_nodes; la comparaison honnête est nommée « prix de l'encodage », le one-hot 9-var/cellule identifié comme le blowup à mesurer. - F3 numérotation RÉSOLU — Exercices 1/2/3 posés (66fe9ab9, 1ef7589c, 66f2f0c7) ; « Exercices supplémentaires » 4/5 (d7913dec) désormais cohérents, plus de référent introuvable.
Re-exécution réelle exigée par le changement de code (cell 32) : timestamps papermill 2026-09-22 au head, sortie « Résolu en 1.4 ms » fraîche, aucune citation runtime obsolète restante dans les md. Réparation complète, sans re-saccage (aucune suppression de contenu légitime repérée). Concerne close : les 3 findings #17239 sont traités.
[Hermes] po-2026
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
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 |
The Python twin carries the #17239 Hermes fixes (ghost MDD docstring, unexecutable BDD-vs-MDD statement, numbering); the C# twin is untouched, so only the Python SHAs move. Twin-Pair: Sudoku-14 BDD
|
[ADJOINT PREFLIGHT] |
Grain: MED/notebook-python -- lane myia-po-2026:CoursIA -- prev: MED/notebook-python #17345
Sudoku-14-BDD-Python — 3 findings Hermes réparés (#17239, audit po-2026 du 21/09 22:42Z)
F1 —
stale-claim(cell 32cb09a8ca, docstring desolve_sudoku_mdd) : elle annonçait « 1. Construit un MDD par ligne (contrainte 'N valeurs distinctes') » — le corps de la fonction ne construit aucun MDD (0 occurrence deRowMDDBuilder/mddhors docstring, vérifié) : c'est de la propagation de domaines CP (élimination chez les peers ligne/colonne/bloc) + backtracking MRV. La note pédagogique §6.3 l'admettait déjà (« le solveur pragmatique en extrait la sémantique ») : le notebook était contradictoire en interne. Docstring véridique : élimination croisée entre pairs = la sémantique « N valeurs distinctes » du MDD de ligne (§4) sans en construire la structure (renvoi à la note §6.3).F2 —
exercise-mismatch(cell 3666f2f0c7) : l'énoncé exigeait de comparer BDD booléen vs MDD « pour la même contrainte d'unicité » — le côté BDD exige un encodage one-hot (729 variables pour une grille) que ni ce notebook ni ses prérequis ne construisent ; l'apprenant devait inventer précisément ce que l'exercice prétendait illustrer (le blowup). Énoncé réécrit exécutable avec les outils du notebook (APIs vérifiées présentes :exactly_one_of_n= l'Exercice 1,RowMDDBuilder§4,count_nodes×2) : deux contraintes voisines dans leur encodage naturel, et la comparaison honnête nommée pour ce qu'elle est — le prix de l'encodage, pas « la même contrainte ».F3 — numérotation (cells 5
66fe9ab9, 241ef7589c, 36) : trois sections « ## Exercice : » sans numéro, puis « Exercices supplémentaires » reprenant à « Exercice 4 » (cell 38) — le référent 1–3 était introuvable sous ce nom. Numérotation 1/2/3 posée ; les Exercices 4-5 deviennent cohérents.Re-ancrage induit (leçon #16590) : la re-exécution était requise (cell 32 code modifiée) → le runtime machine-dep du solveur change (1,7 → 1,4 ms) → md 23 qui le citait re-ancré sur le nouveau commis. C'est l'application de la règle « si la re-exec est inévitable, ré-ancrer toutes les cellules citant des valeurs de sortie dans la même PR ».
Validation
--execution-timeout 600)detect_markdown_rendering.pycheck_split_reading_cells.pyrestore_accents_canonical.py --checkenrich_quality_ci.py(base blob main)check_null_exec.pyVerdict forensique H.5 : EXEC_PROVED. Volets non couverts : le reste de la partition Sudoku #17239 (04-Python livré #17303 autre lane, 07-Norvig livré #17342 ma lane, audits restants à venir).
See #17239 (contribution partielle : volet Sudoku-14-BDD-Python).
🤖 Generated with Claude Code
Diagnostic dérive
re-exécution locale sous Python 3.11.9 (kernelspec
python3demyia-po-2026),alors que la base
mainporte des sorties exécutées sous Python 3.13.7 — mêmekernelspec
python3, seullanguage_info.versiondiffère. Lerepr()des flottantschange d'un interpréteur à l'autre : le garde signale donc
language_info.version: '3.13.7' -> '3.11.9'et une dérive de signatureflottante sur des cellules non touchées par cette PR.
ce sont les valeurs réelles des re-exécutions (kernel local, 0 erreur). Seul le
rendu texte des flottants diffère, à l'unité près (
repr()), pas la valeur.expliqué). L'interpréteur exact de la base n'est pas installable ici : la série
porte six versions majeures-mineures distinctes en base (3.12.13, 3.13.3,
3.13.7, 3.13.12 x2, 3.13.14), qu'aucune installation locale ne peut satisfaire
simultanément. Le remède de fond (re-exécution sous l'interpréteur d'origine)
suppose la machine qui a produit la base ; il est hors de portée de cette lane.