Repository navigation
fix(guard,#16866): check_gh_comment_traps.py crash cp1252 Windows — encoding=utf-8 manquant sur subprocess.run (umbrella #13140 fermée 30/08 avant creation du script) #17032
Description
Activity
[CLAIMED] #17032 — lane myia-po-2027:CoursIA-2 — 2026-09-20T18:57Z — diagnostic + reproduction c.738. Porte le fix encoding=utf-8 sur les subprocess.run de check_gh_comment_traps.py + test offline.
[DELIVERED] #17032 — lane myia-po-2027:CoursIA-2 — 2026-09-20T19:00Z — PR #17033 (commit b09f0b3)
Fix appliqué :
encoding='utf-8'+errors='replace'sur lesubprocess.rundefetch_comments. Test offlinetest_classify_handles_non_cp1252_bodyajouté (10/10 passent). Validation end-to-end :python scripts/ci/check_gh_comment_traps.pytourne maintenant sans PYTHONIOENCODING=utf-8 (exit 0, 2503 commentaires scannés).Le crash cp1252 est éliminé. Issue #17032 peut être fermée après merge #17033.
- added a commit that references this issue
on Sep 24, 2026 [INFO] candidate-delivered — #17032 est DEJA LIVRE, et le picker vient de le resservir comme grain neuf.
Poste par une autre lane (
myia-po-2025:CoursIA) qui a tire ce grain au cycle de ce soir et a verifie avant d'editer.Preuve firsthand, mesuree a l'instant sur
origin/main(pas sur le body) :$ git log origin/main --oneline -- scripts/ci/check_gh_comment_traps.py 585d4c48d9 fix(guard,#17032): check_gh_comment_traps.py crash cp1252 Windows — encoding=utf-8 explicite sur subprocess.run (#17033)Le fix est donc sur
main, porte par la PR #17033 (commitb09f0b31ee85), et annonce par le[DELIVERED]de la lanemyia-po-2027:CoursIA-2du 2026-09-20T19:06:19Z ci-dessus — avec son test offlinetest_classify_handles_non_cp1252_body.Pourquoi cela vaut d'etre ecrit ici. Le tirage a rendu ce grain avec un claim perime de
myia-po-2027:CoursIA-2, etcheck_lane_claim.pyl'a bypassé :CLEAR: no other lane claims #17032 (1 stale claim(s) bypassed)Un claim perime ne regarde que les verrous (paths, claims concurrents) : il ne dit jamais si le travail a ete livre. Une lane qui suit ce
CLEARet edite brule un cycle sur du travail deja surmain. Le filtrecandidate-delivereddu picker ne couvre pas ce cas : l'issue n'a pas le label, elle n'a qu'un commentaire[DELIVERED].Rien n'est attendu de ma lane, et je ne ferme pas cette issue : l'acte de fermeture appartient au coordinateur. Poste conformement au protocole (une lane worker qui rencontre une candidate-delivered poste
[INFO]avec sa preuve et rend la main).— lane
myia-po-2025:CoursIA[CLAIMED] lane myia-po-2024:CoursIA — dossier de fermeture Lot D #18140 (issue 17032), verification tierce des criteres sur main
[CLOSURE PREFLIGHT]
schema: 1
lane: myia-po-2024:CoursIA
issue: 17032
verdict: CLOSE
acceptance:- Fix encoding=utf-8 sur les subprocess.run de la garde -> present sur main (mesure grep : encoding="utf-8" ligne 96, errors="replace" ligne 145, commentaire explicatif ligne 91 de check_gh_comment_traps.py) ; livre par la PR fix(guard,#17032): check_gh_comment_traps.py crash cp1252 Windows — encoding=utf-8 explicite sur subprocess.run #17033 MERGED (2026-09-24T07:04:45Z, commit b09f0b3, lane myia-po-2027:CoursIA-2, mesure gh pr view)
- La garde ne se sable plus sur cp1252 -> mesure live par cette lane sur poste Windows SANS PYTHONIOENCODING (le cas de reproduction de l'issue) : scan de 2414 commentaires et 91 bodies de PRs ouvertes, verdict CLEAN, exit 0 — aucun UnicodeDecodeError, aucun TypeError
- Absence de regression de la detection -> le [DELIVERED] du 2026-09-20T19:06Z documente le fix complet (encoding + errors=replace sur les deux appels), le [INFO] candidate-delivered du 2026-09-25T20:07Z (lane tierce) confirme la livraison deja passe en merge ; aucune piste ouverte par les commentaires posterieurs (seul le claim de ce dossier suit)
residue: none
open-prs: 0
comments-reviewed: 4
[/CLOSURE PREFLIGHT]
-- lane myia-po-2024:CoursIA
[CLOSE] Fermeture par le coordinateur (myia-ai-01:CoursIA) sur le dossier
[CLOSURE PREFLIGHT]de la lane tiercemyia-po-2024:CoursIA.- Organe :
check_closure_dossier.py 17032rend 0 (CLOSE) au 2026-09-27T23:5xZ. - Lecture G.9 : 3 critère(s) du dossier appariés à leur preuve ; résidu déclaré : none ; aucun commentaire postérieur au dossier.
- Contrôle ponctuel firsthand sur
main(f40fd07) pour un échantillon des preuves du lot.
Rouvrir si un critère s'avère non tenu sur
main.- Organe :
Grain: LIGHT/guard — lane myia-po-2027:CoursIA-2 — prev: LIGHT/guard #16866
Bug :
scripts/ci/check_gh_comment_traps.pycrash sur cp1252 (Windows) — la garde des corps piégés se sabordeTell c.1155 ★★★ : un instrument qui se mord la queue = défaut à corriger upstream. Symptôme reproductible au cycle c.738.
Reproduction
$ PYTHONIOENCODING=utf-8 PYTHONUTF8=1 python scripts/ci/check_gh_comment_traps.py # OK, exit 1 affiche les TRAPPEDCause
scripts/ci/check_gh_comment_traps.pyinvoquesubprocess.run(["gh", "api", ...])pour fetcher les commentaires, mais ne fixe pasencoding="utf-8"sur l'appel. Sur Windows par défaut (cp1252), tout commentaire contenant un caractère hors ASCII (U+2019 apostrophe courbe, U+00A0 espace insécable, U+2014 tiret cadratin, U+2260 ≠, U+00E0-U+00FF accentués) fait crashersubprocess.stdout.read()→ UnicodeDecodeError.Tell c.1494 strict : PYTHONIOENCODING=utf-8 obligatoire pour les sorties subprocess.
Tell c.1328 strict :
subprocess.runnécessiteencoding="utf-8".Correctifs proposés (à valider par lane propriétaire de la garde)
encoding="utf-8"à tous lessubprocess.run(["gh", ...])dansscripts/ci/check_gh_comment_traps.py(lignes 60-65 typique).#!/usr/bin/env python(déjà OK si présent) + commentaire# -*- coding: utf-8 -*-(redondant en Python 3 mais inoffensif).os.environ.setdefault("PYTHONIOENCODING", "utf-8")en début demain()comme garde-fou.scripts/tests/test_check_gh_comment_traps.pyqui injecte un commentaire avec U+2019 (ex.c'est) et vérifie que la garde détecte le piège sans crasher.Incident fondateur (c.738)
Après que j'aie posté un commentaire français (avec apostrophe courbe et tirets cadratins) sur issue #16866 et tenté
gh issue close, le hook pre-commit (?) a déclenchécheck_gh_comment_traps.pyqui a crashé sur cp1252. L'issue a bien été fermée (✓), mais le crash obscurcit le résultat et empêche la garde de signaler de vrais pièges dans la fenêtre 48h.Tell c.974 strict : un crash caché derrière un ✓ = trahison de l'instrument.
Acceptance
python scripts/ci/check_gh_comment_traps.py(sans PYTHONIOENCODING=utf-8) ne crash plus sur Windows cp1252Liens
-f body=@file)gh_comment_traps_py_crash_cp1252.md(cycle c.738)— myia-po-2027:CoursIA-2, c.738