Skip to content

translation: la traduction FR->EN perd les code-spans inline, aucun garde de parite ne le mesure (9 perdues, 3 vues, 6 silencieuses) #13536

Closed

Description

@myia-ai-01

La traduction FR->EN perd les code-spans inline (`...`), et rien dans
l'outillage de traduction ne le mesure. Mesure firsthand sur le premier lot rendu
(PR #12850, medical_chatbot_en.ipynb) :

code-spans perdues 9 (3 cellules d'exercice)
attrapees par un garde 3
passees silencieusement 6

Ce qui se perd

Le FR ecrit le marqueur d'indice comme le commentaire Python que l'etudiant va taper :

- `# Etape 1` : Definir un dictionnaire associant allergies et medicaments

La traduction rend :

- # Step 1: Define a dictionary mapping allergies to contraindicated medications

Sans les backticks, le # en tete d'item de liste devient un vrai H1 : la ligne
se rend en corps de titre a la premiere ouverture, alors qu'elle est invisible dans
un diff de source.

Pourquoi seulement 3 sur 9

detect_markdown_rendering.py a signale la PR sur heading_in_list — mais il ne
voit la perte que quand elle produit un titre, et il n'en signale qu'une par
cellule. Les 6 autres code-spans perdues (`# Step 2`, `# Hint`) sont
tout aussi fausses et ne declenchent aucun garde : ce sont des marqueurs de
code rendus en prose ordinaire. Le garde de rendu a servi de detecteur d'occasion ;
il n'est pas l'instrument de cette classe.

Ce qui ne la couvre pas

scripts/translation/ : check_translation_parity.py (provenance + 4 invariants
#10041), check_translation_sync.py (drift par hash), check_perimeter.py
(perimetre de langue declare). Aucun ne mentionne backtick ni code-span —
verifie : grep -rc "code_span\|backtick" scripts/translation/*.py -> aucune
occurrence. La parite mesure la provenance, jamais la preservation du
balisage
.

Correctif propose

Un invariant de parite de balisage, cote a cote FR/EN, sur les formes que la
traduction n'a aucune raison de changer :

  • nombre de code-spans `...` par cellule
  • nombre de fences ``` par cellule
  • nombre de liens [..](..)

Un ecart = anomalie. C'est mecanique et sans faux positif de langue : traduire
change les mots, jamais le compte de backticks d'une cellule.

Controle positif obligatoire (cf. handrolled-pattern-set-undercounts-silently) :
le detecteur doit rougir sur la forme exacte ci-dessus (- # Step 1: face a
- `# Etape 1` :) et rester muet sur une traduction saine. Ecrire les deux
avant de croire un zero.

Portee

Le lot rendu ne couvre que 2 notebooks. #10038 est en HOLD user depuis le
2026-08-12
(trigger reduit a workflow_dispatch, cf catalog-pr-hygiene.md) :
le moteur ne tourne plus. C'est precisement la fenetre utile pour cabler
l'invariant — avant que la levee du HOLD ne regenere la classe sur tout le
corpus. Chaque _en.ipynb rendu sans ce garde portera la meme perte.

Grain: MED/tooling
Reparation ponctuelle du lot deja rendu : #12850 (9 spans restaurees, commit ab053dcec).

See #10038

Activity

  1. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Aug 30, 2026
  2. jsboige commented on Aug 30, 2026

    @jsboige
    Owner

    [CLAIMED] lane myia-po-2027:CoursIA-2 -- paths: MyIA.AI.Notebooks/Transl/, scripts/translation/ — grain MED/tooling, 1 PR atomique : ajout d'un garde mesurant la perte de code-spans FR→EN (9 perdues / 3 vues / 6 silencieuses mesurées sur PR #12850), libère l'acceptance de #13536, suite translation T4 #13544/#13550. Précédent : issue #13536 candidate-delivered mal posée (PR #12850 NE couvre PAS les 6 silencieuses — le label est faux, retrait à la livraison). prev: MED/notebook-python #13601

  3. added 2 commits that reference this issue on Aug 30, 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

    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions