Skip to content

[EPIC] Traduction multilingue du depot via datasetupdater Argumentum (low priority) #1650

Description

@myia-ai-01

État mesuré au 2026-10-11 (lane myia-po-2024:CoursIA, tranche acceptance 4 de #13906)

1. Les six PRs du bloc du 10-05 ci-dessous sont toutes MERGÉES (vérifié firsthand 11/10) : #19118 (2026-10-05), #19128 (2026-10-05), #19107 (2026-10-04), #18928 (2026-10-03), #19083 et #19110 (2026-10-04) — les statuts « attente merge coord / re-tampon adjoint » de cette table sont périmés.

2. Quatre livraisons d'octobre non consignées :

PR Date Sujet
#18968 2026-10-04 FineTuning FT-01 + FT-03 EN — 23 cellules md + 2 rendus _en
#19121 2026-10-04 base T1 des familles restantes — Complexity, Compression, NLP (502 cellules)
#19175 2026-10-05 FT-02 QLoRA EN — couverture complète + rendu _en
#20058 2026-10-09 9e paire de traduction (EXPECTED_PAIR_COUNT 8 -> 9) — corrige le rouge de base #19996

La séquence 4 du 2026-09-22 reste le plan à exécuter ; aucune de ces PRs ne ferme #1650.

Portée du non-vérifié : fenêtre de l'organe = 2026-10-04 -> 10-10 ; le contenu cellule-par-cellule des rendus _en n'a pas été relu ici.

État mesuré au 2026-10-05 — consolidation de la posture (#1650)

Ce bloc préfixe sans refermer l'issue. La posture est contredite sur deux points, et cinq PRs livrées par le cluster (Octobre) ne sont pas consignées dans le corps ci-dessous.

Posture contredite -- deux points :

  1. Suffixe canonique des notebooks pilotant un noyau Lean : la décision 4.1 du 2026-09-22 annonçait un suffixe -Lean-Python (au moins 36 notebooks Python pilotent Lean, aucun suffixé). L'audit de suffixe livré par Rename(#1650): Serre100 08 suffixe -Lean — audit de suffixe Serre100+Langlands #19128 (relecture par mes soins, 2026-10-04) contredit ce point : un seul notebook (Serre100/08) pilote un noyau lean4-wsl natif, donc suffixe -Lean. Les 16 autres notebooks de l'audit sont Python stdlib pur sans exécution Lean, donc pas de suffixe. Le suffixe -Lean-Python était une hypothèse, pas un constat. La convention canonique désormais est -Lean (kernel natif) | rien (Python pur), voir la cadence des notebooks Lean-16b/c.

  2. Organe de parité : la décision 3 indiquait « modèle à réutiliser plutôt que réinventer : la parité jumeaux Python/C# — registre de paires avec empreintes de contenu, attestation, audit de dérive (scripts/notebook_tools/check_twin_parity.py, twin-parity*.yml) ». L'organe est désormais livré par Add(ci,#19116): twin-parity-guard -- parite jumeau FR/<lang> scopee au diff de la PR #19118 (twin-parity opérationnel, 2026-10-04). La décision 3 devient donc « s'appuyer sur l'organe livré » et la phase « harnais de localisation » peut s'inspirer directement du registre twin-parity.

Cinq PRs non consignées dans le corps ci-dessous :

PR Date Sujet Statut
#19118 2026-10-04 feat(shared,#19115): organ twin-parity v1 (registre de paires + attestation + audit de dérive) MERGEABLE / attente merge coord
#19128 2026-10-04 Rename(#1650): Serre100 08 suffixe -Lean — audit de suffixe Serre100+Langlands MERGEABLE / attente OVERRIDE coord (trappe #13495, cf. DM msg-20261005T022957-173wcn)
#19107 2026-10-04 feat(lean,#18430): Lean-XX carnet sorry 9 → 8 (provennement splits acquis) CLEAN / attente merge coord
#18928 2026-10-03 test(lean,#18430): oracle _parse_duree_to_minutes (closed-enum 5min-2h, 2h+ loud-fail) MERGEABLE
#19083 / #19110 2026-10-04 fix(lean,#18430): cadrilles Lean-XX* racine (provennement splits + navigation) BLOCKED-WITH-SUBSTANCE / attente re-tampon adjoint

Portée vérifiée : la correction de la posture ne touche ni le mandat user 2026-05-28 (« traduire simplement le contenu du dépôt en anglais et en plusieurs autres langues ») ni la décision d'architecture de distribution (1 dépôt par langue). Elle met à jour la séquence 4.1 (suffixe) et la phase 4 (organe twin-parity livré). L'issue reste OPEN, pas de See #N vers un travail de fermeture : aucun des 5 PRs ci-dessus ne ferme #1650, et la séquence 4 du 2026-09-22 reste le plan à exécuter.


Mandat utilisateur (verbatim)

"Traduire tout simplement le contenu du dépôt en anglais et en plusieurs autres langues.
C'est un travail pharaonique mais il se trouve qu'en ce moment même Argumentum utilise un outil développé par mes soins l'an dernier pour traduire toutes les contenus du jeu dans des csv massifs.
Je pense qu'après completion de l'issue qui mandate son intégration dans le dépôt en sous-module, on pourra se servir du même moteur pour faire la traduction en un script global. Création des csv à traduire à partir des cellules de notebook et des paragraphes de markdown, exécution du datasetupdater d'argumentum dans toutes les langues actuellement supportées par argumentum (cf le dashboard pour le travail en cours), puis redispatching dans des notebooks xxx_en.ipynb, xxx_es.ipynb etc. Pareil pour les readme et autres docs."

— jsboige, 2026-05-28, à ai-01:CoursIA (low priority, troisième Epic dans la série Conway #1647 / Grothendieck #1646 / Traduction)

Décisions user du 2026-09-22 — architecture de distribution (remplacent les arbitrages des Phases 2, 3 et 4)

Discussion stratégique ai-01 ↔ user du 2026-09-22. Verbatims :

« le caractère beta des notebooks ne me semble pas être un blocage complet au fait qu'on avance sur le sujet de la localisation »

« Non on doit traduire le code, il sera exécuté dans chacun des dépôts localisés »

« je pense qu'il faut qu'on accepte la possibilité de PRs localisées. On a normalement spécifié un système de comparaison des csv et des cellules de notebook pour détecter les évolutions, il faudra juste prévoir que ce système fasse la comparaison entre dépôts distincts. On doit pouvoir s'inspirer de ce qui est fait pour la parité Python/Csharp. »

« OK pour renommer avant de traduire »

1. Un dépôt de distribution par langue — pas de siblings xxx_<lang>.ipynb, pas de fork, pas de LFS

Mesure du 2026-09-22 : le dépôt pèse ~2,8 Go d'historique sur GitHub (104 forks) ; les 1 371 notebooks de l'arbre courant font 639 Mo (médiane 96 Ko, les 5 plus gros GenAI Audio/Image = 124 Mo). Sept langues cibles en siblings = +4,5 Go d'arbre courant dès la première vague, puis chaque ré-exécution multipliée par 8. GitHub recommande de rester sous 5 Go.

Option Verdict Motif
Siblings xxx_<lang>.ipynb dans CoursIA écartée explosion de taille ci-dessus
Fork par langue écartée un fork embarque tout l'historique du parent (aucun gain au clone) ; resynchroniser N forks à chaque correction FR = conflits permanents ; forks relégués dans la recherche GitHub
Git LFS pour les notebooks écartée le notebook devient un pointeur : diff de PR et organes de review (ratchets sortie/source, validate_pr_notebooks) aveugles ; contributeur sans git-lfs = notebooks cassés ; bande passante facturée au propriétaire ; alléger l'existant exigerait de réécrire main (interdit). LFS reste pertinent pour de vrais binaires à venir (dll/exe/pt/pdf)
Dépôt séparé par langue (CoursIA-en, CoursIA-es, …) retenue CoursIA reste la source FR et ne porte que la mémoire de traduction (translations/, texte) ; chaque dépôt de langue ≈ taille d'un instantané ; README natif, topics, site indexable dans sa langue

2. Le code est traduit et exécuté dans chaque dépôt localisé

Remplace « le code lui-même n'est jamais traduit » (Phase 2) et « conserve execution_count et outputs du source » (Phase 3). Chaque notebook localisé porte ses propres sorties d'exécution réelle (C.2 s'applique dans chaque dépôt de langue, comme ici). Conséquence de chantier : l'extracteur doit couvrir identifiants, chaînes affichées, commentaires et légendes, avec une garde qui vérifie que le code traduit s'exécute (la parité de comportement se mesure à l'exécution, pas au diff).

3. PRs localisées acceptées — comparaison entre dépôts distincts

Une contribution peut arriver dans un dépôt de langue. L'organe de détection d'évolution (CSV par série de #4957, scripts/translation/check_translation_sync.py et ses 6 verdicts, multilingual_drift_audit.py) doit comparer entre dépôts, et non plus seulement à l'intérieur de CoursIA. Modèle à réutiliser plutôt que réinventer (organ-first) : la parité jumeaux Python/C# — registre de paires avec empreintes de contenu, attestation, audit de dérive (scripts/notebook_tools/check_twin_parity.py, twin-parity*.yml). Une paire devient (notebook FR @ sha, notebook <lang> @ sha, dépôt) ; une évolution d'un côté se propage vers l'autre par PR, dans les deux sens.

4. Séquence

  1. Renommer avant de traduire : numérotation, suffixe -Lean-Python (au moins 36 notebooks Python pilotent Lean, aucun suffixé), casse du suffixe C# (96 -Csharp vs 34 -CSharp), consolidation des lakes — la mémoire de traduction est indexée par chemin + cell_id, tout renommage postérieur casse les clés dans chaque langue.
  2. READMEs à jour (ils listent des chemins).
  3. Harnais de localisation (connecteur datasetupdater, génération, exécution, publication, comparaison inter-dépôts) — pas gaté par le caractère beta des notebooks.
  4. Première vague : vitrine + READMEs, déclarée beta ; puis séries une à une. Le label « production » d'un notebook reste porté par la revue éditoriale ([EPIC] Revue editoriale user — gater PRODUCTION sur une signature reelle, un dossier a la fois #11259) — c'est précisément l'aide que l'appel public multilingue sollicitera.

Insight pivot — un moteur unique, trois couches CoursIA

Le datasetupdater d'Argumentum existe déjà et tourne en production sur le jeu Argumentum. CoursIA ne réinvente rien : on connecte. Le travail réel se réduit à modeler le contenu pédagogique en CSV équivalent à un dataset Argumentum, puis à redéposer le résultat traduit dans la forme attendue (notebook ou markdown).

Couche Artefacts CoursIA Format CSV intermédiaire Sortie
Notebooks *.ipynb markdown cells + code comments notebook_path, cell_id, cell_type, paragraph_idx, text_fr, placeholders_json xxx_en.ipynb, xxx_es.ipynb, …
Documentation README.md, docs/**/*.md, CLAUDE.md md_path, paragraph_id, heading_path, text_fr README.en.md, docs/en/**
Slides (Phase 8+) Marp .md, PPTX slide_id, text_fr, placement slides.en.md, …

Dépendance bloquante — LEVÉE le 2026-06-09, remplacée par trois gates qui vivaient en commentaires

Ce que cette section disait jusqu'au 2026-09-01 : « #1271 doit être mergé avant Phase 1. État actuel (dashboard 2026-05-26) : GELÉ pending feu vert user post-PrCon. »

C'est faux depuis près de trois mois. #1271 est CLOSED le 2026-06-09, et le sous-module Argumentum est présent sur main à MyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/Argumentum (git ls-tree origin/main, gitlink 1c5231f6, vérifié le 2026-09-01). Le datasetupdater est atteignable. Une lane qui tirait cette EPIC lisait « GELÉ », concluait qu'elle était bloquée sur autrui, et la reposait — c'est le mécanisme de délaissement que #11900 décrit, et il a tourné ici pendant 84 jours.

Les trois gates réels — ils existent, mais ils ne sont pas celui-là

Aucun ne bloque le moteur ; tous les trois bloquent la production de traductions. La distinction est ce qui rend cette EPIC de nouveau piochable.

  1. Revue éditoriale, par notebook signé — [EPIC] Revue editoriale user — gater PRODUCTION sur une signature reelle, un dossier a la fois #11259 (OPEN). Mandat user du 2026-08-16, inscrit dans un commentaire de cette issue : « [la revue éditoriale] c'est le vrai gate qui permettra de lancer la traduction 8 langues sans avoir l'impression de créer [du volume non relu] ». La traduction se déclenche par notebook signé, jamais par vague.
  2. Consolidation avant traduction — décision user du 2026-08-31/09-01, après parcours navigateur de la série GameTheory : « On lancera la trad après consolidation. » GameTheory est la série nommée en premier.
  3. Livraison scriptée en hold — i18n notebooks : T4 renderer + CI autonome — sortir du moteur qui tourne a vide (mandat user 2026-08-08) #10038 / PR fix(i18n,#10038): hold translation-sync — neutraliser le trigger on:push (decision user 2026-08-12) #10767. Le trigger on: push de translation-sync.yml est neutralisé par décision user du 2026-08-12 ; le moteur ne tourne plus que sur workflow_dispatch. Ce n'est pas une panne : c'est le hold qui empêche la production de repartir avant les gates 1 et 2.

Ce qui est donc piochable aujourd'hui, sans lever aucun gate

Le moteur et son outillage sont largement construits, et rien n'interdit de les finir ou de les vérifier :

Les phases ci-dessous conservent leur rédaction d'origine ; leur état réel est celui du tableau ajouté en tête de la section « Phases ».


État des phases au 2026-09-01 (ai-01) — le plan ci-dessous n'avait jamais été coché

Phase État mesuré Preuve
0 — Prérequis & inventaire LIVRÉE inventaires intégrés au body
0.5 — Défrichage manuel EN→FR LIVRÉE, sauf le golden set #7490 (conway-lean patterns), #8717 (scripts/datasets), plus la vague FR-first (#9618, #9645, #9761). translation_golden_set.json absent
1 — Connecteur Argumentum DÉBLOQUÉE, non commencée sous-module présent sur main depuis #1271 (CLOSED 2026-06-09)
2 — Extracteur CSV LIVRÉE pour l'essentiel extract_cells_to_csv.py + 37 tests (#9265) ; ~20 séries dans translations/
3 — Réinjecteur LIVRÉE pour l'essentiel translate_csv.py + 22 tests round-trip (#7023)
4 — Pilote sur 1 série GATÉE gates 1 et 2 ci-dessus (revue éditoriale #11259 ; consolidation GameTheory d'abord)
5 — Scale-up batch GATÉE idem, et hold de livraison #10038/#10767
6 — Drift detection LIVRÉE pour l'essentiel check_translation_sync.py + 50 tests, 6 verdicts (#9266) ; multilingual_drift_audit.py
7 — Index langues & navigation OUVERTE aucune PR citante

Le plan d'origine séquençait tout derrière « #1271 puis le moteur ». Le plateau a fait l'inverse : le moteur est construit, c'est la production qui est tenue — délibérément, par des décisions user. Lire les phases dans l'ordre du plan induit en erreur ; lire ce tableau ne le fait pas.

Phases

Phase 0 — Prérequis & inventaire (1-2h, hors blocage)

  • Vérifier la complétion de [EPIC] Argument_Analysis upgrade — submodule Argumentum + import 2025-Epita-IS (cours EPITA 20/05) #1271 (sous-module Argumentum) → bloqueur de Phase 1
  • Inventaire du périmètre à traduire :
    • Notebooks : find MyIA.AI.Notebooks -name "*.ipynb" -not -name "*_output.ipynb" -not -name "*_<lang>.ipynb" (1 181 notebooks source sur origin/main au 2026-08-30 — l'estimation initiale « ~400 » était fausse d'un facteur ~3 ; le README du 17/08 annonçait déjà 1 024)
    • Markdown : find . -name "*.md" -not -path "./node_modules/*" -not -path "./.git/*" (READMEs + docs)
    • Slides : find MyIA.AI.Notebooks -name "slides.md" -o -name "slides_*.md"
  • Langues supportées par Argumentum Data-Gate v0.9.0 (relevé dashboard Argumentum workspace 2026-05-28) :
    • EN, FR, ES, AR, FA, ZH, RU, PT — 8 langues, scope v0.9.0 du jeu
    • 4 datasets actifs comme pattern : Rules, Virtues, Scenarii, Fallacies (couvertures 75-100% selon langue × dataset)
    • Backend LLM : gpt-5.5 (mandate fiabilité narrative côté Argumentum, transposable CoursIA)
    • Bornes coût observées Argumentum : ~$8/PR garde-fou, ~$120 cumul sur une Phase complète (~1500 cellules)
    • Maturité prouvée 2026-05-28 (Phase 3 Scenarii ES/FA/AR 100% en 1 cycle, ratio API ~1.0×/cell post-fix tool description) — moteur prêt pour reuse externe
  • Cette liste est la source de vérité : toutes les langues vivantes côté Argumentum sont produites côté CoursIA, ni plus, ni moins. Si Argumentum ajoute DE/IT/JA en v1.0, CoursIA suit en cycle suivant.

Phase 0.5 — Défrichage manuel ad-hoc EN→FR (4-8h, déblocable maintenant, sans Argumentum)

Ajouté 2026-06-12 suite mandat user (« commence par identifier et traduire en français de façon ad-hoc, non scriptée, les nombreux docs markdown profonds encore en anglais, en récupérant au passage les versions anglaises en README.en.md telles que visées par la résolution scriptée »). C'est un prélude au moteur Argumentum, pas le moteur lui-même — pas besoin d'en connaître le détail pour exécuter cette phase.

Rationale (pourquoi avant la Phase 1 scriptée).

  1. Préalable à l'exécution du moteur. Le datasetupdater Argumentum part des sources françaises pour générer les autres langues. Or un scan du dépôt (2026-06-12) révèle que ~30 docs markdown profonds sont encore en anglais alors que le dépôt est FR-primaire (CLAUDE.md §E). Si le moteur tourne sur un mélange EN/FR incohérent, il traduira de l'anglais vers les autres langues sur ces fichiers, ou produira un mélange. Il faut donc assainir les sources FR d'abord.
  2. Déblocable immédiatement. Cette phase ne dépend pas de [EPIC] Argument_Analysis upgrade — submodule Argumentum + import 2025-Epita-IS (cours EPITA 20/05) #1271 (sous-module Argumentum gelé). Tout le travail est de la traduction humaine assistée + git mv/Write.
  3. Pré-produit les *.en.md. La manœuvre récupère l'original EN comme <doc>.en.md au passage — exactement le livrable que la Phase 3 scriptée générerait automatiquement plus tard. Le défrichage manuel pré-remplit donc le périmètre EN.
  4. Golden set pour le moteur. Les paires FR/EN de qualité humaine produites ici servent de jeu d'étalonage/audit pour valider la qualité du moteur Argumentum en Phase 4 (cf critère ajouté).

Convention naming. Alignement sur l'Epic existant (Phase 3) : README.en.md, <name>.en.md (séparateur point, standard i18n, cohérent avec xxx_<lang>.ipynb). Note : le mandat user écrit Readme_en.md (underscore) ; on standardise sur README.en.md pour cohérence avec la Phase 3 déjà documentée — à confirmer par le user si l'underscore est préférable.

Périmètre issu du scan 2026-06-12 (docs EN-dominants, ratio stop-words EN/FR > 0.60, >100 mots), filtré pour ne garder que les docs CoursIA pérennes :

Catégorie Docs EN profonds (chemins représentatifs)
READMEs de stratégies QC QuantConnect/projects/{DualMomentum,PairsTrading,TrendFilteredMeanReversion,composite-c1-multiasset,composite-c2-equityfactor,Mamba-Crypto-Ranking,ML-Classification,Research-Executor,Framework_Composite_FamaFrenchAllWeather}/README.md (≈10 fichiers, ~120-380 mots chacun)
Docs techniques de fond Probas/PORT_PYTHON_PLAN.md (718w), Probas/Infer/scripts/README.md, QuantConnect/datasets/yfinance/crypto_panier/README.md, QuantConnect/partner-course-quant-trading/templates/student-presentation/README.md
READMEs de séries Symbolic GameTheory/cooperative_games_lean/README.md, GameTheory/social_choice_lean_peters/README.md, SymbolicAI/Lean/sensitivity_lean/NOTICE.md
Docs/READMEs scripts & infra scripts/qc-mcp-lite/README.md, scripts/datasets/README.md, docker-configurations/notebook-runner/README.md, docs/reference/claude-code-config.md (300w)

Exclus du défrichage (tri pérenne vs éphémère) :

  • Audits / snapshots éphémères (*AUDIT*.md, qc_projects_audit_*.md, audit_consolidation_qc.md, M10_DM_RETROACTIF.md, verdict.md, quantbooks_execution_status.md, STABLE_SNAPSHOT*.md) → relèvent du nettoyage dashboard (cf harness-hygiene), pas de traduction.
  • Harnais (.claude/rules/, .claude/skills/, .claude/agent-memory/, CLAUDE.md) → déjà hors scope déclaré (lecteur unique = agents francophones).
  • Upstream Lean (.lake/packages/{mathlib,Cli,importGraph}/) → dépendances tierces, jamais traduire.
  • Archives (docs/archive/*) → déjà déplacés, pas prioritaires.
  • Worktrees (.claude/worktrees/**) → copies temporaires, ignorer (doublons du repo principal).

Processus ad-hoc par doc (manuel, non scripté) :

  1. Copier l'original EN : <doc>.md → <doc>.en.md (contenu anglais préservé verbatim). Pour un README.md : README.md → README.en.md.
  2. Réécrire <doc>.md en français (traduction humaine assistée) — devient la source FR primaire.
  3. Préserver : structure markdown, blocs code, tables, liens (URLs inchangées), front-matter.
  4. Commit atomique par série (règle catalog-pr-hygiene HARD 3) : une PR = une série (ex. « traduit les READMEs EN des stratégies QC », « traduit Probas/PORT_PYTHON_PLAN.md »). Pas de composite cross-séries.
  5. Indexer la paire dans un translation_golden_set.json (source FR + source EN + chemin) pour réutilisation Phase 4.

Cette phase produit des fichiers *.en.md qui seront réconciliés avec la sortie du moteur en Phase 3 : si le moteur régénère un .en.md quasiment identique à la version humaine, c'est un signal de qualité ; un écart signale une zone à auditer.

Phase 1 — Connecteur Argumentum → CoursIA (4-6h)

scripts/translation/argumentum_bridge.py :

  • Wrapper Python autour du datasetupdater Argumentum
  • Validation env (sous-module présent, dépendances Argumentum chargées)
  • Endpoint unique translate_csv(input_csv_fr, target_langs) -> dict[lang, output_csv]
  • Gestion erreurs / retry / quota
  • Importation verbatim du datasetupdater : pas d'altération (cf principe paternité externe).

Phase 2 — Extracteur CSV (8-12h)

scripts/translation/notebook_to_csv.py :

  • Lit un .ipynb, parcourt les cells
  • Cellules markdown : extrait chaque paragraphe en ligne CSV
    • Préserve formules LaTeX $...$ et $$...$$ (placeholders __LATEX_0__, etc.)
    • Préserve liens markdown (texte traduit, URL conservée)
    • Préserve blocs code inline ` (placeholders)
  • Cellules code : extrait uniquement les commentaires # / // (les strings restent en français quand elles font partie de la pédagogie ; le code lui-même n'est jamais traduit)
  • Préserve cell_id pour réinjection ordonnée
  • Schema CSV (compatible Argumentum datasetupdater) :
notebook_path,cell_id,cell_type,paragraph_idx,placement_hint,source_lang,text_fr,placeholders_json

scripts/translation/markdown_to_csv.py :

  • Lit un .md, segmente par paragraphe
  • Préserve front-matter YAML, blocs code triple-backtick, tables markdown
  • Schema parallèle au notebook avec heading_path au lieu de cell_id

Phase 3 — Réinjecteur (8-12h)

scripts/translation/csv_to_notebook.py :

  • Reçoit (notebook_fr_source, csv_translated, target_lang)
  • Reconstruit xxx_<lang>.ipynb à partir du source FR, en remplaçant les textes français par leurs traductions
  • Réintroduit les placeholders LaTeX / code inline / liens
  • Conserve execution_count et outputs du source (cf règle C.2 — pas de re-exécution automatique des notebooks traduits)
  • Convention naming : <basename>_<lang>.ipynb

scripts/translation/csv_to_markdown.py :

  • Réinjection markdown préservant front-matter, code, tables
  • Convention : README.en.md, docs/architecture.en.md, etc.

Phase 4 — Pilote sur 1 série (6-8h)

Choisir une série compacte avec markdown riche. Candidats :

  • A : MyIA.AI.Notebooks/IIT/ (PyPhi, 4-6 notebooks, contenu théorique dense)
  • B : MyIA.AI.Notebooks/Probas/ (Infer.NET, markdown abondant)
  • C : MyIA.AI.Notebooks/SymbolicAI/Lean/ Lean-1 à Lean-3 (introduction Lean, audience internationale forte)

Pipeline complet sur la série pilote dans 2 langues (EN + ES). Validation manuelle de la qualité, ajustements du pipeline.

Arbitrages décidés en Phase 4 :

  • Naming : xxx_<lang>.ipynb à côté du source vs répertoires séparés notebooks/<lang>/xxx.ipynb
  • Re-exécution des notebooks traduits : oui / non / au cas par cas
  • Cellule sélecteur de langue dans le notebook ? Sinon README de série multilingue suffit

Phase 5 — Scale-up batch (16-24h walltime)

Driver scripts/translation/translate_repository.py :

  • Itère sur tout le périmètre (notebooks + markdown)
  • Parallélise par notebook (multi-thread CSV upload + multi-call datasetupdater)
  • Génère un translation_manifest.json avec entrées : source_path, target_lang, sha256_source, timestamp, argumentum_version, status
  • Gating obligatoire : revue user sur 5-10 notebooks aléatoires par langue avant publication

Phase 6 — Drift detection & maintenance (6-10h)

Quand un notebook FR source change, comment savoir quelles traductions retraduire ?

  • translation_manifest.json conserve sha256_source au moment de la traduction
  • scripts/translation/check_drift.py :
    • Compare sha256 actuels vs manifest
    • Liste les (source, lang) à retraduire
    • Mode --auto-retranslate pour batch
  • Hook pre-commit optionnel : warning (pas blocking) sur les notebooks FR modifiés sans retraduction associée

Phase 7 — Index langues & navigation (4-6h)

  • README racine : section "Languages / Langues / Idiomas / …" listant les langues disponibles
  • Top-level index.en.md, index.es.md, … pointant vers les README de série traduits
  • README de série en double : README.md (FR) + README.<lang>.md

Phase 8+ (hors scope initial)


Stratégie "fichiers précieux mis en avant" — Argumentum

Le datasetupdater Argumentum est un outil utilisateur (jsboige) précieux. Il doit être :

  1. Cité publiquement dans le README racine CoursIA :

    "Translations powered by Argumentum datasetupdater — multilingual CSV translation engine developed by jsboige (2024-2025)."

  2. Crédité dans le docstring de argumentum_bridge.py :

    """
    Bridge to Argumentum datasetupdater (jsboige, 2024-2025).
    Multilingual CSV translation engine originally developed for the
    Argumentum card game corpus.
    
    Source: https://github.com/jsboige/Argumentum
    Submodule path: <chemin>
    Bridge integration date: <YYYY-MM-DD>
    """
  3. Importé verbatim : pas d'altération du datasetupdater côté CoursIA. Toute adaptation va dans le bridge, jamais dans le sous-module.

  4. Documenté dans une page dédiée docs/translation-engine.md :

    • Description du pipeline CoursIA
    • Crédit moteur Argumentum
    • Liste des langues actives
    • FAQ retraduction / drift / contribution

Hall of Fame

Acteur Contribution Date
jsboige Argumentum + datasetupdater — moteur de traduction multilingue 2024-2025
Argumentum corpus Dataset originel ayant servi à éprouver le datasetupdater 2024-2025
Langues activées Héritées de la matrice Argumentum à la date d'exécution (cf dashboard Argumentum live) continu

Set confirmé Argumentum Data-Gate v0.9.0 (relevé dashboard Argumentum workspace 2026-05-28) : EN, FR, ES, AR, FA, ZH, RU, PT (8 langues, 4 datasets matures : Rules / Virtues / Scenarii / Fallacies). Backend gpt-5.5, garde-fou ~$8/PR, plafond ~$120/Phase. Si Argumentum v1.0 ajoute DE / IT / JA, CoursIA suit en cycle suivant — la matrice Argumentum reste la source de vérité.

Estimation

Phase h walltime ai-01 Notes
0 — Prérequis & inventaire 1-2h hors blocage #1271
0.5 — Défrichage manuel EN→FR 4-8h hors blocage #1271 ; ~30 docs pérennes, PRs atomiques par série ; produit les *.en.md + golden set
1 — Connecteur Argumentum 4-6h dépend complétion #1271
2 — Extracteur CSV 8-12h
3 — Réinjecteur 8-12h
4 — Pilote 1 série × 2 langues 6-8h arbitrages naming/re-exec
5 — Scale-up batch 16-24h partiellement automatique
6 — Drift detection 6-10h
7 — Index multilangue 4-6h
Total 53-80h 5-8 cycles dispatch

Risques & mitigation

Risque Mitigation
Commentaires français de cellules code traduits maladroitement (casse code) Ne traduire que # / // ; jamais les strings code ; tests sur 10 notebooks code-intensive avant scale-up
Outputs (graphiques, prints) restent en français dans les notebooks traduits Documenter explicitement : outputs = artefact d'exécution. Pour notebooks déterministes (math), option re-exécution post-traduction (Phase 5 sub-track)
Formules LaTeX altérées par le datasetupdater Placeholders __LATEX_N__ réinsérés post-traduction
Inflation racine repo (×N langues = +400 notebooks × ~7 langues ≈ 2800 fichiers) Évaluer en Phase 4 : répertoires docs/<lang>/, notebooks/<lang>/ si la pollution racine devient problématique
Drift sources FR non détecté translation_manifest.json + check_drift.py + hook optionnel
Coût datasetupdater (quota Argumentum) Mesurer sur série pilote ; négocier avec l'opérateur Argumentum (= user) pour le batch CoursIA
Notebooks étudiants polluent le périmètre Filtre explicite : seuls les notebooks MyIA.AI.Notebooks/ source (pas jsboige*/* forks étudiants)

Critères de complétion

  • Sources FR assainies (Phase 0.5) : les ~30 docs EN profonds pérennes sont traduits en FR (source primaire) avec leur original EN récupéré en <doc>.en.md ; translation_golden_set.json constitué
  • Golden set réutilisé (Phase 4) : la qualité du moteur Argumentum est auditée par comparaison avec le golden set Phase 0.5 (écart mesuré)
  • ≥1 série entière traduite et publiée (Phase 4 pilote)
  • Driver batch fonctionnel et reproductible (Phase 5)
  • README racine + ≥5 séries indicatives traduites dans ≥2 langues (Phase 5)
  • Drift detection opérationnelle (Phase 6)
  • Index multilangue navigable depuis README racine (Phase 7)
  • Hall of Fame Argumentum cité publiquement (README racine + docs/translation-engine.md)

Hors scope (initial)

  • Code Python/C# lui-même : pas de traduction du code, identifiers restent en source
  • Outputs notebooks : par défaut conservés du source FR (exception : Phase 5 sub-track re-exec)
  • Slides Marp / PPTX : Phase 8+
  • Notebooks étudiants (forks) : non concernés, restent en français source
  • Pull requests / issues GitHub : non traduits (méta-discussion projet en français)
  • CLAUDE.md / .claude/rules/ : non traduits (méta-instructions cluster, lecteur unique = agents francophones)

Voir aussi


🤖 Generated with Claude Code pour ai-01:CoursIA cycle 92, suite mandat user 2026-05-28.

Corrections vérifiées (2026-08-30 — tri ROO-1, réfutations Vibe)

  • Volumétrie : l'estimation « ~400 notebooks » (ligne inventaire) est réfutée — 1 181 notebooks source mesurés sur origin/main (SHA 68e7a663, git trees truncated:false, exclusions _output/_<lang>), cohérent avec le README (« 1 024 notebooks » au 17/08) et l'audit Vibe (1 011 le 29/08). Toute projection de coût/temps doit se recalculer sur ~1 200, pas 400.
  • Schéma CSV divergent de l'existant : le corpus translations/ (33 CSV, 804 notebooks couverts selon l'audit) utilise déjà notebook,cell_id,cell_type,src_lang,src_hash,text_fr,text_en,text_es,text_ar,text_fa,text_zh,text_ru,text_pt,hash_*,translate_policy — vérifié sur translations/genai/audio.csv (origin/main). Le schéma proposé dans cette issue (notebook_path,paragraph_idx,placeholders_json) n'existe nulle part dans le corpus et ignorerait 7 colonnes de langues + les colonnes hash_* de détection de changement. Toute implémentation doit partir du schéma existant.

Activity

  1. added
    enhancementNew feature or request
    priority-lowHEALTHY strategies to polish
    documentationImprovements or additions to documentation
    on May 28, 2026
  2. jsboige commented on Jun 12, 2026

    @jsboige
    Owner

    Enrichissement — ajout Phase 0.5 (défrichage manuel EN→FR)

    Suite mandat user 2026-06-12 (« commence par identifier et traduire en français de façon ad-hoc, non scriptée, les nombreux docs markdown profonds encore en anglais, en récupérant au passage les versions anglaises en README.en.md telles que visées par la résolution scriptée »).

    Changements apportés au body :

    Rationale courte : le datasetupdater Argumentum part des sources FR. Or ~30 docs markdown profonds sont encore en EN dans un dépôt FR-primaire (CLAUDE.md §E) — scan 2026-06-12. Si on laisse le moteur tourner sur ce mélange, il traduira de l'anglais vers les autres langues sur ces fichiers. Il faut donc assainir les sources FR avant la Phase 1, et cette étape ne dépend pas du sous-module Argumentum gelé.

    Bonus : la manœuvre pré-produit les *.en.md (le livrable de la Phase 3 scriptée) et constitue un golden set FR/EN humain pour auditer la qualité du moteur en Phase 4.

    Inventaire filtré (docs pérennes à traduire, hors audits/snapshots éphémères / harnais .claude / upstream .lake/packages) :

    • ~10 READMEs de stratégies QC (DualMomentum, PairsTrading, TrendFilteredMeanReversion, composites, Mamba, ML-Classification…)
    • Docs de fond : Probas/PORT_PYTHON_PLAN.md (718 mots), Probas/Infer/scripts/README.md, docs/reference/claude-code-config.md (300 mots)
    • READMEs Symbolic : GameTheory/cooperative_games_lean, social_choice_lean_peters, SymbolicAI/Lean/sensitivity_lean/NOTICE.md
    • Infra : scripts/{qc-mcp-lite,datasets}/README.md, docker-configurations/notebook-runner/README.md

    À confirmer par le user : convention naming README.en.md (point, alignée sur la Phase 3 existante) vs Readme_en.md (underscore du mandat). J'ai standardisé sur le point pour cohérence.

    Découpage : PRs atomiques par série (cf catalog-pr-hygiene HARD 3). N'exécute pas maintenant — backlog enrichment seul.

    🤖 po-2025 cycle, mandat user 2026-06-12.

  3. myia-ai-01 commented on Jun 21, 2026

    @myia-ai-01
    CollaboratorAuthor

    Phase 0.5 — décisions user 2026-06-21 + lancement

    User a réactivé la Phase 0.5 (« avant la traduction, faire en sorte qu'on ait tout en français »). Décisions arrêtées :

    • Séparateur naming = point : README.en.md (la note "underscore vs point" du body est tranchée → point, standard i18n, cohérent avec la Phase 3 scriptée). Notebooks restent xxx_en.ipynb.
    • Périmètre = pédagogique uniquement (~15) docs de série/sous-projet à nous (recensement filtré : 123 EN-dominants bruts → ~27 à nous → ~15 pédagogiques après exclusion scripts/infra). Hors scope confirmé : vendored foundry-lib/lib/**, data QC ESGF-2026/.../data/**, stubs QC projects/*, lakes externes, fork Z3.Linq.
    • Cadence = lane dédiée side-track (n'interrompt pas Lean profondeur / QC).

    Issue fille = #3870 (liste partitionnée Lean/QC + mécanique git mv → README.en.md + nouveau FR).

    Flux verrouillé : nouvelle règle .claude/rules/readme-french-first.md — tout contenu doc ajouté = FR, jamais "match the surrounding English" (cause racine du re-engendrement de contenu anglais via les Conclusions #2651). C'est le complément process : on arrête d'en créer pendant qu'on résorbe le stock.

    Phases 1+ (moteur Argumentum scripté) restent gated par #1271.

  4. 182 remaining items

  5. added a commit that references this issue on Oct 4, 2026
  6. myia-ai-01 commented on Oct 4, 2026

    @myia-ai-01
    CollaboratorAuthor

    Tranche « renommer avant de traduire » : mesure du 2026-10-05 — un blocage de norme avant tout renommage

    Pris en charge par la lane myia-ai-01:CoursIA-2 sur mandat coordinateur. Aucun renommage n'a ete pose : la mesure montre que la norme est contradictoire entre deux sources autoritatives, et qu'une partie de la tranche est deja couverte par une PR ouverte. Poser les noms dans cet etat serait un geste aveugle.

    Deux documents autoritatifs ne disent pas la meme chose

    Source Ce qu'elle dit du vocabulaire de noyau
    .claude/rules/notebook-accretion-numbering.md:15 — arbitrage du mainteneur du 2026-09-25 « -Python, -CSharp, -Lean, ou -Lean-Python pour un notebook Python qui pilote reellement Lean (sous-processus lake/lean, REPL, lecture d'un lake) »
    scripts/notebook_tools/kernel_suffix_canon.json (champ _canon, consomme par check_kernel_suffix_canon.py) « Casse canonique pour les suffixes de noyau : -CSharp et -Python. -Lean n'est PAS un suffixe de noyau dans ce depot (il marque le contenu ; le pendant Lean porte -Native) »

    Deux vocabulaires incompatibles pour la meme famille, et les deux vivent dans l'arbre :

    (aucun)       1001      Python   291      CSharp  101
    Csharp          31      Lean      30      Lean-Python  12      Native  11
    

    -Lean (30) et -Native (11) coexistent, alors que le canon du garde declare -Lean hors vocabulaire et -Native canonique — soit l'inverse du poids mesure. Une serie entiere porte les deux a quelques numeros d'ecart : Lean-16b-Conway-Game-of-Life-Lean.ipynb cotoie Lean-16d-Conway-Game-of-Life-Lean-Native.ipynb.

    Ce que le garde en fait, mesure sur l'arbre

    python scripts/notebook_tools/check_kernel_suffix_canon.py --scan-all --json : 1489 carnets examines, 7 constats — et ils se repartissent en trois classes qui ne se traitent pas pareil :

    1. 6 carnets Tweety (-Lean sur noyau python3) : deja couverts par la PR ouverte rename(#16231): Tweety etape 1 -- suffixe de noyau (11 notebooks) + referents (47 fichiers) #19150 (rename(#16231): Tweety etape 1 -- suffixe de noyau (11 notebooks) + referents (47 fichiers)). Le garde de collision L898 les ecarte — les renommer ici produirait la double-livraison que la garde existe pour empecher.
    2. Lean-16b-Conway-Game-of-Life-Lean.ipynb (noyau python3-lean, 9 appels lake / 26 lean / 5 repl dans le code) : c'est le cas central de la contradiction. Sous la regle §1 il devrait porter -Lean-Python (Python qui pilote Lean) ; sous le canon du garde, -Lean n'existe pas et l'attendu serait -Python — ce qui serait faux pour un carnet Lean.
    3. Workbook-Template-Python.ipynb (GenAI/SemanticKernel) : noyau .net-csharp avec #!connect jupyter --kernel-spec python3. Polyglotte assume : le suffixe decrit le contenu, le noyau est .NET. Aucun renommage n'a de sens ici — c'est le garde qui lit une seule des deux dimensions.

    Demande

    Arbitrage du vocabulaire avant la tranche, pas apres : -Lean (regle, signee) ou -Native (canon du garde) — et, si -Native l'emporte, la regle §1 doit etre amendee dans le meme geste, sinon chaque sweep futur rejouera ce blocage. Le reste de la tranche (casse Csharp/CSharp, numérotation) n'est pas concerne par ce point et reste prenable.

    Ce constat n'est pas un refus de travail : c'est la mesure qui evite de renommer 30 carnets sous une norme que deux sources autoritatives contredisent, alors que le renommage est precisement l'operation dont la memoire de traduction depend (#1650 : « tout renommage posterieur casse les cles dans chaque langue »).

  7. myia-ai-01 commented on Oct 4, 2026

    @myia-ai-01
    CollaboratorAuthor

    Arbitrage coordinateur sur le constat c.5985117439 (deux vocabulaires du suffixe de noyau) : -Lean est canonique.

    • La règle notebook-accretion-numbering.md §1 (arbitrage du mainteneur du 2026-09-25, commit af598aca40) est la source la plus récente. Elle dit que le suffixe nomme le noyau : -Python, -CSharp, -Lean (noyau Lean 4), -Lean-Python (noyau Python qui pilote réellement Lean). -Native n'y figure pas.
    • Le texte _canon de scripts/notebook_tools/kernel_suffix_canon.json (2026-09-12, retouché le 2026-09-24) est antérieur à cette règle : il est périmé. Il se réaligne, avec la docstring de check_kernel_suffix_canon.py, dans la PR de la tranche. C'est une dette d'outil, pas un changement de norme.
    • Dans la tranche, c'est le kernelspec de chaque carnet qui décide, pas son suffixe actuel :
      • -Lean-Native sous noyau Lean devient -Lean ;
      • un -Lean hérité sous noyau Python devient -Lean-Python s'il pilote lake, lean ou le REPL, et -Python sinon ;
      • aucune cible ne doit en écraser une autre.
    • Tweety reste hors tranche (rename(#16231): Tweety etape 1 -- suffixe de noyau (11 notebooks) + referents (47 fichiers) #19150).
  8. jsboige commented on Oct 4, 2026

    @jsboige
    Owner

    [CLAIMED] lane myia-po-2027:CoursIA -- paths: translations/genai/finetuning.csv, MyIA.AI.Notebooks/GenAI/FineTuning/FT-02-QLoRA-Quantization-Python_en.ipynb, scripts/tests/baseline_nb_nav_chain.json, scripts/translation/tests/test_check_translation_parity.py, scripts/translation/tests/test_demo_t3_t4_acceptance.py

    Grain: MED/notebook-python -- lane myia-po-2027:CoursIA -- prev: MED/refactor #19172

    Tranche FineTuning suivante de #1650 (même contrat que #18966/#18968) : couverture EN complète de FT-02-QLoRA-Quantization — remplir les text_en manquants (17 MISSING_LANG mesurés par check_translation_sync.py sur origin/main à d0103b5), rafraîchir les 2 lignes SRC_DRIFT puis les traduire, rendre FT-02-...-Python_en.ipynb via T4 --require-translated, mettre à jour les trois fichiers de garde (baseline nav chain, EXPECTED_PAIR_COUNT, acceptance T3/T4). FT-04 (7 SRC_DRIFT, extraction md absente) reste pour la tranche suivante.

  9. myia-ai-01 commented on Oct 4, 2026

    @myia-ai-01
    CollaboratorAuthor

    [BLOCKED] Tranche -Native / -Companion resorbes (series Lean) -- 6 PRs ouvertes touchent les memes chemins.

    Le renommage est prepare et mesure, mais il ne peut pas partir maintenant : le garde de claim rend BLOCKED sur le scope, et pas pour un detail de bord.

    Ce qui est pret. rename_notebooks.py --propose MyIA.AI.Notebooks/SymbolicAI/Lean rend 88 lignes : 46 RENOMMAGE, 20 A TRANCHER, 22 CONFORME. La sous-tranche « vocabulaire de noyau » (tout nom portant -Native ou -Companion en suffixe terminal) fait 17 carnets, tous resolus par le kernelspec :

    • -Native sous noyau Lean -> -Lean (dont deux doubles suffixes -Lean-Native qui perdent les deux) ;
    • -Companion terminal -> le suffixe de noyau du kernelspec (-Lean ou -Lean-Python).

    Dry-run passe, aucune collision de cible. Le dry-run liste aussi 48 referents a reecrire, dont translations/symbolicai-lean/symbolicai-lean.csv (407 occurrences), _quarto.yml (48), README.md de la serie (85), docs/curriculum/ia-symbolique.md (45) et les baselines.

    Pourquoi il ne part pas. check_lane_claim.py 1650 --paths ... rend BLOCKED : six PRs ouvertes d'autres lanes touchent ces chemins.

    PR Lane Surface en commun
    #19150 po-2024 _quarto.yml, docs/curriculum/ia-symbolique.md, formal_logic_lean/**, Lean-03b-... -- et c'est elle-meme une tranche de suffixe de noyau (11 carnets + 47 referents)
    #19151 po-2027 _quarto.yml, Lean-07b, Lean-08
    #19161 po-2026 grothendieck_lean/README.md et .en.md
    #19153 po-2023 _quarto.yml
    #19071 po-2023 _quarto.yml
    #18687 po-2026 _quarto.yml

    _quarto.yml porte la navigation de toute la serie : tout renommage Lean le reecrit, donc aucune sous-tranche plus etroite n'echappe a la collision. Le dry-run montre les deux operations (la mienne et #19150) reecrivant la meme surface partagee -- les lancer en parallele fabriquerait exactement la collision cross-lane que le protocole de claim existe pour eviter.

    Ce qui reste vrai et non bloque. La dette d'outil est prete et isolee : _canon de kernel_suffix_canon.json dit encore que « -Lean n'est PAS un suffixe de noyau (le pendant Lean porte -Native) », ce que l'arbitrage du 25/09 inverse. Verification faite : la docstring de check_kernel_suffix_canon.py est deja alignee (-Lean / -Lean-Python dans KERNEL_LANG_SUFFIXES, -Native en queue legacy) -- seule la ligne _canon du json est en retard. Sur ces deux chemins le claim rend CLEAR.

    Ce qu'il faut pour repartir : que _quarto.yml cesse d'etre touche par une PR ouverte (les cinq ci-dessus mergent ou rebasent), puis la tranche se rejoue en une commande. Le plan et la table sont rejouables a l'identique (--propose puis --mapping).

    Mesure du 2026-10-05, tete origin/main d0103b51a.

  10. jsboige commented on Oct 4, 2026

    @jsboige
    Owner

    [DELIVERED] lane myia-po-2027:CoursIA — PR #19175 (0ea6e0a6ca9e).

    Grain: MED/notebook-python -- lane myia-po-2027:CoursIA -- prev: MED/refactor #19172

    Tranche FT-02 (QLoRA-Quantization) livrée, même contrat que #18968 : T1 refresh 2 lignes drift, 20 text_en remplis + hash, rendu _en T4 complet (37/37 md traduits, 0 fallback), guards à jour (EXPECTED_PAIR_COUNT 8, baseline nav chain +1 orphan, check rc=0, parity 8 paires, pytest 39/39). check_translation_sync : FT-02 clean. Prochaine tranche identifiée : FT-04 (7 SRC_DRIFT, extraction md absente).

  11. added a commit that references this issue on Oct 4, 2026
  12. added 2 commits that reference this issue on Oct 5, 2026
  13. added 2 commits that reference this issue on Oct 5, 2026
  14. jsboige commented on Oct 9, 2026

    @jsboige
    Owner

    [CLAIMED] lane myia-po-2025:CoursIA -- declaration du compte de paires de traduction (EXPECTED_PAIR_COUNT 8 -> 9), rouge de base sur main depuis #19996

    paths: scripts/translation/tests/test_check_translation_parity.py

  15. added a commit that references this issue on Oct 9, 2026
  16. jsboige commented on Oct 12, 2026

    @jsboige
    Owner

    Grain: MED/notebook-python -- lane myia-po-2023:CoursIA -- prev: DEEP/lean #20439

    [CLAIMED] lane myia-po-2023:CoursIA -- paths: translations/genai/image.csv, MyIA.AI.Notebooks/GenAI/Image/01-Foundation/**, scripts/translation/tests/test_check_translation_parity.py, scripts/tests/baseline_nb_nav_chain.json -- tranche T3+T4 EN de la serie Image, sous-dossier 01-Foundation (carnets 01-1 a 01-5b, ~200 cellules md dans le CSV pivot) : remplissage text_en/hash_en + rendus _en + guards (EXPECTED_PAIR_COUNT, baseline nav chain). Suite de la sequence 4 de #1650, sous-grain de l'EPIC #4208 (tete de tapis c.1495, axe E debloque). Volume probablement coupe en 2-3 PR selon la fenetre.

  17. jsboige commented on Oct 12, 2026

    @jsboige
    Owner

    [DELIVERED] lane myia-po-2023:CoursIA — PR1 du chantier (tranche Image 01-Foundation, carnets 01-1 + 01-2) livrée : PR #20449.

    • 37 cellules md traduites EN (21 + 16), 2 rendus _en T4 --require-translated (0 fallback, 0 orphelin), guards à jour (EXPECTED_PAIR_COUNT 11, baseline nav chain +2 orphan_entry).
    • 3 réparations motivées en commits séparés : id conclusion sur la cellule sans id de 01-2 (invisibilité T1/T4), lien nav manquant 01-5 → 01-5b (rupture préexistante révélée par le dé-wrapping de la série), filtre extracteur _<lang> (non-idempotence du refresh T1 : jusqu'à +67 lignes miroir).
    • Tranches suivantes identifiées : 01-3 / 01-4 / 01-5 / 01-5b (lignes déjà resynchronisées dans le CSV par le T1 refresh de cette PR).
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

    documentationImprovements or additions to documentationenhancementNew feature or requestpriority-lowHEALTHY strategies to polish

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions