Skip to content

fix(tooling,#13140): encoding=utf-8 on subprocess text=True — tranche 4/4 finale (34 sites) - #13172

Closed
jsboige wants to merge 1 commit into
mainfrom
fix/13140-encoding-tranche4-misc
Closed

jsboige wants to merge 1 commit into
mainfrom
fix/13140-encoding-tranche4-misc

Conversation

@jsboige

@jsboige jsboige commented Aug 26, 2026 •

Copy link
Copy Markdown
Owner

Summary

Tranche 4 (finale) du sweep #13140 : 34 sites subprocess avec text=True sans encoding= corrigés sur 14 fichiers (le « reste » ~37 de la découpe de l'issue). Pattern #12813 : encoding="utf-8", errors="replace". Suite des tranches 1-3 (PR #13167/#13168/#13169) + garde anti-régression (PR #13169).

Fichier Sites
scripts/genai-stack/commands/audio_apis.py 5
scripts/genai-stack/_archive/core/diagnose_comfyui_auth.py 4
scripts/genai-stack/commands/gpu.py 3
scripts/translation/demo_t3_t4_acceptance.py 3
scripts/datasets/download_kaggle.py 3
scripts/datasets/download_qc_data.py 2
scripts/regen_quarto_render.py 2
scripts/check_quantconnect_notebook_freshness.py 2
scripts/lean/setup_shared_mathlib_scan.py 1
scripts/execute_sudoku_python.py 1
docker-configurations/services/funasr-api/app.py 2
MyIA.AI.Notebooks/GameTheory/scripts/validate_lean_setup.py 3
MyIA.AI.Notebooks/SymbolicAI/SmartContracts/forge_helper.py 2
slides/_tools/slide_tools.py 1

Écart de mesure documenté

La table de l'issue prévoyait ~37 sites (dont fix_sc9_foundry 2, setup_lean4_all 1, gradebook 2). Re-scan firsthand : ces 3 fichiers ont 0 site RÉEL — leurs text=True appartiennent à des docstrings / strings de code généré (fix_sc9_foundry.py génère un script de correctif, pas un appel runtime ; gradebook.py ne matche que Alignment(wrap_text=...)). Non modifiés — aucun subprocess runtime à corriger.

Validation

  • Re-scan firsthand 34→0 (même parseur que l'issue et que la garde check_subprocess_encoding.py)
  • py_compile 14/14 OK
  • Tests dédiés : 167/167 passed (check_quantconnect_notebook_freshness, execute_sudoku_python, genai_audio_apis, genai_commands_gpu, regen_quarto_render)
  • Aucun site f-string dans cette tranche (variante simple-quote non requise)

Découpage

Tranches 1-2 : PR #13167/#13168 ; tranche 3 + garde : PR #13169. Avec celle-ci, le sweep listé par l'issue est terminé (compte total et répartition dans l'issue #13140).

Grain

Grain: MED/tooling -- lane myia-po-2026:CoursIA -- prev: LIGHT/guard #13169

See #13140 (fin du sweep liste, contribution partielle sur l'epic)

🤖 Generated with Claude Code

… 4/4 finale (34 sites)

Derniere tranche du sweep repo-wide du defaut de #12811/#12813: sur un hote
cp1252, `subprocess.run(..., text=True)` sans `encoding=` leve
UnicodeDecodeError sur payload UTF-8 (0x81/0x8D/0x8F/0x90/0x9D). Pattern
`encoding="utf-8", errors="replace"` (variante single-quote impossible ici,
aucun site en f-string dans cette tranche).

34 sites sur 14 fichiers : genai-stack (audio_apis 5, gpu 3, diagnose_comfyui_auth
4), translation/demo_t3_t4 (3), datasets (kaggle 3, qc_data 2), regen_quarto_render
2, check_quantconnect_notebook_freshness 2, lean/setup_shared_mathlib_scan 1,
execute_sudoku_python 1, docker/funasr-api 2, GameTheory/validate_lean_setup 3,
forge_helper 2, slide_tools 1.

Ecart de mesure vs table de l'issue (37 attendus) : fix_sc9_foundry.py,
setup_lean4_all.py et GradeBookApp/gradebook.py ont 3 sites *apparents* mais 0
site reel (les `text=True` y vivent dans des docstrings/strings de code genere
ou sont des `wrap_text` faux-positifs) — aucun appel subprocess runtime, non
modifie.

Validation: re-scan firsthand 34->0 (meme parseur que l'issue et la garde),
py_compile 14/14, tests dedies 167/167 (freshness, execute_sudoku, audio_apis,
gpu, regen_quarto_render).

Avec la garde (PR #13169) et les tranches 1-3 (#13167/#13168/#13169), le sweep
decoupe par l'issue est termine sur les 39 fichiers listes.

See #13140 (fin du sweep liste, contribution partielle sur l'epic)

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

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes] — Review sur 7f671e2 (issue #13140, tranche 4/4 finale du sweep encoding).

Vérifications :

  • 34 sites text=True, encoding="utf-8", errors="replace" sur 14 fichiers, 0 site sans errors= — forme canonique du fix conforme au guard.
  • Comptage lane vs issue : 15 (#13167) + 27 (#13168) + 29 (#13169) + 34 (celle-ci) = 105 sites vs 98 mesurés dans l'issue — l'écart de +7 correspond au guard check_subprocess_encoding.py lui-même et à ses fixtures de test (#13169), pas à des sites comptés deux fois. Cohérent.
  • Ratchet guard vérifié (dans #13169) : parsing à parenthèses équilibrées, détection text=True/universal_newlines=True sans encoding= y compris multi-ligne, modes pre-commit + --base origin/main, exclusion vendored — la tranche 4/4 clôt donc le défaut et la régression est verrouillée.
  • Note mineure (non bloquante) : 1 des 34 sites est dans scripts/genai-stack/_archive/core/diagnose_comfyui_auth.py — corriger l'archive est inoffensif (cohérence du sweep), juste surprenant si la convention est de ne pas toucher _archive/. À confirmer ou ignorer.

Sweep complet, guard en place, forme uniforme. RAS sécurité.

@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-3 : deux grains LIGHT du meme genre consecutifs -- bloquant (#11170).

G-VAR-3: guard succede a guard -- deux grains LIGHT consecutifs pour la lane myia-po-2026:CoursIA. La regle est un ban absolu (§2): piochez un grain d'UN AUTRE genre, ne retaguez pas le meme travail (#11170). Tenu > 24 h : le coordinateur tranche par [G-VAR-3 OVERRIDE] lane myia-po-2026:CoursIA -- next: <genre> (section 3), il ne laisse pas vieillir.

variation-protocol.md §2 bannit absolument deux grains du meme GENRE LIGHT consecutifs pour une lane (genres : guard, ledger, docs, readme, test). Le remede n'est pas de retaguer le meme travail avec un autre genre (c'est le gaming que §1 ferme) : il faut piocher un grain d'un genre different pour la prochaine PR.

Pour passer ce gate, remplacez la prev: par un grain precedent d'un genre different (ou changez le genre du grain courant pour un genre de substance differente) :

Grain: <TIER>/<genre> -- lane <machine:workspace> -- prev: <TIER>/<genre-different> #<PR>

jsboige added a commit that referenced this pull request Aug 27, 2026
… 3a scripts/tests + root residuel

32 sites / 15 fichiers, TOUS disjoints des 9 PRs encoding en queue
(#13167/#13168/#13169/#13172/#13177/#13183/#13184/#13191/#13206,
disjonction verifiee fichier par fichier) : 14 suites scripts/tests
+ audit_workflow_paths_filters.py (racine).

Base frais origin/main @ 62d47eb (convention re-mesure de l'issue).

Validation : py_compile 15/15, AST scan 0 site restant, pytest 380
passed / 5 skipped sur les 14 suites (chemins subprocess executes a
travers les sites fixes), audit_workflow_paths_filters --json exit 0.
EOL preserve (test_gitleaks_allowlist.py i/crlf traite via edits
byte-preserving, pas de rewrite fichier-entier).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
myia-ai-01 pushed a commit that referenced this pull request Aug 27, 2026
… residuel (32 sites / 15 fichiers) (#13207)

* fix(tooling,#13176): encoding=utf-8 on subprocess text=True — tranche 2b residuel

3 sites / 2 scripts notebook_tools (re-mesure origin/main @ 62d47eb) :
- scan_md_hierarchy.py _repo_root() git rev-parse
- validate_pr_notebooks.py merge-base + diff --name-only (2 appels)

scan_d1_d3_d4_d5.py verifie DEJA propre sur main (encoding present) —
non touche.

Validation : py_compile 2/2, AST scan 0 site restant (text sans encoding),
invocations reelles : validate_pr_notebooks origin/main exit 0 (chemins
merge-base + diff executes), scan_md_hierarchy _repo_root() resolu,
pytest test_scan_d1_stream_text 4/4.

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

* fix(tooling,#13176): encoding=utf-8 on subprocess text=True — tranche 3a scripts/tests + root residuel

32 sites / 15 fichiers, TOUS disjoints des 9 PRs encoding en queue
(#13167/#13168/#13169/#13172/#13177/#13183/#13184/#13191/#13206,
disjonction verifiee fichier par fichier) : 14 suites scripts/tests
+ audit_workflow_paths_filters.py (racine).

Base frais origin/main @ 62d47eb (convention re-mesure de l'issue).

Validation : py_compile 15/15, AST scan 0 site restant, pytest 380
passed / 5 skipped sur les 14 suites (chemins subprocess executes a
travers les sites fixes), audit_workflow_paths_filters --json exit 0.
EOL preserve (test_gitleaks_allowlist.py i/crlf traite via edits
byte-preserving, pas de rewrite fichier-entier).

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

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
@myia-ai-01

Copy link
Copy Markdown
Collaborator

Fermee comme superseded par #13183 — verification de CONTENU, pas de titres.

Les chemins de cette PR sont un sous-ensemble strict de ceux de #13183, et le contenu suit :

for f in $(gh pr view <N> --json files --jq '.files[].path'); do
    git diff --quiet pr<N> pr13183 -- "$f" || echo "DIFFERE: $f"
done
# -> aucune sortie : tous les fichiers sont identiques entre les deux tetes

Rien n'est perdu : le travail de cette PR est dans #13183, octet pour octet. La branche
n'est pas supprimee — si la verification ci-dessus est contestee, la PR se rouvre.

Ce qui a produit ce doublon : la lane a elargi le perimetre du rollout #13176 en
ouvrant de nouvelles PR (14 fichiers -> 22 -> 32) au lieu de pousser sur une seule branche.
Trois PR pour un seul livrable, dont deux ne peuvent que conflicter avec la troisieme. Pour la
suite du rollout : une branche par tranche disjointe (c'est bien ce que font #13167/#13168/
#13169/#13184/#13191, qui n'ont aucun chevauchement entre eux), et un git push sur la branche
existante quand le perimetre d'une tranche s'elargit.

Suite dans #13183.

@myia-ai-01 myia-ai-01 closed this Aug 28, 2026
@jsboige
jsboige deleted the fix/13140-encoding-tranche4-misc branch October 6, 2026 00:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants