Skip to content

Fix(translations,#17636): 6 compteurs d'artefact figes retires de la couverture traduction - #23401

Open
jsboige wants to merge 2 commits into
mainfrom
fix/17636-translations-coverage-counts
Open

jsboige wants to merge 2 commits into
mainfrom
fix/17636-translations-coverage-counts

Conversation

@jsboige

@jsboige jsboige commented Oct 29, 2026 •

Copy link
Copy Markdown
Owner

Grain: LIGHT/docs — lane myia-po-2025:CoursIA — prev: MED/notebook-python #23320

Ce que cette PR fait

Retire 6 compteurs d'artefact figés de la prose de couverture traduction, dans 5 README, en gardant le prédicat. C'est le volet 2 de #17636, sur une tranche mesurée et non sur un balayage du stock.

La mesure qui fonde le geste

Les CSV de traduction ont été régénérés (mtime 29/10 19:26 pour gametheory, iit, probas-infer ; 26/10 15:38 pour probas-pymc, rl) et portent désormais bien plus d'enregistrements que la prose ne l'annonce. Rien ne remet cette prose à jour, et aucun organe ne le fera : le CSV est écrit par outil, le README à la main.

README prose affirme enregistrements du CSV notebooks de la série source (mesuré)
translations/gametheory/README.md 1886 cellules / 55 notebooks 2321 139
translations/iit/README.md 731/738 cellules 2660 109
translations/probas-infer/README.md 902 cellules / 16 073 lignes / 19 notebooks 1013 21
translations/probas-pymc/README.md 567 cellules / 19 notebooks 737 32
translations/rl/README.md 486/511 cellules 774 43

Le chiffre annoncé n'est donc celui ni du CSV, ni de la série : il date d'un run passé et a dérivé sans bruit.

Ce que je ne conclus pas. Ces lignes sont des récits au passé (« T1 — extraction LIVRÉ »). L'organe documente explicitement cet angle mort : un décompte figé dans un récit au passé est une preuve, et se garde. Je ne les déclare donc pas fausses en tant que témoignages. Ce qui est mesuré, c'est qu'elles ne décrivent plus l'artefact qu'elles désignent, et qu'un lecteur d'aujourd'hui les lit comme un état présent.

Les 6 gestes

Supprimer la mesure, garder le prédicat — doctrine #9377.

Fichier Retiré Conservé
gametheory « 1886 cellules … des 55 notebooks » extracteur déterministe byte-identique, exclusions _output/_agent
iit « 731/738 … (7 sans id stable) » le saut des cellules sans id nbformat stable, et sa raison
probas-infer « ~844 KB (16 073 lignes … 902 × 18) » la dépendance au nombre de cellules, le fichier fait foi
probas-infer « source des 19 notebooks » la référence à l'issue #5637 et le fait du renum
probas-pymc « 567 cellules … des 19 notebooks » mêmes prédicats que gametheory
rl « 486/511 … (25 sans id stable) » le saut des cellules sans id stable

La commande de ré-extraction est déjà citée dans chaque README : c'est elle, et le CSV, qui portent le nombre vivant.

Preuve

Organe relancé après le commit, depuis le worktree de la branche (un --root depuis le clone principal rend un faux vert : git y résout la plage dans le clone principal) :

$ python scripts/notebook_tools/check_prose_quantitative_claims.py --diff origin/main...HEAD --strict
[OK] aucun compteur quantitatif en prose.
rc=0

Diff : 5 files changed, 6 insertions(+), 6 deletions(-) — une ligne par geste, aucun reformatage.

Hors périmètre — et je le dis plutôt que de le faire

Les tables « Couverture » de ces mêmes README sont fausses pour la même raison : Notebooks source | **17** là où la série en porte 43. Je ne les corrige pas, pour deux raisons :

  1. l'organe ne les flague pas — il cherche nombre + nom, la table écrit nom | nombre ; les corriger ne ferait pas rougir le gate et ne relève donc pas de cette tranche ;
  2. §E interdit de remettre un total à jour à la main (fix(docs,#16904): audit README SemanticWeb — SW-13/14/15/16 absents, total 26→27, Python 14→15 #17029 revertée). Le bon correctif est un générateur qui dérive la table du CSV, pas une PR de prose.

C'est une décision de volet 2, pas une décision de lane : je la laisse au fil de #17636 plutôt que de la trancher ici.

Portée

Markdown seul, aucun .ipynb touché : aucune ré-exécution due (C.2 / H.3).

See #17636

🤖 Generated with Claude Code

Rider (commit 9fe84795c9) : recadrage du garde translation-guard qui bloquait la PR

Le check requis No hand-edited translation files on feature branch rougissait sur cette PR sur son propre livrable : le filtre ALL_CHANGED retenait translations/** entier, donc aussi les README manuscrits que la PR corrige. Mesuré sur origin/main : l'arbre translations/ porte 36 CSV dérivés et vingt-huit fichiers manuscrits (27 .md + translation_golden_set.json) — décompte de l'arbre entier (hors scope PR), pas une liste de fichiers de cette PR. grep -rln README scripts/translation/*.py ne trouve aucun générateur de README — la cible déclarée du garde (« sync CSVs, derived by T1/T3 ») est bien les CSV seuls.
Périmètre effectif de la PR : 6 fichiers, à savoir .github/workflows/translation-guard.yml et les 5 README (gametheory, iit, probas-infer, probas-pymc, rl).

Correctif : 'translations/**' → 'translations/**/*.csv' dans le filtre de fond. Le déclencheur on.paths reste large (herméticité #13196) ; un PR README-only déclenche puis passe « clean ».

Dry-run du filtre sur le diff réel de cette PR (preuve de garde avant geste) : git diff --name-only origin/main...HEAD -- 'translations/**/*.csv' → 0 CSV ; le même sur **/*.md → 5. Le garde passera vert à la nouvelle tête. Glob validé au préalable sur un commit CSV réel (203199ecb6) : CSV matchés, .md exclu.

Portée normative : aucune — ni durcissement ni élargissement ; le filtre est aligné sur la cible que le workflow lui-même déclare. La revue coordinateur s'applique (.github/).

…couverture traduction

Doctrine #9377 : supprimer la mesure, garder le predicat.

Les CSV de traduction ont ete regeneres (29/10 19:26 pour gametheory, iit,
probas-infer) et portent desormais 2321/2660/1013 enregistrements, tandis que
la prose annoncait encore 1886/731/902 -- sans que rien ne la remette a jour.

Ce qui part : le compte. Ce qui reste : la propriete falsifiable (extracteur
deterministe, exclusion _output/_agent, saut des cellules sans id nbformat
stable) et la commande de re-extraction deja citee dans chaque README.

Markdown seul : aucune cellule de code, aucune re-execution due (C.2/H.3).

See #17636

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@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.

@github-actions github-actions Bot added the variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) label Oct 29, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-po-2025:CoursIA a deja consomme son budget LIGHT du jour (axe genre G-VAR-2/3 (light-genre, quel que soit le tier declare) : #22979 (LIGHT/guard, merge a 2026-10-29T00:13:59Z), #22509 (MED/ledger, merge a 2026-10-29T00:14:09Z), #22505 (MED/docs, merge a 2026-10-29T11:01:49Z), #22992 (LIGHT/guard, merge a 2026-10-29T22:45:19Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

@github-actions github-actions Bot added variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory) variation-genre-mismatch declared genre != genre infere depuis les chemins du diff (#10020, advisory) labels Oct 29, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2025:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-10-29) :

  • TIER-INFLATION : declared LIGHT << effective LIGHT-genre (tally : declared=2 genre=4 cap=4)
  • GENRE-MISMATCH : declared genre != genre infere depuis les chemins du diff

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions github-actions Bot added the trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) label Oct 29, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Trivial-diff advisory (#15740, non bloquant).
genre docs dans la famille META (docs/guard/ledger/readme/test) + diff de 12 lignes changees (<= 100) + aucune exception ecrite dans le body : le litmus de la trivialite (une douzaine d'instances scannees a la suite) est credible. Le verdict est ADVISORY -- fournir une fournée ou citer une exception de la forme #15719 l'eteint.
La demande : une fournee (le geste pourrait comprendre ~10x plus d'instances), OU une exception ecrite dans le body de la forme « exception seulement residu final mesure » (#15719). Editer le body re-deroule cet organe et retire le label.

…ADME manuscrits

Le filtre ALL_CHANGED retenait 'translations/**' entier : 36 CSV derives
mais aussi 28 fichiers manuscrits (README.md de couverture, PERIMETER.md,
translation_golden_set.json) -- aucun generateur de README dans
scripts/translation/ (verifie). La PR #23401 (prose-counts sur les README
de couverture, #17636) declenchait donc le garde sur son propre livrable.

Recadrage : 'translations/**/*.csv'. Declencheur on.paths laisse large
(hermeticite), le step de fond ne retient plus que les CSV. Glob valide
sur un commit CSV reel (203199e) : CSV matches, .md exclu.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot removed variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory) variation-genre-mismatch declared genre != genre infere depuis les chemins du diff (#10020, advisory) labels Oct 30, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant