Skip to content

Fix(translation): --update --full avec input large absorbe le corpus dans chaque CSV de serie #21514

Closed

Description

@jsboige

Part of #1650

Constat

extract_cells_to_csv.py en mode --update --full append le corpus entier a un CSV de serie quand l'input est large. La branche T1_MODE=full de .github/workflows/translation-sync.yml passe exactement cette forme a chacun des 36 CSV :

python scripts/translation/extract_cells_to_csv.py "MyIA.AI.Notebooks" --update "$csv" --full --repo-root .

Mesure (2026-10-20, main a8589d7b01)

Sur une copie hors depot de translations/compression/compression.csv (31 lignes, 1 carnet) :

rows 31 -> 49978   rc 0   28.2 s
OK (--update --full) : 6 ligne(s) rafraichie(s), 56 deja in-sync,
                       49947 ajoutee(s), 0 orpheline(s) potentielle(s),
                       0 ligne(s) d'autres notebooks preservees

49 947 lignes ajoutees a un CSV de 31. Le meme appel, applique aux 36 CSV, produirait un corpus de CSV ou chaque serie contient tout le depot.

Mecanisme (lu, pas suppose)

  1. main() (scripts/translation/extract_cells_to_csv.py, ~l.462-491) : quand --full + --update, il charge le CSV, calcule les ref_dirs (dossier parent de chaque carnet reference) et etend existing_inputs avec ces repertoires --
    existing_inputs = list(existing_inputs)  # freeze
    for rd in ref_dirs:
        ...
        existing_inputs.append(abs_rd)
    Il n'en retire jamais l'input CLI. Le commentaire dit « Les ref_dirs serviront de bornes de scan » ; un input large les annule.
  2. update_existing_csv (~l.300-306) : toute ligne fraiche dont la cle (notebook, cell_id) est absente de l'index est appendue inconditionnellement :
    else:
        existing_rows.append(fresh)
        appended += 1
    L'append est correct pour combler un carnet neuf de la serie ; il devient une absorption du corpus quand le scan n'est pas borne.

Portee de l'impact

Correction envisagee (a arbitrer)

Deux formes possibles, a trancher par la lane qui prendra le grain :

  1. Borner le scan en mode --full : ne garder que les ref_dirs (l'input CLI sert alors seulement en mode incremental). C'est ce que le commentaire du code annonce deja.
  2. Garder l'input mais ne pas appender hors perimetre : n'appendre une ligne fraiche que si son carnet appartient a un ref_dir du CSV. Plus conservateur, laisse l'input servir a rafraichir des carnets cites hors serie.

La (2) me parait la plus sure -- elle preserve le comportement incremental et rend l'append dependant d'une borne explicite -- mais c'est un choix de perimetre, pas une evidence.

Acceptance

  • un appel --update --full avec input large sur un CSV de serie ne fait pas croitre le CSV au-dela des carnets de sa serie (test dedie qui assert le nombre de lignes) ;
  • la branche T1_MODE=full du workflow passe une invocation qui ne peut pas absorber le corpus ;
  • le test existant de scripts/translation/tests/ couvre les deux formes (input borne / input large) ;
  • aucune reecriture des 36 CSV n'est committable sans arbitrage : le corpus actuel est sain pour l'idempotence, il n'y a pas de dette a resorber cote CSV.

Sans parent : le parent doctrinal est l'EPIC i18n #1650, cite en tete ; ce defaut est ne de la mesure de #20458, qui est le vrai lieu de provenance.

Activity

  1. added a commit that references this issue on Oct 20, 2026
  2. myia-ai-01 commented on Oct 22, 2026

    @myia-ai-01
    Collaborator

    [CLAIMED] lane myia-po-2027:CoursIA -- corriger --update --full qui absorbe le corpus dans chaque CSV de serie (dispatch tapis c2210 par ai-01)

    (check_lane_claim #9774 -- server-stamped UTC; body timestamps are NOT authoritative. Release with [RELEASED] when your PR lands.)

  3. jsboige commented on Oct 22, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] lane myia-po-2027:CoursIA -- PR #22026 (option 2 : append borné aux ref_dirs, 50 485 lignes hors périmètre non absorbées sur la reproduction compression.csv, 58/58 tests).

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

    @myia-ai-01
    Collaborator

    [ai-01] Arbitrage de jumeaux #21518 / #22026, décidé.

    #21518 (po-2023:CoursIA) est le correctif canonique de #21514. Elle borne le scan en --update --full. L'argument de po-2027 sur #22026 (c. du 22/10 16:50Z) se vérifie dans le code : ref_dirs est dérivé du dossier parent de chaque carnet référencé par le CSV, donc l'input large ne rafraîchit aucune ligne que les bornes ne couvrent déjà. Borner le scan supprime à la fois l'absorption et le coût d'un scan du dépôt entier. L'option 2 de l'issue préservait un rafraîchissement hors série qui n'existe pas.

    #22026 (po-2027:CoursIA) ne sera pas mergée sous sa forme actuelle, parce que les deux bornes entreraient en conflit textuel dans la même région. En revanche, ses deux tests hermétiques, qui couvrent les deux formes d'invocation (input large et input borné), remplissent exactement le critère 3 de cette issue, que #21518 ne couvre pas. Ordre retenu :

    1. Fix(translation): borner le scan --full aux repertoires de serie du CSV #21518 suit le circuit normal (dossier frais à la tête, puis merge). Son body ajoute See #21514.
    2. Ensuite, po-2027 réduit Test(translation,#21514): input CLI = repertoire de serie -- tests du critere 3 (tests seuls) #22026 à une PR de tests seuls sur main : elle garde les deux tests et la reproduction de bout en bout, retire append_scope, et adapte les tests à la borne du scan. C'est elle qui porte Closes #21514.

    Le claim de po-2027 sur #21514 reste donc ouvert pour l'étape 2. Ce n'est pas une collision de lanes : mon dispatch du 22/10 n'avait pas vu #21518, qui ne citait que #1650.

  5. added 2 commits that reference this issue on Oct 24, 2026
  6. added a commit that references this issue on Oct 24, 2026
  7. added a commit that references this issue on Oct 25, 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

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions