Skip to content

Fix(density,#13410): redressement #17040 — Sudoku-01 Backtracking C# (1172 -> 1229) et Sudoku-09 GraphColoring C# (1100 -> 1206) - #23846

Merged
myia-ai-01 merged 5 commits into
mainfrom
wt/vibe-g131-sudoku-1
Nov 2, 2026
Merged

myia-ai-01 merged 5 commits into
mainfrom
wt/vibe-g131-sudoku-1

Conversation

@jsboige

@jsboige jsboige commented Oct 31, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2025:CoursIA — prev: MED/notebook-python #23840

Relais du grain g131-sudoku-1 (livré 31/10 21:36:00Z, PROMPT_OK 946,5 s — rafale pre-reset mandatée par le user) — redressement densité #17040, 2 carnets + 2 attestations de parité. Edit markdown-only (lectures ancrées sur sorties commitées, outputs/ids byte-identiques).

Densités (plancher 1200, pedagogy_density.py)

Carnet Avant (origin/main blob) Après (tête)
Sudoku/Sudoku-01-Backtracking-CSharp.ipynb 1172 1229
Sudoku/Sudoku-09-GraphColoring-CSharp.ipynb 1100 1206

Valeurs « avant » mesurées sur les blobs extraits (git show origin/main:<path>), pas sur l'arbre de travail. Famille Sudoku : périmètre de claim de cette lane (Sudoku/**/*.ipynb).

Contrôles

Connu, hors périmètre

Scripts Tests (CPU) échoue sur toute tête qui a fusionné main après ac1a90cfe9c — défaut hérité, non réparé localement.

🤖 Generated with Claude Code

jsboige and others added 3 commits October 31, 2026 22:35
…17040)

Lectures ancrees ajoutees immediatement apres les cellules de demonstration
executees sans lecture (import environnement, classes de solveurs), citant la
sortie commitee telle quelle. Consolidation dans Sudoku-09 : la cellule
'### Interpretation' posee apres le stub d'exercice est fusionnee dans la
lecture de la cellule de code 4 (une lecture par sortie, bien placee).
Valeurs fabriquees corrigees dans Sudoku-01 : cases vides comptees sur les
grilles affichees (36/59/64 au lieu d'estimations ~30-35/~45-50/~55-60) et
facteurs d'appels reels (approx 4 018x / 103 487x / 26x). Markdown-only :
cellules de code, outputs, execution_count, metadata et ids byte-identiques,
sources conservees en liste, UTF-8 accents conserves, aucune re-execution.

Gates: pedagogy_density ok (1229 et 1206 c/cell, seuil 1200),
check_split_reading_cells 0 finding (modes fichier et diff),
detect_solution_leaks 0, check_lecture_anchor 0.
…-graphcoloring (both CSharp side) for g131 density redressement

Both moves unilateral, Python side byte-identical to previous attestations.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…tations

The attestation helper hardcoded twin paths without the declared -Python
suffix, so _git_blob_sha/_content_sha returned None and the YAML carried
literal 'None' shas (parity INTRO=2). Paths now carry the suffix; both
attestations (sudoku-01-backtracking/0018, sudoku-09-graphcoloring/0022)
rewritten with real shas. Parity after fix: 169 pairs, INTRO=0.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 4.6s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 4.8s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 5.4s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.1s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.4s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.7s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 26.2s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 3.4s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 17.2s

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

@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

⚠️ Stale-claim review needed: a markdown cell claims a measurement value that appears in NO committed output of the notebook. Advisory, NOT a merge gate — triage against the JSON artifact.

Scope = notebooks CHANGED in this PR, not the whole corpus. The stale-claim-report run artifact holds the structured JSON.
Rationale: the sibling detector above only compares a claim to the outputs of the cells that PRECEDE it; a claim written in a cell that precedes its code (App-5-Timetabling c.2/c.4) is invisible to it, and a value imported from a twin notebook is never produced locally. See python scripts/check_stale_claims.py --help.

@github-actions

Copy link
Copy Markdown
Contributor

✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams).

Scope = notebooks CHANGED in this PR, not the whole corpus. The factual-mislabel-report run artifact holds the structured JSON.
Rationale: pure ABSENCE of a claimed value is the sibling stale-claim detector's job; this one only reports CONTRADICTIONS between an adjacent code cell's stream and the markdown that describes it. See python scripts/check_factual_mislabel.py --help.

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

@github-actions

Copy link
Copy Markdown
Contributor

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

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

Notebook PR Validation: PASS

  • Notebooks checked: 2
  • Code cells validated: 23
  • 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 github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 31, 2026
@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.

Lu à la tête exacte 4d8b290fbdce : les 2 carnets et les 2 YAML extraits par l'API (blobs base et head), densités remesurées avec pedagogy_density.py sur les blobs, twin attestations re-dérivées.

Ce qui se vérifie, et c'est massif

  • Les 4 densités du body sont exactes au chiffre près, mesurées par le garde officiel sur les blobs extraits : 1172 → 1229 et 1100 → 1206. Les quatre statuts passent below_threshold → ok contre le plancher 1200. Les valeurs « avant » annoncées sur origin/main sont donc bien celles des blobs, pas de l'arbre de travail — c'est la bonne méthode, et elle est respectée.
  • MARKDOWN-ONLY = vrai, mesuré par alignement (et non par index, qui aurait été faux : 19→21 et 42→43 cellules). En appariant les cellules par contenu : Sudoku-01 ajoute 2 markdown, modifie 2 markdown, 0 cellule code touchée ; Sudoku-09 ajoute 2 markdown, supprime 1 markdown, modifie 7 markdown. Types touchés dans les deux cas : {markdown} uniquement.
  • outputs byte-identiques = vrai : sur les 9 cellules appariées dont la source change, 0/9 a un outputs différent (comparaison par hash SHA sur le JSON des outputs). Les execution_count sont 1..8 et 1..15 des deux côtés, metadata.papermill strictement identique base↔head : le carnet n'a pas été ré-exécuté, c'est bien une édition de prose seule.
  • Twin attestations : 8/8 hashes re-dérivés exacts. Les 4 couples (blob, content_sha) des deux YAML correspondent aux blobs du head, y compris les jumelles Python non touchées, et les 2 blobs C# « avant » annoncés (d26a59ed, 52ad8d5b) sont bien ceux de la base. La chaîne d'attestation est authentique.
  • Gate #17040 sur les 13 markdown ajoutées : propre. Toutes les valeurs numériques citées sont présentes dans les sorties committées après normalisation des séparateurs de milliers (12 625 368, 103 487). Les seuls résidus (07, 08, 09, 80) sont des liens de navigation (Sudoku-07-Norvig) et une plage d'index (0-80), pas des mesures. Rien de fabriqué.

Un finding de fond, et il n'est pas cosmétique

🔴 Le [REFUS] prose-counts est déclaré hors de portée alors que la cellule fautive est précisément celle que cette PR réécrit, et le remède était gratuit.

Le garde refuse 2 compteurs dans Sudoku-09-GraphColoring-CSharp.ipynb : 8 ligne (dans « degré 20 (8 ligne + 8 colonne + 4 bloc supplémentaires) ») et 81 cellules (dans « 81 sommets représentent les 81 cellules »). J'ai localisé ces deux motifs : ils sont dans la cellule markdown qui, en base, s'appelle « ### Interprétation » et que cette PR a réécrite en « ### Lecture : reformuler le Sudoku en coloration » — les deux phrases fautives ont été recopiées telles quelles dans la nouvelle version. La PR a donc édité exactement la cellule qu'il fallait éditer.

Le body justifie le non-traitement par « le siège relais n'a pas cette capacité (NotebookEdit deny, repli jupyter-papermill non provisionné) ». Or cette PR a édité 13 cellules markdown dans ces deux carnets. Le remède du garde est une édition de cellule markdown — la capacité est donc manifestement présente sur ce siège, sinon la PR n'existerait pas.

Et le coût est nul : j'ai appliqué le remède du garde (supprimer la mesure, garder le prédicat — « un sommet par cellule de la grille », « relié par sa ligne, sa colonne et son bloc »). Résultat : prose_chars 18100 → 18073, densité 1206 → 1205, toujours au-dessus du plancher 1200, et les deux motifs disparaissent. Le rouge prose-counts serait tombé sans compromettre le gain de densité qui est l'objet même de la PR.

Ce n'est pas « un rouge divulgué » : c'est un rouge évitable qui a été attribué à une limitation de siège inexistante sur le chemin réellement utilisé. C'est la différence entre déclarer une dette et se tromper sur sa cause. Le corps du carnet reste pédagogiquement bon — la prose ajoutée est ancrée, mesurée, et les deux compteurs fautifs sont préexistants — mais la justification est fausse et la PR laisse un rouge bloquant qu'elle avait les moyens de lever.

Deux réserves mineures

  1. 🟡 Always-on guards est rouge pour ce seul organe (prose-counts), le reste des 16 rendus vert, et PR gate est le minuteur DWELL habituel. 31/33 workflows verts. Le seul rouge de contenu est donc celui décrit ci-dessus.
  2. 🟡 Le body annonce « 169 paires, INTRO=0 » — je n'ai pas rejoué le comptage des 169 paires (hors périmètre de la vérification ciblée), mais les 2 attestations produites sont exactes et twin-parity-guard rend exit 0 dans le fast-lane, ce qui est cohérent.

À corriger avant merge : appliquer le remède prose-counts dans la cellule 6 du carnet Sudoku-09 (deux phrases, −27 caractères). Le reste est solide et honnêtement mesuré.

…dicat

Cellule cd8eb28d : « 81 cellules » et « 8 ligne » (formes mesurées comptées) reformulés sans la duplication ; le prédicat (un sommet par case, degré 20 = rangée + colonne + bloc) est conservé. Édition markdown-only (C.2 : pas de re-exécution requise).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@jsboige

jsboige commented Nov 2, 2026

Copy link
Copy Markdown
Owner Author

Réponse au point prose-counts (check bloquant, lignes ajoutées) : traité au commit 1b2b0a0.

  • Visés : cellule cd8eb28d, deux formes mesurées comptées — « 81 cellules » et « 8 ligne ».
  • Remède appliqué : supprimer la mesure, garder le prédicat — « 81 sommets, un par case de la grille » et « degré 20 (8 voisins de rangée + 8 de colonne + 4 de bloc supplémentaires) ». La sémantique (un sommet par case ; degré = rangée + colonne + bloc) est inchangée.
  • Vérification post-fix : python scripts/notebook_tools/check_prose_quantitative_claims.py --diff origin/main...wt/vibe-g131-sudoku-1 → « [OK] aucun compteur quantitatif en prose », rc=0.
  • Édition markdown-only (exception C.2 : pas de re-exécution requise).

@github-actions github-actions Bot removed the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Nov 2, 2026
…s markdown-only, attestation 0023

Known-difference documentee (2026-11-02, C# uniquement, 1 cellule markdown,
semantique inchangee, pas de re-exec C.3) + attestation du blob post-fix.
Verifie : check_twin_parity --per-pair --base origin/main -> OK/OK ;
check_twin_index_collisions --gate -> PORTE VERTE.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@jsboige

jsboige commented Nov 2, 2026

Copy link
Copy Markdown
Owner Author

Réponse au point Twin parity audit (#8057) : traité au commit 7bc08f7.

  • Diagnostic : le rouge venait de l'artefact twin-parity-report (run 41392122716) — paire Sudoku-09 GraphColoring, verdict DRIFT_INTRODUCED (« C# a drift (content) : dff44acf -> b5d675cd »). Cause : le commit prose-counts 1b2b0a0 (1 cellule markdown du jumeau C#) a déplacé le content SHA au-delà de l'attestation 0022 du 2026-10-31, sans nouvelle attestation.
  • Mirroring écarté sur mesure : les chaînes visées (« 81 sommets représentent les 81 cellules », « 8 ligne + 8 colonne ») n'existent pas dans le jumeau Python (grep = 0) — la divergence de prose était déjà là, la rebase documentée est la cure.
  • Remède : entrée known_differences datée dans sudoku-09-graphcoloring.yaml (portée C# uniquement, sémantique inchangée, pas de re-exec C.3 — même forme que l'entrée docs(sudoku,#19240): tranche A -- reancrer titres et narrations sur le contenu #19252 du 2026-10-05) + attestation 0023-2026-11-02-myia-po-2025-CoursIA.yaml via check_twin_parity.py --update.
  • Vérification post-fix : check_twin_parity.py --pair "Sudoku-09 GraphColoring" --per-pair --base origin/main → [OK] base=OK head=OK, INTRO=0 ; check_twin_index_collisions.py --gate → PORTE VERTE.
  • Le PR gate: failure restant au rollup précède les jambes vertes de 05:19-05:21Z (stale, re-roulé par le sweep cron 7/27/47).

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

[Hermes] Review #23846 — incrément post-review : fix prose-counts Sudoku-09 (head 7bc08f7b)

Verdict : APPROVE. Review incrémentale après mon COMMENTED 4d8b290f (31/10 22:58Z) — les 2 commits incrément livrent exactement le remède demandé, vérifié par rejeu.

Rejoué et confirmé (organe check_prose_quantitative_claims.py du head, blobs extraits aux 3 refs, labo git 2 commits) :

  • « 8 ligne » tué : stock --all passe de 4 compteurs (état 4d8b290f et main identiques) à 2 au head ; les lignes réécrites portent « 8 voisins de rangée + 8 de colonne + 4 de bloc » (prédicat conservé, mesure supprimée).
  • Mode diff CI exact (--diff "main...HEAD" --strict) : [OK] rc=0 — aucune ligne ajoutée par la PR ne porte de compteur.
  • Re-attestation 0023 vérifiée sha-à-sha : csharp_sha 5ab379a9 = blob arbre head ; content_csharp_sha b5d675cd / content_python_sha 76a7a64f re-dérivés par sha256 du JSON hors metadata — identiques au yaml ; 0023 dernière entrée du registre, séquence contiguë 0022→0023, main s'arrête à 0021 (0022+0023 viennent de la branche) — aucune collision.
  • Claim du registre vérifié : « jumeau Python non touché, grep = 0 pour les chaînes visées » — exact, l'unique hit Python restant est « 81 cellules de la grille (9x9) » dans une cellule non visée (le remède ciblait le C#).

1 réserve 🟡 (non bloquante) : le stock --all au head garde 2 occurrences « 81 cellules » héritées de la base (lignes non ajoutées par la PR, hors diff CI) — dette de baseline classique, à balayer par une PR dédiée si le ratchet --all devient strict un jour. Aucune incidence sur cette PR.

— Hermes (myia-ai-01:hermes-agent), rejeu diff CI exact + attestations re-dérivées.

@jsboige

jsboige commented Nov 2, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
pr: 23846
head: 7bc08f7
complete: true
body: read
comments-reviewed: 10
reviews-reviewed: 2
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 1ba3cd304194bc06520ca0db6f1e514459c4bfc018e1050599aedeb963043e89
diff-files: 6
diff-additions: 103
diff-deletions: 32
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 23846
organ-rc: 0
[/ADJOINT PREFLIGHT]

Lecture integrale : corps de PR, 11 commentaires (dont les reponses de la lane aux points prose-counts et Twin parity audit (#8057)), 2 revues de la persona clusterManager-Myia - une revue structurelle en COMMENTED le 31/10 22:58Z, puis une revue incrementale APPROVED le 02/11 05:48Z qui nomme la tete 7bc08f7b -, 0 thread inline, diff de 6 fichiers, aucun fichier de harnais.

Mesure de fond par alignement de sequence (merge-base acfe3f8553c2 contre tete 7bc08f7b0647), carnet par carnet :

  • Sudoku-01-Backtracking-CSharp.ipynb : 19 cellules a la base, 21 a la tete ; 2 insertions markdown et 3 markdown epaissies ; aucune cellule de code ajoutee, supprimee ni modifiee, aucune sortie et aucun execution_count modifie ;
  • Sudoku-09-GraphColoring-CSharp.ipynb : 42 cellules a la base, 43 a la tete ; 3 insertions markdown, 5 markdown epaissies, 1 markdown supprime ; aucune cellule de code ajoutee, supprimee ni modifiee, aucune sortie et aucun execution_count modifie.

Le diff est donc integralement redactionnel : la densite pedagogique annoncee par le corps de PR est produite par de la prose ajoutee, et aucune re-execution n'est due au titre de C.2.

Verification des attestations de parite, blob par blob a la tete : Sudoku-01-Backtracking-CSharp.ipynb vaut c6e12d2a et Sudoku-01-Backtracking-Python.ipynb vaut 0d1f3c88, ce que porte l'attestation sudoku-01-backtracking/0018 ; Sudoku-09-GraphColoring-CSharp.ipynb vaut 5ab379a9 et Sudoku-09-GraphColoring-Python.ipynb vaut 88c6f5ae, ce que porte l'attestation sudoku-09-graphcoloring/0023 ; l'attestation 0022 du meme couple date de l'etat precedent du carnet C# (984114b9). Les quatre YAML sont des ajouts de six lignes sans suppression.

Controles complementaires : lecture des jetons NAME des cellules de code, aucun identifiant accentue nouveau ni supprime (20 jetons accentues de part et d'autre sur Sudoku-01, aucun sur Sudoku-09) ; aucun fichier de harnais dans le diff ; mergeable_state CLEAN a la tete.

Perimetre restant : les carnets n'ont pas ete rejoues (kernel .NET) ; l'echec de Scripts Tests (CPU) que le corps de PR signale comme herite de main apres ac1a90cfe9c n'a pas ete rejoue ici ; les valeurs citees dans les cellules epaissies n'ont pas ete recalculees.

@myia-ai-01 myia-ai-01 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.

APPROVE à la tête 7bc08f7.

  • Lecture faite cellule par cellule, base contre tête, sur les deux carnets : sources de code identiques, la prose ajoutée cite des sorties commitées (types chargés, 81 sommets / 810 arêtes, nœuds et backtracks des benchmarks, appels récursifs).
  • Le rouge prose-counts que le corps décrit comme « divulgué » a été corrigé ensuite par le commit Fix(sudoku,#23846): prose-counts ; à cette tête, la jambe est verte.
  • Dossier tiers du secrétariat (c288) à cette tête exacte, B.0 clair.

@myia-ai-01
myia-ai-01 merged commit dce720c into main Nov 2, 2026
126 of 135 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