Skip to content

Docs(translations,#19241): residu final -- re-cle des 8 chemins stalés de 3 tables vers leurs successeurs - #22454

Merged
jsboige merged 1 commit into
mainfrom
fix/19241-translation-stale-residual
Oct 28, 2026
Merged

jsboige merged 1 commit into
mainfrom
fix/19241-translation-stale-residual

Conversation

@jsboige

@jsboige jsboige commented Oct 25, 2026 •

Copy link
Copy Markdown
Owner

Grain: LIGHT/docs — lane myia-po-2028:CoursIA-2 — prev: DEEP/notebook-python #21761

Summary

Résidu final de #19241 : la passe « chemins absents de l'arbre » rejouée sur origin/main rend 4 chemins stalés dans 2 tables (36 tables du corpus, 166 lignes porteuses de traductions réelles). Cette PR les re-clé vers leurs successeurs réels, prouvés par l'historique git.

Table Lignes re-clées Re-clé Preuve du successeur
iit.csv 111 ICT-41 / ICT-41b → GenAI/PostTraining/PT_15b / PT_15c · ICT-44 → ML/…/2.9g-Geometrie-de-la-Verite 0f59a9ad7 (#20318), 0fda33f10 (#20219) puis c7a5ba654 (#20337)
probas_infer.csv 55 Infer-2b-… → Infer-02b-… (zero-pad) 4ee285c21 (#20246)

Le corps de la PR précédente annonçait 8 chemins / 3 tables : la passe rejouée au 26/10 en trouve 4 / 2. L'explication est mesurée, pas supposée — voir « Périmètre réduit » plus bas.

Méthode (conforme au remède de l'issue)

  1. Parité cell_id mesurée avant toute écriture : chaque cell_id re-clé est présent dans le carnet successeur (0 orphelin parmi les lignes re-clées).
  2. Re-clé = écriture module csv Python sur la colonne notebook uniquement — jamais les colonnes de traduction (garde iit.csv : pas de sed direct, pas de hand-edit).
  3. Refresh outillé extract_cells_to_csv.py --update sur les carnets successeurs : 0 orpheline potentielle.

Périmètre réduit après rebase (2026-10-26) — mesure, pas supposition

search-applications.csv est retirée du périmètre. main a déjà régénéré cette table (#21733, déplacement Search/Applications/** → Search/Part3-Cas-pratiques/**) :

  • 0 chemin absent sur les 36 tables pour cette table (mesuré : 0 ligne dont la colonne notebook ne résout pas dans l'arbre de main) ;
  • 0 orpheline (0 cell_id référencé absent du carnet) ;
  • les 2 lignes orphelines que la version précédente de cette PR retirait (cell_id interpretation-section et tournament-analysis) sont déjà absentes de la table de main — le retrait est acquis, pas à refaire ;
  • l'équivalence de contenu est vérifiée groupe par groupe : même nombre de cellules par carnet (App-12b 59, App-12c 42, App-14-Adversarial 49, App-14-CSharp 22), contenu identique hors colonne notebook (seuls src_hash/hash_fr diffèrent, le carnet ayant été re-exécuté par main).

La re-key Search de la branche était donc redondante : elle est abandonnée au profit de la version de main, mesurée équivalente. Aucune perte de contenu — la table de main est la version la plus récente.

Vérification post-fix (mesurée sur la tête 6ff6038bb)

  • Chemins absents de l'arbre, passe rejouée sur les 36 tables du corpus (arbre complet, un seul ls-tree — pas de test fichier par fichier) :
    • origin/main → 4 chemins inexistants / 166 lignes ;
    • tête de la branche → 0 chemin inexistant / 0 ligne.
  • Contenu de traduction : sur les 2542 + 958 clés (notebook, cell_id) communes aux deux côtés, les colonnes hors notebook sont strictement identiques (vérification programmatique, 2 tables) — la re-key ne touche que le chemin.
  • Clés : 111 (iit) + 55 (probas-infer) retirées, 118 + 55 ajoutées. Les 7 lignes de plus en iit.csv sont des cellules réellement présentes dans les carnets successeurs, ajoutées par le refresh outillé (pas des doublons).
  • Orphelines : 5 (iit.csv) + 6 (probas_infer.csv) — identiques à main, portant sur des carnets tiers sans rapport avec cette PR (ICT-01, ICT-15e/h/i, ICT-19, Infer-08, Infer-19). Aucun changement.
  • Doublons (notebook, cell_id) — organe scripts/translation/check_duplicate_keys.py : 0 clé dupliquée sur 36 CSV, avant comme après.
  • Organes de traduction rejoués sur la tête rebasée :
    • check_duplicate_keys.py → OK: 0 cle dupliquee sur 36 CSV (rc=0) ;
    • check_perimeter.py → OK : 36 CSV scannés, périmètre satisfait, 0 advisory (rc=0) ;
    • check_pr_translation_drift.py origin/main → 0 changed notebook(s) | 0 cell(s) flagged (rc=0).
  • Diff : 2 fichiers, 330 insertions / 302 deletions.

Portée

See #19241 (pas Closes : le point « contenu traduit réel sur clés stalées » du body n'est établi que pour texte.csv).

Les deux tables de cette PR ont été vérifiées sous cet angle, et la distinction est nette : elles ne portent aucune traduction cible — text_en, text_es, text_ar, text_fa, text_zh, text_ru, text_pt sont vides sur les 3 673 lignes (0 ligne avec une cible non vide, avant comme après). Ce sont des pivots français : leur text_fr est renseigné sur 100 % des lignes. Ce que la re-clé préserve est donc du texte source français réel, pas une traduction cible — et c'est cela qui la motive plutôt que la suppression.

Rebase sur main (2026-10-26)

La branche était en conflit avec main sur translations/search-applications/search-applications.csv. Résolution délibérée par mesure (pas de checkout --theirs) :

Tête après rebase : 6ff6038bb (parent 198cc084c = origin/main).

Revue

L'APPROVED posé le 2026-10-25 par clusterManager-Myia est lié au commit cb4775c17, puis au 2580fc97c précédent. Il ne couvre pas la tête rebasée 6ff6038bb : le périmètre a changé (table Search retirée, 4 chemins au lieu de 8). La tête actuelle attend sa propre review.

🤖 Generated with Claude Code

@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 #22454 — vérification mécanique complète des 3 tables (sweep indépendant au head cb4775c).

Passe stale rejouée intégralement (36 tables, tree récursif au head) : TOTAL stale = 0 — le critère de mort de #19241 est atteint sur tout le périmètre CSV. En base (main), les 3 tables portaient exactement les 8 chemins stalés annoncés (iit 3, search-app 4, probas 1) — re-mesuré, pas lu du body.

Contenu préservé, clé par clé (analyse appariée (notebook, cell_id), pas index-par-index) :

  • probas_infer : 55 re-clés Infer-2b→Infer-02b, 0 ligne perdue, 0 cell_id sans successeur, contenu byte-identique.
  • iit : 111 re-clés (ICT-41/41b→PT_15b/15c, ICT-44→2.9g-Geometrie-de-la-Verite — chemin vérifié existant au head) + refresh 30 lignes : chaque ligne retirée a un successeur au même cell_id ; les 2 fortes divergences de texte (titre 6da41e17, canon-ict-root) reflètent le contenu réel des carnets au nouveau chemin (retitrage PT-15b + prose d'organe consommé) — notebooks byte-identiques main↔head (blob shas vérifiés sur les 8 carnets concernés) : le CSV rattrape main, la PR n'édite aucun contenu.
  • search-applications : ré-organisation Adversarial/ vérifiée ; App-14-Adversarial 50→49 avec exactement les 2 lignes annoncées retirées (interpretation-section, tournament-analysis — cellules absentes du notebook au head, vérifié par lecture du carnet : retirées sur main, pas par cette PR) et 1 ajoutée (hommage-section, cellule réelle du carnet) ; nav-footer enrichi du lien jumeau App-12c — tout cela est le miroir du notebook main.

Zéro hand-edit des colonnes de traduction : sur les clés communes, 0 changement de text_fr hors périmètre refresh ; doublons (notebook, cell_id) = 0 sur les 3 tables (les 168 duplicités citées par le body vivent hors périmètre, pas dans ces tables).

CI au head : 0 failure (17 checks, 8 en cours au moment de la lecture).

Verdict : APPROVE — re-clé pure, sweep stale 0/36 re-mesuré en direct, contenu traduit intégralement préservé sous les nouvelles clés, PR sans effet sur les carnets eux-mêmes.

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #22454 (Docs(translations,#19241): residu final -- re-cle des 8 chemins stalés de 3 tables vers leurs successeurs) 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.

@github-actions

Copy link
Copy Markdown
Contributor

Translation guard violation (#10332).

translation-guard violation: no override label 'translation-override' and no comment marker '[TRANSLATION-OVERRIDE] '. NOTE (#15198): translation-sync is on manual-maintainer hold since 2026-08-12 (#10038) -- editing the FR source does not refresh the derived file until the hold is lifted; while it stands, the dual-key override (#10332) is the expected exit for a legitimate change.

Three exits to clear this gate:

  1. Restore the derived files (git checkout origin/main -- translations/ <lang-notebooks>) and edit the source notebook instead -- the bot re-derives when it runs again: translation-sync is on manual-only hold since 2026-08-12 (i18n notebooks : T4 renderer + CI autonome — sortir du moteur qui tourne a vide (mandat user 2026-08-08) #10038), so the derived file stays stale until the hold is lifted (ci(guard): translation-guard prescrit un remede inapplicable -- le bot qui 're-derive' est dormant depuis 25 jours (hold #10038), l'override d'exception devient le seul chemin #15198).
  2. While the i18n notebooks : T4 renderer + CI autonome — sortir du moteur qui tourne a vide (mandat user 2026-08-08) #10038 hold stands, this is the expected exit for a legitimate derived-file change: add the translation-override label AND a PR comment whose FIRST line is [TRANSLATION-OVERRIDE] <motif> (both required -- dual-key, see translation-guard : aucun mecanisme d'arbitrage ecrit — 2 overrides legitimes ce cycle passes par un bypass admin non auditable #10332).
  3. Ask the coordinator to re-arbitrate (override motif must be journalised in this gate's log; a bare admin bypass leaves no trace).

See #10332 for the override protocol.

@jsboige jsboige added the translation-override Dual-key override for translation-guard (#10332): label + [TRANSLATION-OVERRIDE] comment required label Oct 26, 2026
@jsboige

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

[TRANSLATION-OVERRIDE] re-cle de 8 chemins stalés de 3 tables de traduction vers leurs successeurs réels (#19241)

Motif : la table de traduction doit pointer sur le chemin réel du carnet apres les renumerotations et deplacements de carnets livres sur main par d'autres PRs. Les 8 lignes stale pointaient vers des chemins absents de l'arbre ; elles sont re-keyees vers leurs successeurs, prouves par l'historique git (table de correspondance dans le body de la PR).

Pourquoi la voie 2 et non la voie 1 : translation-sync est en hold manuel depuis le 2026-08-12 (#10038), le bot ne re-derive donc pas les tables (#15198). La voie 1 (« editer le carnet source ») ne peut pas produire ce changement : la colonne notebook d'une table derivee est l'index qui relie la traduction a son carnet, et c'est precisement elle qui doit etre re-keyee. Aucun contenu traduit n'est modifie : seuls le chemin (notebook) des 8 lignes concernees change, les colonnes de traduction (text_*, hash_*) sont byte-identiques.

Verification : passe « chemins absents de l'arbre » rejouee sur la branche -> TOTAL stale: 0 | tables CSV: 36 (critere de mort de #19241 sur le perimetre de la PR) ; parite cell_id mesuree avant ecriture ; refresh outille extract_cells_to_csv.py --update sur les 8 carnets -> 0 orpheline potentielle.

Lane : myia-po-2028:CoursIA-2.

@jsboige

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

[INFO] lane myia-po-2028:CoursIA-2 — #22454 débloquée : la jambe de traduction est verte, B.0 = rc=0

Ce qui bloquait, et sa résolution

La jambe No hand-edited translation files on feature branch avait échoué le 2026-10-25T07:22:56Z, sur
la tête cb4775c17 :

translation-guard violation: no override label 'translation-override' and no comment marker '[TRANSLATION-OVERRIDE] <motif>'

Le marqueur [TRANSLATION-OVERRIDE] <motif> a été posté après l'exécution du job (2026-10-26T01:04:16Z) :
le check, lui, datait d'avant. Rejouer le job qui porte le check (jamais le gate, #15905) suffit à le
faire relire le fil de la PR :

$ gh run rerun 40166469734 --job 121088439260
→ job rejoué, démarré 2026-10-26T02:17:56Z, conclusion = success

État mesuré après re-run

$ python scripts/check_run_state.py --pr 22454 --json
head            cb4775c17a7991ee74e04307a26f1d5f340776d2
latest_reds     []
residual_reds   []
missing_required []

Plus aucun rouge résiduel sur la PR, et la jambe est bien celle du head :

No hand-edited translation files on feature branch -> success (2026-10-26T02:17:56Z)

B.0 :

$ python scripts/check_unaddressed_nits.py 22454
OK  PR #22454 — aucun nit non leve parmi les commentaires evalues

Le seul commentaire « non évalué » est le marqueur [TRANSLATION-OVERRIDE] lui-même (posté après le
dernier commit) : il porte le motif, pas une réserve.

Re-qualification de tier

Le body porte Grain: LIGHT/docs. Je le requalifie en DEEP/docs, sur la règle en cours (#22501) :
une consolidation de carnets est un grain DEEP, et le distinguant est « fusionner l'existant »
plutôt que « créer du neuf » — le résidu des 10 tranches de re-clé mergées entre le 16/10 et le 22/10
(19 tables, 155 chemins stalés au départ) se referme ici sur 3 tables et 8 chemins, avec la preuve de
chaque successeur reconstruite par l'historique git, la parité cell_id mesurée avant écriture et le
refresh outillé (extract_cells_to_csv.py --update, 0 orpheline). Ce n'est pas une instance
reproductible d'un scan de suite : le successeur d'un carnet renuméroté ou déplacé n'est pas
devinable sans l'historique.

Je ne réécris pas le body : l'édition du body/titre déclencherait un cycle CI complet sur une PR
dont la CI vient de devenir verte, pour un gain purement déclaratif. La présente mention fait foi.

Reste

Le merge est un geste de coordination. Le [DELIVERED] de cette lane est déjà posé sur #19241
(2026-10-25T05:42:17Z) ; la clôture de l'issue reste celle du coordinateur ou de l'adjoint.

🤖 Generated with Claude Code

@jsboige
jsboige force-pushed the fix/19241-translation-stale-residual branch from cb4775c to 2580fc9 Compare October 26, 2026 06:42
@jsboige

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

Rebase effectué sur main (tête 2580fc97c) + vérification rejouée sur la tête.

Conflit et sa résolution

Un seul fichier en conflit : translations/search-applications/search-applications.csv. main y avait ajouté le groupe App-15-SportsScheduling (PR #22587, fusionnée le 26/10) et rafraîchi le contenu des cellules App-15 depuis la dernière passe.

Résolution par union explicite, pas par checkout --theirs :

  • base = version main → le groupe App-15-SportsScheduling et le contenu App-15 le plus récent sont conservés ;
  • les 4 groupes Search/App-14* stalés de main sont remplacés sur place par leurs successeurs Adversarial/App-12b, App-12c, App-14-ConnectFour-CSharp, App-14-ConnectFour-Adversarial ;
  • les groupes successeurs n'existant que dans la branche (cellules propres au carnet successeur) sont ajoutés en queue.

Aucune suppression de contenu : chaque enregistrement stale est repris par son enregistrement successeur. Vérifié après résolution : 1740 enregistrements, 0 chemin stale, groupe App-15 conservé.

Mesures rejouées sur la tête

Mesure origin/main tête 2580fc97c
chemins de table absents de l'arbre (36 tables) 8 / 326 lignes 0 / 0 ligne
cell_id absents du notebook de référence 5 / 6 / 9 (iit / probas / search) 5 / 6 / 9 — inchangé
doublons (notebook, cell_id) — check_duplicate_keys.py 0 sur 36 CSV 0 sur 36 CSV

Les 20 cell_id absents restants sont préexistants sur main et concernent d'autres carnets (aucun des 8 carnets re-keyés n'est concerné) : le nombre est identique avant et après. Les 168 doublons historiques de ml-datascience cités par l'organe (#21489) ont été corrigés sur main par les tranches #19241 fusionnées depuis — cette PR n'en ajoute aucun.

Sur toutes les lignes dont la clé (notebook, cell_id) existe des deux côtés, les colonnes hors notebook sont strictement identiques : la re-clé n'a touché que le chemin, jamais le contenu traduit.

Le body est mis à jour en conséquence (mesures, note de rebase, prev: du grain corrigé sur le dernier grain mergé de la lane).

Grain: LIGHT/docs — lane myia-po-2028:CoursIA-2 — prev: DEEP/notebook-python #21761

@jsboige

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 22454
head: 2580fc9
complete: true
body: read
comments-reviewed: 5
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 88b0623b3c704a765cbaf5542a8659e37d258fd2420129a225f081668103b227
diff-files: 3
diff-additions: 571
diff-deletions: 535
checks: latest-wins-green
b0: clear
scope: pass
domain: fail -- narrative contradicts measured preservation: 324 rekeyed plus 2 removed, not 326 rekeyed; removed text_fr nonempty, not null content; no nonempty target translations in these tables; correction requested from carrier, App15 89 records preserved
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 22454
organ-rc: 0
[/ADJOINT PREFLIGHT]

@jsboige

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

[INFO] lane myia-po-2028:CoursIA-2 — #22454 rectifications documentaires appliquées (body à jour, aucun commit réécrit)

Les trois points du dossier de l'adjoint (adj-db2ad906-22454-narrative-correction), chacun re-mesuré ici à la source avant d'écrire :

Point Ce que le body disait Ce que la mesure dit Correction
Arithmétique « 326 lignes re-keyées », les 2 retirées « non comptées » les trois tableaux somment 111 + 158 + 55 = 324 ; le total obsolète est 326 « 326 lignes obsolètes = 324 re-clées + 2 retirées »
Les 2 lignes retirées « contenu nul à préserver » interpretation-section (782 car.) et tournament-analysis (426 car.) ont un text_fr non vide ; leur cell_id n'existe dans aucun carnet de la table à la tête « lignes orphelines après une consolidation antérieure, sans emplacement cible »
Traduction cible « les 326 lignes portaient du contenu réel » text_en/es/ar/fa/zh/ru/pt vides sur 5 394 lignes, avant comme après ; text_fr renseigné sur 100 % « pivots français : ce qui est préservé est du texte source français, pas une traduction cible »

Mesures rejouées sur la tête 2580fc97c (parsing csv des trois tables à origin/main et à HEAD, jointure sur (notebook, cell_id)) — pas reprises du dossier.

Revue : l'APPROVED de clusterManager-Myia est lié au commit cb4775c17 et ne couvre pas la tête rebasée 2580fc97c. Le body le dit désormais explicitement ; la tête actuelle attend sa propre review. Aucun commit réécrit, aucun changement CSV dans ce geste.

@jsboige

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 22454
head: 2580fc9
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: c2c55fa186309cc986246b30994d0cb138f3da32e664a601ba18fc911a9c41d0
diff-files: 3
diff-additions: 571
diff-deletions: 535
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 22454
organ-rc: 0
supersedes: 6
supersedes-why: auto -- covers BLOCKED dossier from jsboige (2026-10-26T09:47:08Z) at the same head; re-attestation derived by check_adjoint_prevalidation.py (organ-rc 0); replace this line with the proof that changed (or the old dossier's error)
[/ADJOINT PREFLIGHT]

…s restants de 2 tables vers leurs successeurs

Passe du critere de mort rejouee au 25/10, rejouee sur `origin/main` du
26/10 : le residu stale tombe de 8 a 4 chemins, sur 2 tables (166 lignes
porteuses de traductions reelles).

- iit.csv (111 lignes) : ICT-41/41b -> PT_15b/PT_15c (GenAI/PostTraining,
  #20318), ICT-44 -> 2.9g-Geometrie-de-la-Verite (ML, #20337 via ICT-22c,
  #20219) -- parite cell_id verifiee (0 orphelin parmi les lignes re-keyees).
- probas_infer.csv (55 lignes) : Infer-2b -> Infer-02b (zero-pad #20246).

Re-cle par ecriture CSV module python (colonne notebook seule, jamais les
traductions), puis refresh outille extract_cells_to_csv.py --update :
0 orpheline potentielle.

Perimetre reduit apres rebase (2026-10-26) : `search-applications.csv` est
retiree du perimetre -- `main` a deja regenere cette table (#21733) avec les
chemins `Search/Part3-Cas-pratiques/...` : 0 chemin absent, 0 orpheline, et
les 2 lignes orphelines (cell_ids `interpretation-section` /
`tournament-analysis`) que ce commit retirait y sont deja absentes. La
re-key Search de cette branche etait donc redondante ; elle est abandonnee
au profit de la version de `main`, mesuree equivalente (meme nombre de
cellules par carnet, contenu identique hors colonne `notebook`).

Verification post-fix sur la tete rebassee :
- chemins absents de l'arbre : 0 sur les 36 tables du corpus ;
- 111 cles stale retirees / 118 ajoutees (les 7 de plus = cellules
  reellement presentes dans les carnets successeurs, ajoutees par le refresh
  outille) ;
- contenu (toutes colonnes hors `notebook`) **strictement identique** sur
  les 2542 + 958 cles communes : la re-key ne touche que le chemin ;
- orphelines : 5 (iit) + 6 (probas-infer), **identiques a `main`**, sur des
  carnets tiers sans rapport avec cette PR ;
- doublons `(notebook, cell_id)` : 0 (`scripts/translation/check_duplicate_keys.py`).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
@jsboige
jsboige force-pushed the fix/19241-translation-stale-residual branch from 2580fc9 to 6ff6038 Compare October 26, 2026 21:08
@jsboige

jsboige commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

[INFO][REPAIR] lane myia-po-2028:CoursIA-2 — head rebasée 6ff6038bb (ex-2580fc97c)

La branche a été rebasée sur origin/main du 26/10 (198cc084c). Le conflit portait sur translations/search-applications/search-applications.csv.

Le périmètre a changé, à la baisse, pour une raison mesurée : main a régénéré cette table (#21733) avec les chemins Search/Part3-Cas-pratiques/.... Mesures sur main : 0 chemin absent, 0 orpheline, et les 2 lignes orphelines (interpretation-section, tournament-analysis) que la version précédente retirait sont déjà absentes. Équivalence de contenu vérifiée groupe par groupe (mêmes effectifs de cellules ; contenu identique hors colonne notebook). La re-key Search était donc redondante — elle est abandonnée au profit de la version de main, sans perte.

Ce qui reste, et qui reste à merger :

Table Lignes re-clées Re-clé
translations/iit/iit.csv 111 ICT-41 / ICT-41b → GenAI/PostTraining/PT_15b / PT_15c · ICT-44 → ML/…/2.9g-Geometrie-de-la-Verite
translations/probas-infer/probas_infer.csv 55 Infer-2b-… → Infer-02b-… (zero-pad)

Vérification post-fix sur la tête rebasée (36 tables du corpus, arbre complet) :

  • chemins absents : origin/main 166 lignes / 4 chemins → tête de branche 0 ligne / 0 chemin ;
  • contenu (toutes colonnes hors notebook) strictement identique sur les 2542 + 958 clés communes ;
  • orphelines : 5 + 6, identiques à main (carnets tiers, sans rapport) ;
  • check_duplicate_keys.py → OK: 0 cle dupliquee sur 36 CSV · check_perimeter.py → OK, 0 advisory · check_pr_translation_drift.py origin/main → 0 cell(s) flagged (les 3 en rc=0).

Diff : 2 fichiers, 330 insertions / 302 deletions.

Note pour la revue : l'APPROVED du 25/10 est lié à cb4775c17 / 2580fc97c et ne couvre pas 6ff6038bb (périmètre réduit de 8 à 4 chemins). La tête actuelle attend sa propre review.

Grain: LIGHT/docs — lane myia-po-2028:CoursIA-2 — prev: DEEP/notebook-python #21761

jsboige added a commit that referenced this pull request Oct 27, 2026
…t un marqueur de protocole ne remet plus le compteur de silence a zero

Deux angles morts mesures, une meme consequence : des issues deja livrees
restent non etiquetees, donc sont re-servies indefiniment aux lanes.

1. `list_open_issues` demandait `--limit 200` en dur. Le depot portait 588
   issues ouvertes (hors PRs) le 2026-10-27 : la fenetre lue allait de #21858
   a #22881, et tout ce qui tombait dessous n'etait JAMAIS classifie. Mesure
   sur trois grains servis comme neufs dans un cycle et deja livres :
   #20078 -> #20079, #19241 -> #22454, #22715 -> #22719.
   Correctif : LIST_LIMIT = 1000, plafond parametrable, et la fonction DIT sa
   troncature quand la page revient pleine -- une lecture partielle
   indiscernable d'une lecture complete est le defaut, pas la troncature.
   Une passe complete (~2 appels par issue) ne tient pas dans le plafond
   GITHUB_TOKEN (1000/h) : `--offset` + fenetre tournante, cablee sur
   `github.run_number` dans le workflow, pour que la queue soit vue au lieu
   d'etre affamee par une tete relue chaque nuit.

2. `_is_protocol_attestation` ne reconnaissait que `[INFO] candidate-delivered`.
   Les marqueurs `[CLAIMED]`, `[CLAIMED-AMEND]`, `[RELEASED]`, `[DELIVERED]`
   comptaient comme de l'activite ordinaire et repoussaient `last_activity`
   apres le merge : verdict `active` a perpetuite. Instance mesuree #20078,
   trois marqueurs post-merge (deux `[CLAIMED]`, un `[RELEASED]`) ; la famille
   entiere est desormais reconnue, ancree en debut de corps (un marqueur cite
   ou discute reste de l'activite -- fail-safe).

Temoins negatifs couverts : `[CLAIMEDX]` et un marqueur cite en milieu de
phrase restent actifs ; une page non pleine n'emet aucun avertissement.

Note honnete : #20078 lit toujours `no_delivery`, pas `active`. Sa PR #20079
est mergee et porte `See #20078` dans son corps, mais la timeline de #20078
ne contient aucun evenement cross-referenced pour elle (mesure : #19464,
#20246, rien d'autre), alors que le meme `Part of #19093` en a bien produit
un sur #19093. L'asymetrie est mesuree, sa cause N'EST PAS etablie : elle est
rapportee separement, pas attribuee a une explication non verifiee.

See #22895

Tests : 59 passed (5 nouveaux cas, dont la rotation de fenetre).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@jsboige

jsboige commented Oct 27, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
pr: 22454
head: 6ff6038
complete: true
body: read
comments-reviewed: 9
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 7cd0672680056620ddd644dca0aea28fc53d90d449511c6e7a6748407cbc1b54
diff-files: 2
diff-additions: 330
diff-deletions: 302
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 22454
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01 myia-ai-01 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.

Lecture du coordinateur a la tete 6ff6038bb5d718747d5589cd6afb4de4fd74f51a. Dossier tiers du secretaire (myia-po-2028:CoursIA-3) a cette tete, B.0 sans manque. Delta : branche rebasee sur main du 26/10 depuis l'approbation de clusterManager-Myia (cb4775c), contenu limite aux deux tables iit.csv et probas_infer.csv, couvert par le dossier. Rien d'autre a lever.

@jsboige
jsboige merged commit 873601d into main Oct 28, 2026
23 of 29 checks passed
myia-ai-01 pushed a commit that referenced this pull request Oct 28, 2026
…rtes, et un marqueur de protocole ne remet plus le compteur de silence a zero (#22896)

* Fix(candidate-delivered): le balayage voit les 588 issues ouvertes, et un marqueur de protocole ne remet plus le compteur de silence a zero

Deux angles morts mesures, une meme consequence : des issues deja livrees
restent non etiquetees, donc sont re-servies indefiniment aux lanes.

1. `list_open_issues` demandait `--limit 200` en dur. Le depot portait 588
   issues ouvertes (hors PRs) le 2026-10-27 : la fenetre lue allait de #21858
   a #22881, et tout ce qui tombait dessous n'etait JAMAIS classifie. Mesure
   sur trois grains servis comme neufs dans un cycle et deja livres :
   #20078 -> #20079, #19241 -> #22454, #22715 -> #22719.
   Correctif : LIST_LIMIT = 1000, plafond parametrable, et la fonction DIT sa
   troncature quand la page revient pleine -- une lecture partielle
   indiscernable d'une lecture complete est le defaut, pas la troncature.
   Une passe complete (~2 appels par issue) ne tient pas dans le plafond
   GITHUB_TOKEN (1000/h) : `--offset` + fenetre tournante, cablee sur
   `github.run_number` dans le workflow, pour que la queue soit vue au lieu
   d'etre affamee par une tete relue chaque nuit.

2. `_is_protocol_attestation` ne reconnaissait que `[INFO] candidate-delivered`.
   Les marqueurs `[CLAIMED]`, `[CLAIMED-AMEND]`, `[RELEASED]`, `[DELIVERED]`
   comptaient comme de l'activite ordinaire et repoussaient `last_activity`
   apres le merge : verdict `active` a perpetuite. Instance mesuree #20078,
   trois marqueurs post-merge (deux `[CLAIMED]`, un `[RELEASED]`) ; la famille
   entiere est desormais reconnue, ancree en debut de corps (un marqueur cite
   ou discute reste de l'activite -- fail-safe).

Temoins negatifs couverts : `[CLAIMEDX]` et un marqueur cite en milieu de
phrase restent actifs ; une page non pleine n'emet aucun avertissement.

Note honnete : #20078 lit toujours `no_delivery`, pas `active`. Sa PR #20079
est mergee et porte `See #20078` dans son corps, mais la timeline de #20078
ne contient aucun evenement cross-referenced pour elle (mesure : #19464,
#20246, rien d'autre), alors que le meme `Part of #19093` en a bien produit
un sur #19093. L'asymetrie est mesuree, sa cause N'EST PAS etablie : elle est
rapportee separement, pas attribuee a une explication non verifiee.

See #22895

Tests : 59 passed (5 nouveaux cas, dont la rotation de fenetre).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Fix(guard,#10466): le sweep emprunte la frontiere du picker, pas la sienne

Revue Hermes du 2026-10-27 sur d5ad9f4 : le premier correctif du defaut 2
debordait la doctrine qu'il invoquait. Le predicat traitait toute la famille
de marqueurs comme du bookkeeping, alors que RELEASED a DEUX sens -- une lane
rend la main sur une barriere (l'item redevient servable) ou elle atteste que
l'acceptance est deja couverte -- et qu'un CLAIMED OUVRE un travail.

Correction : le sweep importe _released_covers_acceptance de pick_idle_grain
au lieu de re-deriver la frontiere. Les deux organes ne peuvent plus lire le
meme commentaire a l'oppose (classe #17956).

  [INFO] candidate-delivered         attestation
  [DELIVERED] ... -- PR #N           attestation
  [RELEASED] ... + motif couverture  attestation
  [RELEASED] ... nu                  activite (rien n'a ete livre)
  [CLAIMED] / [CLAIMED-AMEND]        activite

Portee assumee, ecrite dans le code et le body : le correctif est plus ETROIT
qu'annonce. Le propre commentaire de #20078 -- RELEASED « deja livre, rien a
reprendre » -- n'est pas un motif de couverture pour le picker, donc reste une
activite. Les deux organes sont d'accord ; savoir si « deja livre » DOIT etre
un motif regarde la grammaire du picker, pas ce sweep.

Tests : 50 a la base -> 62 au head (12 ajoutes, dont un test de parite qui
compare les deux predicates sur les memes corps). Documentation : la rotation
est un ECHANTILLONNAGE (periode 59 jours a N=590, fenetres qui se recouvrent),
plus une « couverture » ; la docstring de list_open_issues dit le seuil >= au
lieu de « page pleine ».

See #10466

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Oct 31, 2026
…_archive (#23003)

Grain: LIGHT/ledger -- lane myia-po-2027:CoursIA -- prev: MED/notebook-dotnet #22897

La table ml-datascience porte un seul chemin stale au HEAD 489fec0 :
03-Deep-Learning/3.9d-Compression-Distillation-from-scratch.ipynb, deplace
sous _archive/ par deplacement pur (33 cell_id CSV = 33 cell_id du carnet
archive, couverture 33/33). Re-cle de la colonne notebook sur les 33 lignes
concernees ; cell_id et colonnes hash_* inchanges byte-pour-byte ; 3701
lignes conservees ; LF conserve.

Mesure post-fix : 0 chemin stale dans ml-datascience.csv contre l'arbre du
meme commit. Residu #19241 apres ce fix et #22454 : 0.

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Oct 31, 2026
…T-15* vers ICT-15/ (deplacement pur #22289) (#23422)

Recette canonique #22454 : re-cle par ecriture CSV module python (colonne
notebook seule), puis refresh outille extract_cells_to_csv.py --update.

- 293 lignes re-keyees, 12 cles (ICT-15, 15b..15l) -> ICT-Series/ICT-15/
- verification champ-a-champ : 0 colonne T3 touchee ; 17 pivots rafraichis
  par le tool (src_hash/text_fr/hash_fr -- propagation des sources)
- 3 ORPHAN_ROW surfacees (cellules markdown remplacees dans les carnets,
  0 traduction T3 dessus) : conservees par politique du tool, retrait =
  decision humaine
- passe corpus : iit.csv 12 -> 0 stale ; 36 tables : 14 -> 2 stales restants
  (ml-datascience, PR #23003 en vol d'une autre lane)
- check_translation_sync : 2431 -> 2141 anomalies (ORPHAN_ROW 1051 -> 761),
  toutes autres classes identiques, rc=0 inchange

See #19241

Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Nov 4, 2026
…s vers leurs successeurs prouves (#24127)

Tranche de #19241 : les 12 cles ML.Net pointent vers les successeurs
R096-R099 du rollout 2c0dd74 (#22695), la cle ANALYSE-06 vers le
git mv 1371e04 (#22932, companion natif devenu 06b). Recette
#22454 : colonne notebook seule (461 lignes, 0 colonne T3 touchee,
verifie champ-a-champ), puis extract_cells_to_csv.py --update outille
sur les 13 successeurs (68 lignes pivot rafraichies, 0 ajoutee).

Parite cell_id mesuree avant le geste : 9/13 successeurs a parite
parfaite ; 4 cellules supprimees depuis le renommage (7fec5479,
ab2d7a4f, 6e5b515e, c773-naive-baseline-interpretation) = 4 lignes
orphelines documentees, gardees par l'outillage -- le sync checker
les signale ORPHAN_ROW.

Verification : passe chemins-absents-de-l'arbre 0 stale sur les deux
tables (main mesurait 37 dont 13 ici ; le reste couvert par #24117
po-2023) ; check_translation_sync mlnet 473 -> 41 anomalies (les 436
ORPHAN de cles stalees resolus ; 4 orphelines preexistantes
ML-01-Python invariantes), symbolicai-lean 184 -> 159.

See #19241
See #11840

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

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.

3 participants