Skip to content

fix(sudoku,#17239): Sudoku-14-BDD-Python — 3 findings Hermes (docstring MDD fantôme, énoncé BDD-vs-MDD inexecutable, numérotation) - #17349

Merged
myia-ai-01 merged 2 commits into
mainfrom
fix/sudoku14-bdd-audit-17239
Sep 23, 2026
Merged

myia-ai-01 merged 2 commits into
mainfrom
fix/sudoku14-bdd-audit-17239

Conversation

@jsboige

@jsboige jsboige commented Sep 22, 2026 •

Copy link
Copy Markdown
Owner

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 32 cb09a8ca, docstring de solve_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 de RowMDDBuilder/mdd hors 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 36 66f2f0c7) : 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, 24 1ef7589c, 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

Preuve Résultat
Papermill end-to-end (--execution-timeout 600) SUCCESS RC=0 — 14 cellules code, 0 erreur, ec 1–14
Diff cell 32 docstring (code), cells 5/24/36 md (numérotation + énoncé), md 23 (1,4 ms)
Stub cell 37 byte-identique (déjà cohérent avec le nouvel énoncé)
detect_markdown_rendering.py 0 violation
check_split_reading_cells.py clean
restore_accents_canonical.py --check head 1 cure = base 1 cure (stable)
enrich_quality_ci.py (base blob main) RC=0
H.3 check_null_exec.py Passed (post-scrub)

Verdict 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

  • Cause classifiée : (a) env/kernel. Les sorties de cette PR proviennent d'une
    re-exécution locale sous Python 3.11.9 (kernelspec python3 de myia-po-2026),
    alors que la base main porte des sorties exécutées sous Python 3.13.7 — même
    kernelspec python3, seul language_info.version diffère. Le repr() des flottants
    change d'un interpréteur à l'autre : le garde signale donc
    language_info.version: '3.13.7' -> '3.11.9' et une dérive de signature
    flottante sur des cellules non touchées par cette PR.
  • Verdict : REFRAME. Aucune édition manuelle de sortie, aucun alignement markdown :
    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.
  • Action : exemption C.4 (acceptance Sendov : alias « Lean-18 (A*) » en cellule code — sa re-exécution exige d'abord les échappements invalides des cellules 19/23 #15650, point 4 — l'écart résiduel est
    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.

…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>
@github-actions

Copy link
Copy Markdown
Contributor

Notebook outputs-required (H.4 schema): PASS (every code cell carries an outputs: list)

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

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_n dé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

@github-actions

github-actions Bot commented Sep 22, 2026 •

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 4.5s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 6.5s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 6.5s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 6.0s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.5s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.3s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 29.0s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.2s

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

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

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

⚠️ 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

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2026:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-23) :

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

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

jsboige commented Sep 23, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 17349
head: b4defcc
complete: true
body: read
comments-reviewed: 6
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: add0122eaa8cdc0c6ad0ddfacf562cf56ec43dffe48806f0738e1903ea3c8216
diff-files: 2
diff-additions: 252
diff-deletions: 195
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 88401f0 into main Sep 23, 2026
90 of 92 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