Skip to content

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

Description

@jsboige

Constat mesuré (2026-09-24, cycle adjoint c.64, origin/main à d762eb527a)

L'advisory CI Markdown deaccent advisory (.github/workflows/markdown-deaccent-advisory.yml, fast-lane) repose sur scripts/notebook_tools/detect_markdown_deaccent.py. Ce détecteur ne signale un mot non accentué que si son jumeau accentué apparaît ailleurs dans le même notebook (« internal positive control », docstring l. 4-6). Or le pire cas, un notebook dont la prose est entièrement désaccentuée, n'a aucun jumeau. L'advisory le déclare alors propre : c'est un faux négatif structurel, pas un défaut de réglage.

Le dépôt a déjà l'instrument qui voit ce cas : scripts/notebook_tools/detect_accent_stripping.py, avec son dictionnaire conservateur ACCENT_PAIRS (paires dont la forme sans accent n'est pas un mot français). Il n'est câblé à aucun workflow.

Notebook Lettres accentuées / 1000 (markdown, hors code et maths) detect_markdown_deaccent (câblé) detect_accent_stripping (non câblé), lignes markdown touchées
PR #17618 : ML/DataScienceWithAgents/03-DeepLearning/3.9g-Compression-Comparatif-A-vs-B.ipynb (nouveau) 0,6 1 65 (90 hits)
PR #17609 : QuantConnect/research/research_iv_rank_strike_clusters.ipynb (nouveau) 0,0 0 53 (55 hits)
témoin 3.9a-Compression-Quantization-INT8.ipynb (main) 30,1 — 0
témoin 3.9f-Compression-Pruning-SOTA.ipynb (main) 44,5 — 4
témoin 3.9e-Compression-Quantization-SOTA.ipynb (main) 28,9 — 16 (vrais positifs lus : remplacee, entrainement, meme, modele)

Les deux PR ont tous leurs checks verts. La prose désaccentuée de deux notebooks neufs passerait donc sur main sans qu'aucun organe ne rougisse ni ne signale.

Reproduction (depuis un checkout de main) :

git fetch origin +pull/17618/head:pr17618
git show pr17618:"MyIA.AI.Notebooks/ML/DataScienceWithAgents/03-DeepLearning/3.9g-Compression-Comparatif-A-vs-B.ipynb" > /tmp/n.ipynb
python scripts/notebook_tools/detect_markdown_deaccent.py /tmp/n.ipynb   # 1 TOTAL
python scripts/notebook_tools/detect_accent_stripping.py /tmp/n.ipynb    # 90 hits

Ce qui est demandé

Fermer le faux négatif dans l'organe câblé, sans ressusciter les faux positifs que #14064/#14248 ont éliminés.

Deux voies. La lane tranche et écrit son choix dans le body :

  1. Repli lexical sans jumeau : 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 : cf. organ-first-implementation.md), et rapporter ces hits dans un bucket distinct (lexicon).
  2. Plancher de ratio : signaler un notebook FR (gate FR/EN existant) dont le taux de lettres accentuées en markdown est sous un seuil mesuré sur le corpus de main, jamais choisi à l'œil.

Acceptance (validée par les faux négatifs, jamais par le compte de hits)

Portée

See #16638 · See #14064 · See #14248

Activity

  1. jsboige commented on Sep 24, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2026:CoursIA — 2026-09-24T09:45Z. Voie retenue : 1 (repli lexical) — import du dictionnaire conservateur ACCENT_PAIRS de detect_accent_stripping.py (jamais copie), hits sans jumeau interne rapportés dans un bucket distinct lexicon. Justification : conservative par construction (les homographes des/sur/mesure/cote/tache sont exclus du dictionnaire même), pas de seuil à calibrer, gate EN inchangée. Acceptance couverte par tests fixture (prose 3.9g reproduite, EN non signalé, homographes non signalés) + mesure de l'effet rollout sur main rapportée en body.

  2. jsboige commented on Sep 24, 2026

    @jsboige
    OwnerAuthor

    Livré par #17643 (lane myia-po-2026:CoursIA) :

    • Voie 1 (repli lexical) : import du dictionnaire ACCENT_PAIRS (jamais copie), bucket distinct lexicon, précédence des exclusions locales (pinnée par test — tache figure à tort dans le dictionnaire, l'acceptance le cite).
    • Acceptance 1 : témoin live feat(qc,#15532): OptionsIncome v7.2 strike-availability (NO-BEATS) + notebook de recherche #17609 → 0 auto / 52 lex (head réel fetch éphémère). 3.9g feat(compression,#16060): 3.9g — comparatif capstone Bloc A vs Bloc B #17618 curé en cours de PR à 380494ae6d 05:53Z (postérieur à la mesure de l'issue : detect_accent_stripping rend 0 hits sur le head actuel) → fixture, voie prévue par l'acceptance.
    • Acceptance 2-3 : gate EN protège le repli (test) ; homographes non signalés (test).
    • Acceptance 4 : advisory non bloquant inchangé (fast-lane warn_rc=(1,2), workflow exit 0) ; rc=2 étendu à auto∪lexique → signal visible (label+notice) sans rougir.
    • Acceptance 5 : mesure main (1397 notebooks) = 144 passent de 0 à ≥1 signalement (781 lex-positifs).
    • Tests 12 passed (+4 nouveaux), famille 151 passed, consommateurs (fast_lane_registry, restore_accents_canonical) vérifiés compatibles.
  3. added a commit that references this issue on Sep 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions