Skip to content

Fix(accents,#16638): restauration canonique des accents -- Search/Part3-Cas-pratiques (9 paires de jumeaux) - #25049

Open
jsboige wants to merge 2 commits into
mainfrom
fix/16638-deaccent-part3-paires
Open

jsboige wants to merge 2 commits into
mainfrom
fix/16638-deaccent-part3-paires

Conversation

@jsboige

@jsboige jsboige commented Nov 7, 2026

Copy link
Copy Markdown
Owner

Grain: MED/notebook-python — lane myia-po-2027:CoursIA-2 — prev: MED/guard #25032

Ce que fait cette PR

Une tranche de restauration d'accents sur la famille Search/Part3-Cas-pratiques : 882 restaurations sur 14 carnets, cellules markdown uniquement.

Contexte : l'audit visuel du site déployé (EPIC #10921, critère 5) a mesuré que la perte d'accents sur les pages publiques est sélective et vient de la source — le titre et la prose d'un carnet ont perdu leurs accents (« Espaces d'etats », « Pre requis », « Duree estimee ») alors que le corps de la même page en conserve (« probleme »). Le rendu n'est pas en cause : c'est le markdown source des carnets qui est désaccentué.

Fixer, organes, avant / après

Rôle Outil
Fixer canonique scripts/notebook_tools/restore_accents_canonical.py (4 lignes bright : markdown seul / pas les cibles de liens / pas le code / pas les sorties ni execution_count)
Table canonique scripts/notebook_tools/detect_accent_stripping.py — 200 paires -> 201
Organe de la classe scripts/notebook_tools/check_accent_restoration_invariants.py <nb> --base-sha <sha> --fail-on-findings
Preuve de parité jumeaux scripts/notebook_tools/check_twin_parity.py --update (9 paires ré-attestées)
Mesure Valeur
Paires du dictionnaire canonique 200 -> 201 (ajout prerequis -> prérequis)
Cures appliquées 882 (markdown uniquement)
Cellules inspectées 630
Cellules markdown modifiées 182
Cellules de code modifiées 0
Sorties modifiées 0
execution_count modifiés 0
Diffs non accentuels 0 (comparaison fold(base) == fold(head) cellule par cellule, fold = NFD + suppression des marques combinantes)
Tests de la classe 116/116 verts (test_detect_accent_stripping.py + test_restore_accents_canonical.py)
Hooks pre-commit tous verts (dont check-encoding-corruption, cell-source-parses, H.3)
Organe de la classe sur les 14 carnets rc=0 (--base-sha 50d2d022f21f)

La promotion de la table canonique

Le dictionnaire est volontairement conservateur. Une forme n'y entre que si elle remplit les trois critères du fichier lui-même :

  • (a) la graphie désaccentuée n'est pas un mot français valide (pas d'homographe) — prerequis n'existe pas sans accent ;
  • (b) aucun usage en prose anglaise ni dans un carnet jumeau _en — mesure sur MyIA.AI.Notebooks/** : 487 occurrences réparties sur 436 carnets FR, 0 dans un carnet _en ;
  • (c) la forme accentuée est unique (pas d'hésitation participe/présent) — prerequis est invariable.

C'est ce même critère que etat / duree, déjà traités par la table contextuelle (CONTEXTUAL_PAIRS, appliquée seulement sur preuve de contexte français) : prerequis n'a pas cette ambiguïté, il passe donc dans la table canonique inconditionnelle.

Périmètre : pourquoi ces 14 carnets

Les 9 paires de jumeaux retenues sont celles dont aucun des deux fichiers n'est touché par une PR ouverte (mesure firsthand check_lane_claim.py 16638 --paths ... -> CLEAR). Les 12 autres paires de la famille restent occupées (#24992 sweep bannière .NET, #24938, #24778, #24899) et sont hors périmètre — pas de contournement, pas de --force.

Les 9 paires concernées sont ré-attestées dans le second commit (1251b936efbe), après le commit de contenu, comme l'exige la garde de parité (#8957) : le blob de chaque carnet change, l'attestation doit suivre.

Périmètre de la fournée (seuils §A)

24 fichiers, 658 insertions / 592 deletions : au-dessus du seuil changedFiles > 15, mais dans l'exemption « fournée homogène » (décision user 2026-11-03, Q162 a) : une seule classe de correction (restauration d'accent), produite par un fixer déterministe, vérifiée par l'organe de cette classe (rc=0 cité plus haut), plafonnée à une série entière (Search/Part3-Cas-pratiques). Le body nomme le fixer, l'organe et sa sortie avant/après. Les 9 attestations de parité sont des pièces de preuve produites par l'outil, pas une deuxième classe de correction ; la promotion du dictionnaire est le mécanisme même de la classe.

Couplages hors périmètre (mesurés, non bloquants)

Ce qui n'est pas dû

Aucune ré-exécution n'est due (C.2) : le diff ne touche que des cellules markdown — 0 cellule de code, 0 sortie, 0 execution_count modifié.

Résiduel (honnête)

Le fixer signale des formes hors table laissées non curées : complete / completee (mots français valides sans accent, donc hors table par construction) et quelques participes contextuels (explore, respecte, visites). Cette tranche ne prétend pas les traiter.

Captures et verdict de l'audit visuel : dashboard RooSync workspace CoursIA (EPIC #10921, critère 5).

See #16638
Part of #21277

🤖 Generated with Claude Code

…t3-Cas-pratiques (9 paires de jumeaux)

Grain: MED/notebook-python — lane myia-po-2027:CoursIA-2 — prev: MED/guard #25032

Tranche deaccent de la famille Search/Part3-Cas-pratiques : 882 restaurations
canoniques sur 14 carnets, markdown uniquement.

- Fixer canonique : scripts/notebook_tools/restore_accents_canonical.py
  (4 lignes bright : markdown seul / pas les cibles de liens / pas le code /
  pas les sorties ni execution_count).
- Table canonique etendue de 200 a 201 paires : ajout de "prerequis" -> "prérequis" (487 occurrences mesurees sur MyIA.AI.Notebooks/**,
  436 carnets FR, 0 dans un carnet _en ; forme accentuee unique).
- Preuve : 630 cellules inspectees, 182 cellules markdown modifiees,
  0 cellule de code, 0 sortie, 0 execution_count, 0 diff non accentuel
  (comparaison fold(base) == fold(head) cellule par cellule).
- Aucune re-execution due (C.2) : le diff ne touche que des cellules
  markdown.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
…che Search/Part3-Cas-pratiques

Les 14 carnets de la tranche accent sont modifies (blob SHA change) : les
paires concernees doivent etre re-attestees, sinon la garde de parite les
declare DRIFT. Ordre respecte : `--update` passe EN DERNIER, apres le commit
de contenu (regle #8957).

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

github-actions Bot commented Nov 7, 2026

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

github-actions Bot commented Nov 7, 2026

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

github-actions Bot commented Nov 7, 2026

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

github-actions Bot commented Nov 7, 2026

Copy link
Copy Markdown
Contributor

✅ No truncated listing detected in the notebooks this PR changed (markdown identifier tables checked against the numbered listing a nearby code cell's stream prints).

Scope = notebooks CHANGED in this PR, not the whole corpus. The listing-coherence-report run artifact holds the structured JSON.
Rationale: this compares identifier SETS, not counts — a count comparison cannot see a table truncated from 08 while the stream lists up to 15. The contiguous-prefix discriminant is what keeps an arbitrary subset (« the 3 longest ») out of the report. See python scripts/check_listing_coherence.py --help.

@github-actions

github-actions Bot commented Nov 7, 2026

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

github-actions Bot commented Nov 7, 2026

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 14
  • Code cells validated: 237
  • 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 commented Nov 7, 2026

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 9/9 notebooks passed (certified reproducible)

Verdict calcule ce tour (cle ca8000eb685eb389) — aucune entree de cache ne correspondait.

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 5.0s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 3.6s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 4.0s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 4.9s
Search-01-StateSpace.ipynb ✅ SUCCESS 3.3s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 2.8s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 41.8s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 2.7s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 10.4s

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

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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants