Skip to content

Fix(accents,#16638): tranche Sudoku (seconde moitie) -- restauration canonique des accents (markdown seul) - #20783

Open
jsboige wants to merge 6 commits into
mainfrom
claude/16638-p5-accents-sudoku-b
Open

jsboige wants to merge 6 commits into
mainfrom
claude/16638-p5-accents-sudoku-b

Conversation

@jsboige

@jsboige jsboige commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

See #16638
Hors flotte (exemption #17713).

Summary

Changes

Carnet par carnet, corrections apres tri. Indices de cellules = index nbformat (base 0), cellules markdown uniquement.

Carnet Corrections conservees Cellules touchees Paires appliquees (nombre)
Sudoku-12-Z3-Python → #20940 10 2, 13, 18, 29, 32 Regle->Règle (2), cles->clés (2), meme->même (2), memes->mêmes, modeles->modèles, probleme->problème, theories->théories (cellule 2)
Sudoku-12b-Z3-Linq2Z3-CSharp 0 (intact) - -
Sudoku-13-SymbolicAutomata-Python 8 27, 29 chaines->chaînes, deterministe->déterministe, l'equivalent->l'équivalent, meme->même (2), precisement->précisément, role->rôle, theorie->théorie
Sudoku-14-BDD-Python 1 15 meme->même
Sudoku-15-Infer-Python 24 0, 3, 6, 7, 9, 13, 14, 18, 22, 29, 48 Equivalent->Équivalent (5), Metrique->Métrique (2), cles->clés (5), deterministe->déterministe, execution->exécution, iterations->itérations, l'equivalent->l'équivalent (4), meme->même (2), probleme->problème, selection->sélection (2)
Sudoku-17-LLM-Python 49 6, 9, 15, 18, 23, 26, 34, 39 Apres->Après, Cles->Clés, Resultat->Résultat, Resultats->Résultats, cles->clés (6), controle->contrôle (2), definie->définie, definir->définir, deterministe->déterministe, difference->différence, egalement->également, etape->étape (3), execution->exécution (2), l'execution->l'exécution, lui-meme->lui-même, meme->même (2), modele->modèle (14), numerique->numérique, probleme->problème, resultat->résultat (2), strategie->stratégie (2), systematique->systématique (2), tache->tâche
Sudoku-18-Comparison-CSharp 35 1, 4, 5, 7, 10, 15, 18, 21, 31, 38, 47, 53, 55, 65 Metrique->Métrique (5), Reseau->Réseau, aleatoire->aléatoire, aleatoires->aléatoires, cles->clés, deja->déjà (3), differents->différents, mecanisme->mécanisme, meme->même (4), memes->mêmes (2), metaheuristique->métaheuristique, pseudo-aleatoire->pseudo-aléatoire, regle->règle (10), systeme->système, tache->tâche, tres->très
Sudoku-18-Comparison-Python 30 4, 7, 10, 15, 18, 21, 38, 53, 55, 65 Execution->Exécution, Metrique->Métrique (5), Reseau->Réseau, cles->clés, deja->déjà (3), deterministes->déterministes, differents->différents, mecanisme->mécanisme, meme->même (3), metaheuristique->métaheuristique, recursive->récursive, regle->règle (8), systeme->système, theorique->théorique, tres->très
Sudoku-18b-Statistical-Comparison-Python 0 (intact) - -
Total 157 51 paires distinctes

Les accents de « Règle » / « règle » (20 corrections, Sudoku-12-Z3-Python et Sudoku-18-Comparison) portent sur la mention « règle #9434 » : voir Points a signaler.

Mise en forme JSON. L'outil reecrit le fichier entier : il retirait 36 lignes vides presentes dans le JSON de Sudoku-17-LLM-Python et ajoutait un saut de ligne final a Sudoku-12-Z3-Python et Sudoku-15-Infer-Python. Ces effets ont ete annules : chaque carnet est reconstruit depuis sa version de base, en ne remplacant que les lignes accentuees (cf. Validation, point 6).

Verdicts

# Constat Verdict Preuve
1 157 corrections de la table canonique (51 paires distinctes) CONFIRMED relecture de chaque paire dans son contexte. Exemple : Sudoku-17, cellule 39, ligne 2464 : « ### Points Cles » -> « ### Points Clés »
2 Theories dans « Satisfiable Modulo Theories » (Sudoku-12, cellule 0) FALSE POSITIVE (revert) nom anglais de SMT, ligne 33 : « (Satisfiable Modulo Theories). »
3 Theories dans « Satisfiability Modulo Theories » (Sudoku-12, cellule 2) FALSE POSITIVE (revert) nom anglais de SMT, ligne 103
4 sat-modulo-theories (Sudoku-12, cellule 29) FALSE POSITIVE (revert) locution anglaise hyphenee, ligne 1326 : « (maximisation sat-modulo-theories, utilise en verification »
5 different (Sudoku-18-CSharp, cellule 5, ligne 367 : « seuls les idiomes different ») FALSE POSITIVE (revert) verbe au pluriel : « seuls les idiomes diffèrent ». L'outil proposait l'adjectif différent, faux ici. Laisse sans accent, a trancher a la main
6 tache -> tâche (Sudoku-17, cellule 23, ligne 1361 : « une tâche ou les LLM excellent ») CONFIRMED nom « tâche ». Le detecteur exclut la paire tache/tâche de son compte (liste des homographes de detect_markdown_deaccent.py) : c'est l'unique ecart entre le compte detecteur (-157) et les corrections (158)
7 271 candidats « auto » residuels hors table canonique (ex. resolution, difficulte, fiabilite, recursifs, indice, pratique) HORS PERIMETRE la table ne les couvre pas (restore_accents_canonical.py signale « cures incompletes, pas un succes »). Une part sont des mots francais valides sans accent (pratique, route, porte, indice) : a verifier mot a mot
8 158 homographes presents / participes (donne/donné, accepte/accepté, atteste/attesté, suppose/supposé, borne/borné, compte/compté) HORS PERIMETRE exclus par la table (classe volontairement exclue) : le verbe conjugue est souvent juste ; resolution contextuelle requise
9 Autres residuels : Lecon (Sudoku-17 ligne 1368, Sudoku-18 une fois par carnet), tot (Sudoku-18-CSharp x3), cantonnees, arite, etc. HORS PERIMETRE hors table. Lecon clés (Sudoku-17, ligne 1368) reste donc partiellement accentue
10 25 cognats anglais (inference, precision, regime, etc.) non concerne sans accent legitimement (detecteur, classe en-cognat)

Validation

Commandes lancees et sorties (extraits reels).

1. Detecteur avant / apres (python scripts/notebook_tools/detect_markdown_deaccent.py <9 carnets>) :

Carnet Avant (auto/hom/cog/lex) Apres (auto/hom/cog/lex)
Sudoku-12-Z3-Python 48 (41/4/0/3) 38 (34/4/0/0)
Sudoku-12b-Z3-Linq2Z3-CSharp 28 (12/16/0/0) 28 (12/16/0/0)
Sudoku-13-SymbolicAutomata-Python 18 (14/1/0/3) 10 (8/1/0/1)
Sudoku-14-BDD-Python 40 (7/28/5/0) 39 (6/28/5/0)
Sudoku-15-Infer-Python 93 (62/10/17/4) 69 (42/10/17/0)
Sudoku-17-LLM-Python 57 (23/0/0/34) 9 (9/0/0/0)
Sudoku-18-Comparison-CSharp 194 (112/70/0/12) 159 (89/69/0/1)
Sudoku-18-Comparison-Python 96 (83/0/3/10) 66 (63/0/3/0)
Sudoku-18b-Statistical-Comparison-Python 38 (8/30/0/0) 38 (8/30/0/0)
Total 612 456

Écart 612 - 456 = 156 : 157 corrections conservées, moins le tâche (constat 6) que le détecteur ne compte pas.

2. Invariance (python scripts/notebook_tools/check_accent_restoration_invariants.py --base-sha origin/main <carnet> --fail-on-findings), rc = 0 pour les 9 carnets :

TOTAL 0 finding(s) -- MyIA.AI.Notebooks/Sudoku/Sudoku-12-Z3-Python.ipynb
TOTAL 0 finding(s) -- MyIA.AI.Notebooks/Sudoku/Sudoku-12b-Z3-Linq2Z3-CSharp.ipynb
TOTAL 0 finding(s) -- MyIA.AI.Notebooks/Sudoku/Sudoku-13-SymbolicAutomata-Python.ipynb
TOTAL 0 finding(s) -- MyIA.AI.Notebooks/Sudoku/Sudoku-14-BDD-Python.ipynb
TOTAL 0 finding(s) -- MyIA.AI.Notebooks/Sudoku/Sudoku-15-Infer-Python.ipynb
TOTAL 0 finding(s) -- MyIA.AI.Notebooks/Sudoku/Sudoku-17-LLM-Python.ipynb
TOTAL 0 finding(s) -- MyIA.AI.Notebooks/Sudoku/Sudoku-18-Comparison-CSharp.ipynb
TOTAL 0 finding(s) -- MyIA.AI.Notebooks/Sudoku/Sudoku-18-Comparison-Python.ipynb
TOTAL 0 finding(s) -- MyIA.AI.Notebooks/Sudoku/Sudoku-18b-Statistical-Comparison-Python.ipynb

3. Structure nbformat (nbformat.validate(nbformat.read(<nb>, as_version=4))) : nbformat OK pour les 9 carnets.

4. Cellules de code et metadonnees (comparaison a origin/main : source, outputs, execution_count et metadata des cellules code ; metadata du carnet ; types et identifiants de cellules) :

Sudoku-12-Z3-Python: cells 35 code_cells_changed 0 type_changed 0 ids_changed 0 md_cells_source_changed 5 metadata_equal True OK
Sudoku-12b-Z3-Linq2Z3-CSharp: cells 37 code_cells_changed 0 type_changed 0 ids_changed 0 md_cells_source_changed 0 metadata_equal True OK
Sudoku-13-SymbolicAutomata-Python: cells 32 code_cells_changed 0 type_changed 0 ids_changed 0 md_cells_source_changed 2 metadata_equal True OK
Sudoku-14-BDD-Python: cells 39 code_cells_changed 0 type_changed 0 ids_changed 0 md_cells_source_changed 1 metadata_equal True OK
Sudoku-15-Infer-Python: cells 52 code_cells_changed 0 type_changed 0 ids_changed 0 md_cells_source_changed 11 metadata_equal True OK
Sudoku-17-LLM-Python: cells 40 code_cells_changed 0 type_changed 0 ids_changed 0 md_cells_source_changed 8 metadata_equal True OK
Sudoku-18-Comparison-CSharp: cells 67 code_cells_changed 0 type_changed 0 ids_changed 0 md_cells_source_changed 14 metadata_equal True OK
Sudoku-18-Comparison-Python: cells 67 code_cells_changed 0 type_changed 0 ids_changed 0 md_cells_source_changed 10 metadata_equal True OK
Sudoku-18b-Statistical-Comparison-Python: cells 28 code_cells_changed 0 type_changed 0 ids_changed 0 md_cells_source_changed 0 metadata_equal True OK

5. Perimetre du diff (git diff --stat du commit de prose c0c89b95ef) :

 7 files changed, 127 insertions(+), 127 deletions(-)

Depuis le commit edb9f797c1, le diff des carnets comptait 126 lignes de chaque côté ; après la scission, il en compte 117. La PR touche 15 fichiers : les 6 carnets restants de la tranche et leur registre de parité scripts/notebook_tools/twin_pairs.d/ (ré-attestation des jumeaux, voir « Parité des jumeaux »). Aucun *_en.ipynb, aucun fichier de translations/, aucun script modifié.

6. Purete du diff : 127 lignes retirees, 127 ajoutees ; les 127 paires ne different que par les accents (comparaison apres suppression des diacritiques) ; 0 ligne vide ajoutee ou retiree.

7. Controles de prose et de sortie (base origin/main) :

check_activity_leak.py --diff origin/main...HEAD
[OK] aucun passage d'activite dense ajoute (7 carnet(s) modifie(s) analyses, mentions isolees tolerees).     rc=0

check_prose_quantitative_claims.py --diff origin/main...HEAD --strict
[OK] aucun compteur quantitatif en prose.                                                     rc=0

check_papermill_ratchet.py origin/main       -> changed notebooks : 7 | regressions : 0 (rc=0)
check_output_failure_text.py origin/main     -> 7 changed notebooks | 0 regressed (rc=0)
check_output_collapse.py origin/main         -> 7 changed notebooks | 0 flagged (advisory) (rc=0)
check_source_collapse.py origin/main         -> 7 changed notebooks | 0 flagged (advisory) (rc=0)

Ligne à décompte laissée à l'identique de origin/main. La CI lance cette garde en mode --strict, qui refuse toute ligne ajoutée portant un compteur. Sur la tête 913d481f4b, elle refusait la ligne de Sudoku-13 (cellule 27 : « tous distincts) en booleen : chaque chiffre tient sur 2 bits, donc 3 cellules »), que la restauration n'avait touchée que pour l'accent de « booléen ». Une version antérieure de ce body citait la commande sans --strict, qui ne fait qu'avertir. Le texte « 3 cellules » décrit la taille du mini-Sudoku de l'exemple, pas un compte du dépôt, et il était déjà sur origin/main. Le commit edb9f797c1 rend à la ligne son texte exact de origin/main ; la cure booleen reste à faire avec ce décompte. Ce commit déplace le blob de Sudoku-13 : le commit 7e0315aecd ré-atteste la paire sudoku-13-symbolicautomata (voir « Parité des jumeaux »).

8. Avis de prose avant / apres (check_markdown_claims_output.py --json et check_stale_claims.py --json, base = origin/main, meme carnet) : ancrages identiques avant et apres sur les 9 carnets. Signalements pre-existants, inchanges (nombre de signalements) :

Carnet check_markdown_claims_output (verdict, nb) check_stale_claims (nb)
Sudoku-12-Z3-Python FABRICATION_DETECTED, 3 0
Sudoku-12b-Z3-Linq2Z3-CSharp CLEAN, 0 0
Sudoku-13-SymbolicAutomata-Python FABRICATION_DETECTED, 3 0
Sudoku-14-BDD-Python FABRICATION_DETECTED, 1 0
Sudoku-15-Infer-Python FABRICATION_DETECTED, 11 5
Sudoku-17-LLM-Python FABRICATION_DETECTED, 3 6
Sudoku-18-Comparison-CSharp CLEAN, 0 2
Sudoku-18-Comparison-Python CLEAN, 0 1
Sudoku-18b-Statistical-Comparison-Python FABRICATION_DETECTED, 10 0

Aucun des deux outils n'a plante sur ces carnets.

9. Execution : aucune cellule de code modifiee, donc aucune re-execution due (C.2). check_kernel_drift.py non applicable (aucune execution). metadata.papermill inchange (cf. point 4).

10. Jumeaux et traductions (jumeaux : ré-attestés par le commit 913d481f4b, voir « Parité des jumeaux » ; traductions : lecture seule) :

  • scripts/notebook_tools/twin_pairs.d/ : sudoku-12-z3.yaml (Sudoku-12-Z3-Python), sudoku-13-symbolicautomata.yaml, sudoku-14-bdd.yaml, sudoku-15-infer.yaml, sudoku-18-comparison.yaml (Sudoku-18-Comparison-CSharp et -Python). Aucun pour Sudoku-12b, Sudoku-17, Sudoku-18b.
  • translations/ (origin/main) : sudoku/sudoku.csv cite 8 des 9 carnets (tous sauf Sudoku-12b) ; planners/planners.csv et search-part1/search-part1.csv citent Sudoku-12-Z3-Python ; complexity/complexity.csv cite Sudoku-15-Infer-Python ; search-applications/search-applications.csv cite Sudoku-18b-Statistical-Comparison-Python. Ces catalogues ne sont pas modifies ici : le coordinateur doit re-attester les traductions des carnets modifies.

Points a signaler

  • Outil. restore_accents_canonical.py --apply ne preserve pas la mise en forme JSON du carnet (saut de ligne final, lignes vides de la source). Le controle d'invariance ne le voit pas, car il compare le contenu des cellules. Sujet separe : a corriger dans l'outil ou dans le controle.
  • Residus. Les 455 candidats restants (constats 7 a 10) sont hors perimetre de cette tranche. Un sous-grain doit les resoudre mot a mot.
  • Reference de suivi en prose. Sudoku-12-Z3-Python (lignes 528 et 807 de origin/main), Sudoku-18-Comparison-CSharp et Sudoku-18-Comparison-Python portent la mention « règle notebooks(#9377,#8052): porter le mandat « quantitatif tenu par le CI, pas par la prose » a l'interieur des notebooks — la vague #8052 re-epingle des valeurs qui rebougeront #9434 » (suivi des mesures non reproductibles). Elle n'a pas ete touchee : seul son accent est restaure. A traiter comme sujet separe si elle doit disparaitre de la prose enseignante.

Parité des jumeaux

Le commit 913d481f4b ré-atteste les cinq paires jumelles touchées par la tranche : sudoku-12-z3, sudoku-13-symbolicautomata, sudoku-14-bdd, sudoku-15-infer et sudoku-18-comparison, avec une entrée known_differences et une attestation par paire. Sans ce commit, le « Twin parity audit (#8057) » rougirait en DRIFT-INTRO sur ces paires (commentaire du 2026-10-14 sur cette PR).

Le commit 7e0315aecd ré-atteste à nouveau la paire sudoku-13-symbolicautomata après le retour à origin/main de la ligne à décompte (nouvelle attestation 0025, l'entrée known_differences existante décrit déjà le geste). Mesure à la tête 7e0315aecd, sur un checkout complet : python scripts/notebook_tools/check_twin_parity.py --check --per-pair --base <merge-base> rend Total : 157 paire(s) | OK=157 INTRO=0 FIXED=0 PRE=0, et scripts/notebook_tools/tests/test_twin_registry_integrity.py passe (46 tests).

Conflit attendu entre #20780 et #20783 : les deux PRs ré-attestent la paire sudoku-12-z3 (#20780 pour le carnet C#, #20783 pour le carnet Python), modifient la même entrée known_differences de sudoku-12-z3.yaml et créent le même fichier d'attestation sudoku-12-z3/0017-2026-10-14-hors-flotte-claude-session-16638.yaml, chacune avec le blob de son seul côté. La seconde mergée devra être rafraîchie sur main, ses deux entrées fusionnées, et la paire ré-attestée avec ses deux côtés modifiés.

Review Checklist

  • 1. Scope reel : 7 carnets de la tranche, prose markdown seule. Sudoku-12b et Sudoku-18b intacts. Le commit de prose ne touche que ces 7 carnets (validation, point 5) ; les commits 913d481f4b et 7e0315aecd y ajoutent les entrées du registre de parité (« Parité des jumeaux ») ; le commit edb9f797c1 rend une ligne de Sudoku-13 à origin/main.
  • 2. Validation post-fix : invariance rc = 0 sur les 9 carnets, detecteur avant / apres, nbformat OK, controles relances sur le commit final (validation, points 1 a 3).
  • 3. Coherence pedagogique : chaque paire relue dans son contexte ; 4 faux positifs revertes (constats 2 a 5) ; residus listes et non masques (constats 7 a 9).
  • [N/A] 4. Execution reelle : markdown seul. Aucune cellule de code modifiee, donc aucune re-execution due ; sorties et metadata.papermill inchanges (validation, point 4).
  • 5. Regression check : cellules de code identiques (source, outputs, execution_count, metadata), metadata du carnet identique, ancrages des controles de prose identiques avant / apres, controles de sortie a 0 regression (validation, points 4, 7, 8).

Correction après relecture (homographe nom / participe)

La table canonique restaure controle en contrôle (nom). Deux occurrences sont des participes et portent donc l'accent final : Sudoku-17-LLM-Python.ipynb, « Format non contrôlé » (tableau des causes) et « raisonnement contrôlé par le programme ». Le contrôle d'invariance reste à 0 finding sur ce carnet après la correction (seule l'accentuation change).

Hors flotte : session cloud du mainteneur (exemption #17713), pas de lane ni de tag Grain.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA


Generated by Claude Code


Generated by Claude Code

…canonique des accents (markdown seul)

Restauration des accents francais dans la prose markdown de neuf carnets
de la serie Sudoku (Sudoku-12 a Sudoku-18b), avec l'outil canonique
restore_accents_canonical.py --apply, puis relecture mot a mot.

Corrections conservees : 158 (sur 162 proposees par l'outil). Quatre
paires revertees a la main, faux positifs (3 termes anglais
"Satisfiable Modulo Theories" / "Satisfiability Modulo Theories" /
"sat-modulo-theories" dans Sudoku-12, et "idiomes different)" dans
Sudoku-18-Comparison-CSharp, ou le verbe "diffèrent" est requis).

Hors table (non traites, sous-grain a part) : formes que la table
canonique ne contient pas (difficulte, resolution, fiabilite, etc.).

Invariance : check_accent_restoration_invariants.py --base-sha origin/main
donne 0 finding sur chaque carnet. Cellules de code, types, identifiants
et metadonnees inchanges ; diff ne contenant que des lignes
accent-only.

See #16638

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA
…ration des accents (tranche sudoku-b)

La modification de cette PR deplace le blob SHA de carnets enregistres dans
le registre de parite. Pour chaque paire : entree known_differences qui decrit
le geste et le cote touche, puis check_twin_parity.py --update --pair en
derniere operation (cf #8957). Paires : sudoku-12-z3 sudoku-13-symbolicautomata sudoku-14-bdd sudoku-15-infer sudoku-18-comparison

check_twin_parity.py --check --per-pair --base origin/main : OK sur les
157 paires apres re-attestation.

See #16638

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

jsboige commented Oct 14, 2026

Copy link
Copy Markdown
Owner Author

Commit 913d481f4b : ré-attestation des paires jumelles touchées par la restauration des accents (tranche Sudoku, 2e moitié).

Le « Twin parity audit (#8057) » aurait rougi en DRIFT-INTRO sur 5 paire(s) : sudoku-12-z3.yaml, sudoku-13-symbolicautomata.yaml, sudoku-14-bdd.yaml, sudoku-15-infer.yaml, sudoku-18-comparison.yaml. Le carnet bouge sans que son jumeau bouge, et c'est voulu : le contenu de la PR ne change que la prose. Pour chaque paire, une entrée known_differences décrit le geste, puis check_twin_parity.py --update --pair est lancé en dernière opération (#8957).

Vérification locale après le commit : python scripts/notebook_tools/check_twin_parity.py --check --per-pair --base origin/main donne Total : 157 paire(s) | OK=157 INTRO=0.


Generated by Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

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

…igne portant le décompte « 3 cellules »

La garde prose-counts (--strict) refuse toute ligne ajoutée qui porte un
compteur. La ligne en cause ne différait de main que par un accent
(booléen) : elle reprend son texte de main, le décompte n'est plus une
ligne ajoutée.

See #16638

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA
… a main de la ligne a decompte de Sudoku-13 (cellule 27)

La modification de cette PR deplace le blob SHA de carnets enregistres dans
le registre de parite. Pour chaque paire : entree known_differences qui decrit
le geste et le cote touche, puis check_twin_parity.py --update --pair en
derniere operation (cf #8957). Paires :

check_twin_parity.py --check --per-pair --base origin/main : OK sur les
157 paires apres re-attestation.

See #16638

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

jsboige commented Oct 15, 2026

Copy link
Copy Markdown
Owner Author

Correctif préventif : commits edb9f797c1 et 7e0315aecd.

J'ai lancé en local la garde prose-counts en mode --strict (celui de la CI) sur la tête 913d481f4b. Elle refusait la ligne de Sudoku-13 (cellule 27) qui porte « 3 cellules », que la restauration n'avait touchée que pour l'accent de « booléen ». Le body citait la garde sans --strict, comme un avertissement. Les deux commits corrigent cela :

  • edb9f797c1 rend la ligne à son texte exact de origin/main. La garde rend maintenant [OK], et l'invariance d'accents reste à 0 finding.
  • 7e0315aecd ré-atteste la paire sudoku-13-symbolicautomata, dont le blob côté Python a bougé (nouvelle attestation 0025). Sur un checkout complet de cette tête, check_twin_parity.py --check --per-pair --base <merge-base> rend OK=157 INTRO=0, et test_twin_registry_integrity.py passe (46 tests).

Le body est mis à jour en conséquence :

  • décomptes : 157 corrections, 51 paires distinctes et 456 candidats restants ;
  • fichiers : 18, dont 11 dans le registre de parité ;
  • la section de validation cite la commande --strict ;
  • la section « Parité des jumeaux » est complétée.

Le conflit attendu avec #20780 sur sudoku-12-z3 est inchangé, car cette paire n'est pas touchée ici.


Generated by Claude Code

@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 lane pr-review (myia-ai-01:hermes-agent) — head 7e0315ae (FULL READ, re-vérification indépendante sur blobs réels — aucune review antérieure sur ce SHA)

VERDICT: LGTM

Preuves mécaniques (recalculées au head 7e0315ae vs base 1cef8a55) :

  • 7 carnets, 126/126 lignes de paire accent-only : 51 cellules markdown touchées (5/2/1/11/8/14/10 — total 51), toutes markdown→markdown ; sorties, metadata et execution_count byte-identiques (0 cellule de code touchée) ; au niveau mot : 157 paires d'accent, toutes NFD-égales, 157 ajouts / 0 retrait, 0 divergence numérique, 0 cible de lien / URL / span de code modifiée. Le compte « 157 corrections » du body est exact au mot près.
  • Ré-attestations jumelles vérifiées par recalcul : les 10 champs python_sha/csharp_sha des 5 attestations (sudoku-12-z3/0017, sudoku-13/0024+0025, sudoku-14/0017, sudoku-15/0030, sudoku-18/0015) concordent octet à octet avec le git-hash-object recalculé sur les blobs bruts du head (ex. 12-Z3 : python 7e23b0c6, C# 47681df1). L'attestation 0025 est bien celle de l'état après edb9f797c1 — la ligne « 3 cellules » de Sudoku-13 est rendue à origin/main au head (ligne vérifiée littéralement).
  • Conflit #20780 × #20783 confirmé réel, pas déclaratif : les deux PRs créent le même chemin sudoku-12-z3/0017-….yaml avec des revendications divergentes — l'entrée de #20780 porte python_sha=1cc184af (= blob Python base, cohérent « côté C# seul »), celle-ci porte python_sha=7e23b0c6 (= blob Python head). La seconde fusionnée devra re-attester avec les deux côtés déplacés : l'avertissement du body est exact.
  • Scan sécurité : seules occurrences = le nom de variable LOCAL_LLM_API_KEY en prose (aucune valeur). CLEAN.

Réserves (transparence) :

  • CI au moment du verdict : 21 checks queued, 3 cancelled (starvation de la vague) — aucun rouge de contenu, mais aucun vert de garde citable ; la vérification byte-level ci-dessus tient lieu de preuve.
  • nbformat.validate / check_accent_restoration_invariants non rejoués ici (scripts hors siège) : l'équivalence structurelle a été établie par comparaison directe cellule à cellule, plus forte que la garde.
  • Non traité par la tranche (déclaré au body) : la cure booleen de Sudoku-13 laissée avec son décompte, et les résidus hors table — sous-grain à venir.

Pas d'APPROVE : gardes au statut queued/cancelled au head.

…avec son cote C#

La PR depassait le seuil de 15 fichiers (18, pr-review-discipline §A) et
ré-attestait la paire sudoku-12-z3 côté Python seul, pendant que #20780 la
ré-attestait côté C# seul, avec une entrée 0017 concurrente. Le carnet
Sudoku-12-Z3-Python, le YAML parent et l'entrée 0017 sont rendus ici à leur
état de la base de fusion 1cef8a5. Les deux côtés de la paire sont réunis,
sous une attestation unique, dans la branche claude/16638-p5-accents-sudoku-c.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LRbWZZHE9jZscr8ya3niWA

jsboige commented Oct 15, 2026

Copy link
Copy Markdown
Owner Author

Scission pour respecter le seuil de 15 fichiers de pr-review-discipline §A. La PR en modifiait 18.

Contrôles relancés :

La review Hermes du 09:43Z portait sur l'ancienne tête 7e0315aecd, qui couvre les deux PRs.


Generated by Claude Code

@github-actions github-actions Bot added the consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) label Oct 15, 2026
@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.

jsboige commented Oct 15, 2026

Copy link
Copy Markdown
Owner Author

Sur l'avis « Prose/output review » : les signalements sont antérieurs à cette PR. J'ai lancé check_markdown_claims_output.py --json et check_stale_claims.py --json sur les carnets modifiés, à la base 1cef8a5502 puis à la tête ffaf6b1bec. Une fois les accents normalisés, les deux côtés rendent les mêmes signalements, et aucun n'est nouveau : 18 et 18 pour le premier détecteur (Sudoku-13 : 3, Sudoku-14 : 1, Sudoku-15 : 11, Sudoku-17 : 3), 14 et 14 pour le second. Cette PR ne restaure que des accents en markdown ; ces écarts sortent de son périmètre et restent tels quels ici.


Generated by Claude Code

jsboige commented Oct 15, 2026

Copy link
Copy Markdown
Owner Author

Le check Scripts Tests (CPU) est rouge sur la tête ffaf6b1bec, mais le job n'a exécuté aucun test.


Generated by Claude Code

@github-actions

github-actions Bot commented Oct 15, 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.7s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 5.5s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 6.0s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 5.8s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.7s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.8s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 36.3s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 6.0s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 34.7s

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

@github-actions github-actions Bot added the variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol) label Oct 15, 2026

jsboige commented Oct 15, 2026

Copy link
Copy Markdown
Owner Author

Le rouge de « Always-on guards » sur cette PR vient de main : aucun des fichiers en cause n'est touché par la PR.

check-nav-chain signale deux orphan_entry, ANALYSE-10-Reflexion-Thurston-Python.ipynb et ANALYSE-06-Sensibilite-2026-Lean-Python_en.ipynb. J'ai reproduit le même résultat sur origin/main avec python scripts/notebook_tools/check_notebook_nav_chain.py --check. Le correctif est la PR #20704 : elle est approuvée par le coordinateur et aucun de ses checks n'est en échec, mais PR gate et deux autres runs y ont été annulés en file et attendent d'être relancés.

Je ne reporte pas ce correctif ici : il touche deux carnets étrangers à cette PR, dont un _en. Une fois #20704 mergée, je rafraîchirai la branche et la garde repassera au vert.


Generated by Claude Code

@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

Notebook PR Validation: PASS

  • Notebooks checked: 6
  • Code cells validated: 111
  • 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)

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

consecutive-code-cells Modified notebook has >=2 consecutive code cells (#12797) variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants