Skip to content

fix(guard,#17623): deaccent advisory — repli lexical ACCENT_PAIRS (notebook entierement desaccentue) - #17643

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/deaccent-lexicon-fallback-17623
Sep 24, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/deaccent-lexicon-fallback-17623

Conversation

@jsboige

@jsboige jsboige commented Sep 24, 2026

Copy link
Copy Markdown
Owner

Grain: MED/guard -- lane myia-po-2026:CoursIA -- prev: MED/guard #17641

Summary

Faux négatif structurel de l'organe câblé detect_markdown_deaccent.py : le contrôle positif interne (jumeau accentué dans le même notebook) est aveugle à un notebook dont la prose est entièrement désaccentuée — aucun jumeau n'existe, le pire cas rendait 0. Mesure de l'issue : research_iv_rank_strike_clusters (PR #17609), 0,0 lettre accentuée / 1000 en markdown, tous checks verts.

Voie 1 retenue (repli lexical), justification : conservateur par construction (le dictionnaire ACCENT_PAIRS de detect_accent_stripping.py n'admet que des formes stripped qui ne sont pas des mots français valides — les homographes qui faisaient les 96 % de FP du scan historique sont exclus d'office), pas de seuil à calibrer, gate EN inchangée. Import, jamais copie (organ-first).

Acceptance (les 5 cases)

  • Témoins signalés : tête live feat(qc,#15532): OptionsIncome v7.2 strike-availability (NO-BEATS) + notebook de recherche #17609 → 0 auto / 52 lex (mesuré sur le head réel, fetch éphémère). Le 3.9g de feat(compression,#16060): 3.9g — comparatif capstone Bloc A vs Bloc B #17618 a été curé en cours de PR (380494ae6d, « Fix: feat(compression,#16060): 3.9g — comparatif capstone Bloc A vs Bloc B #17618 re-accentuation de la prose markdown du 3.9g », 05:53Z — postérieur à la mesure de l'issue : detect_accent_stripping rend 0 hits sur le head actuel) → fixture qui reproduit la prose désaccentuée (voie explicitement prévue par l'acceptance), signalée.
  • EN non signalé : test_english_notebook_gate_skips_lexicon — le gate language=en protège le repli exactement comme le contrôle jumeau.
  • Homographes non signalés : des/sur/mesure/cote absents du dictionnaire ; tache y figure à tort (tache/tâche est un homographe légitime listé dans HOMOGRAPH_EXCLUSIONS) → la précédence des exclusions locales sur le lexique est implémentée et pinnée par test (l'acceptance cite tache explicitement).
  • Advisory non bloquant : fast-lane warn_rc=(1,2) + blocking=False (TRANCHE6) et workflow exit 0 permanent — inchangés. Le rc=2 de --fail-on-findings couvre désormais auto OU lexique : le signal devient visible en CI (label + notice) sans jamais rougir. Durcir en gate = décision coordinateur.
  • Effet rollout mesuré : scan des 1397 notebooks de main → 144 passent de 0 à ≥1 signalement (781 lex-positifs au total ; dette accents réelle du registre fix(docs): accents manquants dans les READMEs francophones #2876, l'advisory ne touche que les notebooks modifiés par une PR).

Compatibilité consommateurs (vérifiée)

  • fast_lane_registry.py TRANCHE6 : warn_rc=(1,2), blocking=False — sémantique inchangée.
  • restore_accents_canonical.py : find_candidates(shadow).get("auto") — clé inchangée.
  • Workflow : aucun parsing de la ligne TOTAL (JSON au summary) ; wording notice/label/FIX mis à jour (« auto/lexique »), YAML validé.

Preuves

Perimeter

3 fichiers : le détecteur (+69/−21), ses tests (+59/−0), le wording du workflow advisory (3 chaînes + 1 commentaire). Aucun notebook, aucun autre organe.

Closes #17623

🤖 Generated with Claude Code

…r le notebook entierement desaccentue

Faux negatif structurel : le controle positif interne (jumeau accentue
dans le meme notebook) est aveugle a un notebook dont la prose est
ENTIEREMENT desaccentee — aucun jumeau n'existe, le pire cas rendait 0.
Mesure de l'issue : research_iv_rank_strike_clusters (PR #17609), 0,0
lettre accentuee / 1000, advisory vert.

Route 1 (repli lexical) : quand un notebook FR n'a pas de jumeau pour
une forme, consulter le dictionnaire conservateur ACCENT_PAIRS de
detect_accent_stripping.py (import, jamais copie) et rapporter dans un
bucket distinct `lexicon`. Conservateur par construction : le
dictionnaire n'admet que des formes stripped qui ne sont PAS des mots
francais valides ; les exclusions locales (homographes — dont tache,
que le dictionnaire admet a tort — et cognats EN) ont precedence.

- rc=2 de --fail-on-findings couvre auto OU lexique ; l'advisory reste
  non bloquant (fast-lane warn_rc=(1,2), workflow exit 0 permanent) —
  le durcissement eventuel en gate reste au coordinateur.
- Temoin live : tete #17609 → 0 auto / 52 lex. Le 3.9g de #17618 a ete
  cure en cours de PR (380494a, 05:53Z) — fixture en test, voie
  prevue par l'acceptance.
- Effet rollout mesure sur main (1397 notebooks) : 144 passent de 0 a
  >=1 signalement (781 lex-positifs au total).

Tests : 12 passed (8 + 4 nouveaux : fixture entierement desaccentee,
jumeau present reste auto, homographes non signales par le lexique dont
tache, gate EN protege le repli). Familie : 151 passed. YAML valide.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@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).

@jsboige

jsboige commented Sep 24, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-ai-01:CoursIA
pr: 17643
head: 70b86e7
complete: true
body: read
comments-reviewed: 1
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 48e4e9de23f60bbf64c7a11fc74531d1671d38a9cf364d9af026b3e316b7d152
diff-files: 3
diff-additions: 121
diff-deletions: 34
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

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.

guard(deaccent): l'advisory markdown-deaccent ne voit pas un notebook entièrement désaccentué (faux négatif structurel du jumeau)

2 participants