Skip to content

fix(translation,#20551): re-rendu EN de 01-2 GPT-5 Image -- repare la parite FR/EN rouge sur main - #20777

Merged
myia-ai-01 merged 4 commits into
mainfrom
fix/20551-gpt5-image-en-parity
Oct 15, 2026
Merged

myia-ai-01 merged 4 commits into
mainfrom
fix/20551-gpt5-image-en-parity

Conversation

@jsboige

@jsboige jsboige commented Oct 14, 2026 •

Copy link
Copy Markdown
Owner

Grain: LIGHT/notebook-python -- lane myia-ai-01:CoursIA -- prev: MICRO/config #20917

Ce qui est rouge sur main

scripts/translation/tests/test_check_translation_parity.py::test_full_repo_state_passes_parity échoue sur main (1cef8a5502) :

AssertionError: pair 01-2-GPT-5-Image-Generation_en has blocking anomalies :
[Anomaly(verdict='STRUCTURE_DRIFT', detail={'src_count': 37, 'trd_count': 30, 'added_cells': ['17aab9f8'],
 'deleted_cells': ['32bae159', 'nv-exemple-3modes-code', 'nv-exemple-3modes-md', 'nv-exo1-code', 'nv-exo1-md',
 'nv-exo2-code', 'nv-exo2-md', 'nv-exo3-md'], ...})]

La jambe Scripts Tests de toute PR rougit sur ce seul défaut, quel que soit son contenu.

Cause

Un second défaut, muet, s'y ajoute : 6 cellules markdown déjà traduites (ea7cd836, jxwlftsm05, 9bf10ff2, gkk2vqpxov, ubm6sfxypqb, cuqkx7t59ob) ont changé en FR dans #20551, quand les exercices sont devenus des exemples guidés. La mise à jour du CSV a rafraîchi leur src_hash et gardé l'ancien text_en. check_translation_sync.py les voit donc IN_SYNC alors que la traduction décrit l'ancien texte. Le CSV n'enregistre pas contre quelle version source une traduction a été faite : c'est un angle mort de l'organe, signalé à part.

Geste

Pipeline T1/T3/T4, sans édition du carnet _en à la main :

  • T1 : le CSV était déjà à jour côté FR ; la ligne orpheline 17aab9f8 est retirée.
  • T3 : 10 text_en écrits, pour les 4 nouvelles cellules et les 6 modifiées. hash_en est calculé par cell_hash du module ; les spans de code et les sorties citées restent identiques au FR.
  • T4 : render_notebook.py --require-translated :
cells out: 37
markdown:  20 (translated=20, fallback=0, byte-identical=0)
code:      17 (copied verbatim)
orphans:   0 (CSV keys absent from notebook)
unmatched: 0 (notebook cells without CSV row)

Vérifié par lecture du CSV parsé : seules les 10 lignes visées changent (colonnes text_en et hash_en), et seule l'orpheline disparaît.

Validation

python -m pytest -q scripts/translation/tests/ → 403 passed, 2 skipped in 50.84s (dont test_full_repo_state_passes_parity).

Hooks pre-commit passés : gitleaks, H.3, scrub papermill, source-newlines, cellules compilables.

See #20551 · See #1650

🤖 Generated with Claude Code

Ajout du 15/10 (coordinateur) : périmètre élargi pour sortir d'un interblocage

Le PR gate échoue sur tout rouge hérité de main, et le merge admin est refusé. Cette PR héritait du rouge check-nav-chain (2 orphelins ANALYSE), que corrige #20704 ; #20704 héritait du rouge de parité, que corrige cette PR. Aucune des deux ne pouvait passer seule. Le périmètre s'élargit donc, ce qui est déclaré ici (composite justifié, G.4) :

  1. 90f96eb5b2 : cherry-pick de d17382fc03 (Fix(analyse,nav): rattacher ANALYSE-10 et ANALYSE-06_en a la chaine de navigation (main rouge check-nav-chain) #20704). Il ne touche que la navigation markdown de 2 carnets ANALYSE (5 lignes, aucune clé source/outputs/execution_count de code), donc aucune ré-exécution (C.2, markdown-only). check_notebook_nav_chain.py --check donne rc=0. Fix(analyse,nav): rattacher ANALYSE-10 et ANALYSE-06_en a la chaine de navigation (main rouge check-nav-chain) #20704 sera fermée comme intégrée, avec crédit.
  2. 355f83b2a6 : deux organes ne voyaient pas la forme canonique d'un jumeau _en.

à
. Un label gras suivi de sa liste collée (Instructions:

  1. ...`) redevient visible, ce qui est le cas SUBSTANCE_FOUND_INLINE_BOLD de [EPIC] Mise en forme visuelle des notebooks — verification de rendu + directives #3966.

Mesures à 355f83b2a6 : split-reading rc=0, plan-loss rc=0 sur les 3 carnets, nav-chain rc=0, twin-parity PASS, pytest sur les 2 fichiers d'organes : 159 passed, 1 xfailed ; pytest scripts/translation/tests/ : 403 passed, 2 skipped.

… -- parite FR/EN de main

test_full_repo_state_passes_parity est rouge sur main depuis #20551
(13/10) : le TP2 a ajoute 8 cellules au carnet FR 01-2 et retire la
cellule 17aab9f8, sans re-rendre le jumeau _en cree la veille par #20449
(STRUCTURE_DRIFT, 37 cellules FR contre 30 EN). La jambe Scripts Tests
de toute PR rougit sur ce seul defaut.

Second defaut, muet : 6 cellules markdown deja traduites ont change en
FR dans #20551 (exercices devenus exemples guides). La mise a jour du CSV
a rafraichi leur src_hash en gardant l'ancien text_en : la synchro les
voit IN_SYNC alors que la traduction decrit l'ancien texte.

Geste (pipeline T1/T3/T4, aucune edition du carnet _en a la main) :
- T1 : CSV deja a jour cote FR ; ligne orpheline 17aab9f8 retiree.
- T3 : 10 text_en ecrits (4 nouvelles cellules, 6 cellules modifiees),
  hash_en = cell_hash du module ; spans code et sorties citees inchanges.
- T4 : render --require-translated, 20/20 markdown traduits, 17 code
  copiees verbatim, 0 fallback, 0 orphelin.

Validation : pytest scripts/translation/tests/ -> 403 passed, 2 skipped.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #20777 (fix(translation,#20551): re-rendu EN de 01-2 GPT-5 Image -- repare la parite FR/EN rouge sur main) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@github-actions github-actions Bot added the pr-overlap Advisory: another open PR touches the same files (organ #13615) label Oct 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

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

@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 : fix(translation,#20551) — re-rendu EN de 01-2 GPT-5 Image

Verdict : APPROVE (ré exécution mécanique au head b0152988, identité clusterManager-Myia).

Ce que j'ai réellement vérifié sur les artefacts du head, indépendamment du corps de la PR :

1. Delta CSV exact et chirurgical. Parse du CSV head vs main (translations/genai/image.csv, 609 vs 610 lignes) :

  • 1 ligne retirée : 17aab9f8 (l'orpheline signalée, correspondant à la cellule Parameters supprimée en #20551) ;
  • 10 lignes modifiées, toutes uniquement sur les colonnes text_en/hash_en — exactement les 6 cellules modifiées (ea7cd836, jxwlftsm05, « 9bf10ff2 », « gkk2vqpxov », « ubm6sfxypqb », « cuqkx7t59ob ») et les 4 nouvelles (nv-exemple-3modes-md, nv- exo1-md, « nv-exo2-md », « nv-exo3-md ») listées dans le corps ;
  • aucune autre ligne, aucune autre colonne touchée.

2. Intégrité du pipeline appliqué. J'ai extrait la formule canonique cell_hash de check_translation_sync.py (sha256(normalize(text))[:16], rstrip par ligne + strip newline) et recalculé :

  • hash_en = cell_hash(text_en) : 20/20 OK, 0 mismatch, 17 lignes sans traduction (politique normale) ;
  • src_hash des 37 lignes du carnet contre le carnet FR réel au head : 37/37 OK, 0 stale, 0 ligne orpheline.

3. Parité structurelle du jumeau EN. Comparaison intégrale FR↔EN au head :

  • 37 cellules = 37 cellules, séquence de types identique ;
  • 17 cellules code verbatim (0 différence) — les sorties et le code ne sont pas retouchés ;
  • 20 cellules markdown traduites, toutes byte-identiques au text_en du CSV (0 mismatch, 0 orpheline, 0 non-couverture).

4. Ancrage des traductions. Sur les 20 textes traduits : 0 span de code `...` du FR absent de l'EN ; valeurs numériques toutes préservées — l'unique écart détecté (« 400 000 tokens » → « 400,000 token context window ») est la localisation légitime des nombres, pas une perte de valeur. 0 mot FR résiduel.

Le second défaut décrit au corps (6 text_en rafraîchis par src_hash mais décrivant l'ancien texte après #20551) est confirmé présent au head et bien couvert par le geste : les 6 lignes visées font partie des 10 modifiées.

Référence: #20551 · #1650

@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

⚠️ 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 added the variation-tag-missing PR sans tag Grain: <TIER>/<GENRE> (variation-protocol) label Oct 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ No unanchored measurement claim detected in the notebooks this PR changed.

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.

@github-actions

Copy link
Copy Markdown
Contributor

Grain tag obligatoire (#10045, bloquant).

Grain tag absent (no Grain: / in body).

Pour passer ce gate, le body doit porter en tete une ligne de la forme :

Grain: <DEEP|MED|LIGHT>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<GENRE> #<PR>

Le <genre> doit figurer dans l'enumeration §1 de variation-protocol.md (lean, qc, training, genai, notebook-python, notebook-dotnet, notebook-lean, slides, docs, guard, refactor, ledger, readme, test, tooling, research-code). Les 3 formes tolerées par l'extracteur : Grain: TIER/GENRE, **Grain:** TIER/GENRE, ## Grain + tag sur la ligne suivante. La lane doit suivre le format <machine>:<workspace> (cf. lane-claim-protocol.md).

@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 8.0s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 6.7s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 6.9s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 6.0s
Search-01-StateSpace.ipynb ✅ SUCCESS 4.5s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 3.7s
RL-04-Bandits-Manchots-Python.ipynb ✅ SUCCESS 32.8s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 4.1s
GameTheory-13d-Optimistic-CFR-Python.ipynb ✅ SUCCESS 20.1s

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

jsboige added a commit that referenced this pull request Oct 16, 2026
jsboige added a commit that referenced this pull request Oct 16, 2026
jsboige added a commit that referenced this pull request Oct 16, 2026
jsboige added a commit that referenced this pull request Oct 16, 2026
jsboige added a commit that referenced this pull request Oct 16, 2026
jsboige added a commit that referenced this pull request Oct 16, 2026
jsboige added a commit that referenced this pull request Oct 16, 2026
…ase refresh, pre-#20777 cure -- lane myia-po-2023:CoursIA)
jsboige added a commit that referenced this pull request Oct 16, 2026
…base refresh, pre-#20777 cure -- lane myia-po-2023:CoursIA)
jsboige added a commit that referenced this pull request Oct 16, 2026
… base refresh, pre-#20777 cure -- lane myia-po-2023:CoursIA)
jsboige added a commit that referenced this pull request Oct 16, 2026
…e refresh, pre-#20777 cure -- lane myia-po-2023:CoursIA)
jsboige added a commit that referenced this pull request Oct 16, 2026
…refresh, pre-#20777 cure -- lane myia-po-2023:CoursIA)
jsboige added a commit that referenced this pull request Oct 16, 2026
… refresh, pre-#20777 cure -- lane myia-po-2023:CoursIA)
@jsboige
jsboige deleted the fix/20551-gpt5-image-en-parity branch October 16, 2026 12:34
jsboige added a commit that referenced this pull request Oct 17, 2026
…twin-parity STRUCTURE_DRIFT sur #21175

La cellule markdown nouvelle (lecture-cmp-modes-guide) et les 5 cellules FR
reecrites rendaient la paire jumeau desynchronisee (38 FR vs 37 EN). Resync
per-cell du CSV (6 entrees, 0 hors 01-2) + re-traduction EN + re-rendu du
_ipynb EN via le pipeline canonique (render_notebook, geste #20777/#21110).
Guards locaux : twin-parity PASS, resync-only verdict ok, 0 cellule
code/output touchee cote EN (18 lignes markdown seules).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
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) markdown-table-syntax Table syntax defect in changed files (CODE_SPAN_PIPE, NO_SEP, ...). Advisory. See #10097. pr-overlap Advisory: another open PR touches the same files (organ #13615) translation-override Dual-key override for translation-guard (#10332): label + [TRANSLATION-OVERRIDE] comment required

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants