Repository navigation
test(prepare-pr): pin utf-8 on 4 subprocess calls - #27142
Conversation
Pin UTF-8 on the text-mode subprocess call(s) in test/test_prepare_pr_local_review.py and drop the file's row from .github/subprocess-encoding-baseline.txt, so the subprocess-encoding gate stops tolerating it.
First Principles Review (Opus 5.5) — ⏭️ skippedRevision |
UX Review (Opus 5.5) — ⏭️ skippedRevision |
Design Review (Opus 5.5) — ✅ PASSDesign-level review of Design-Verdict: PASS Nothing to check. This is a test-only encoding pin that matches the earlier baseline burn-down PRs and removes no capability. [DESIGN-REVIEWED] a78fbbc Description read[DESCRIPTION-READ] 5033189eaa2d20d84428c41b478774a955eda8b40a137e8e14e21d4d98c98034 That sha256 names everything this verdict read: the PR description, plus the 1 evidence file(s) the workflow collected from it and handed this review. It covers that evidence because the media strip replaces every attachment URL with the same placeholder, so an edit swapping one attachment for another would leave the description's captured text identical while what this review judged changed. Recompute it with |
GPT 6.1 Review — ✅ no blocking findingsGPT 6.1 completed its review of This comment is updated in place on each push. Review detailsNo findings. False positive or not applicable? A repository writer can comment: |
Opus 5.5 Review — ✅ no blocking findingsReviewed Verdict parsed from the review's SHA-scoped output markers for commit False positive or not applicable? A repository writer can comment: |
KiroCrewCaptain
left a comment
There was a problem hiding this comment.
Tier 1 auto-approve: test (2 files). Criteria: no conflict, no requested changes, security path denylist clean, design-doc gate clean, security checklist all-NO, no reviewer-lane findings, readiness signal fresh for this head SHA, declared category matches the diff. Category: test-only change: pins utf-8 on four test subprocess calls, and drops the file from the subprocess-encoding baseline.
Problem / Motivation
Goal: A text-mode subprocess call in 1 file decodes its child's output as UTF-8 on every platform instead of the locale's code page.
The subprocess-encoding gate counts, per file, the sites the repo still tolerates. This PR retires:
4 test/test_prepare_pr_local_review.py.Why it matters
Without an explicit encoding,
subprocess.run(..., text=True)decodes with the locale code page, which on Windows is not UTF-8: non-ASCII output becomes mojibake or raisesUnicodeDecodeError(#5249). The repo lists every such call per file in.github/subprocess-encoding-baseline.txtand the gate lets each count only shrink.Not a goal
What changed (motivation → approach → change)
Each call below now passes
encoding="utf-8"beside itstext=True, and the file's baseline line is removed. A call whose child is Python (sys.executable) also starts it with-X utf8, so the child writes UTF-8 on every platform and the pinned decoder matches it; without UTF-8 mode, a Python child on Windows writes its console code page.test/test_prepare_pr_local_review.py:121: therun(...)call in_gittest/test_prepare_pr_local_review.py:743: therun(...)call intest_cli_exits_40_on_a_contract_that_escapes_the_repotest/test_prepare_pr_local_review.py:1624: therun(...)call intest_cli_exits_40_when_the_prompt_assembly_is_gonetest/test_prepare_pr_local_review.py:1721: therun(...)call intest_cli_json_summary_is_machine_readable.github/subprocess-encoding-baseline.txt: removed4 test/test_prepare_pr_local_review.py.Backwards compatibility
Compatible: test-only change
Removes nothing: a baseline entry is a tolerance the gate stops needing, not a capability.
Tests
RATCHET_SCOPE_WHOLE_TREE=1 python3 scripts/check_subprocess_encoding.pyexits 1:::error file=test/test_prepare_pr_local_review.py::text-mode subprocess call without encoding= (decodes with the ....python3 scripts/check_subprocess_encoding.py --test && python3 scripts/check_subprocess_encoding.pyexit 0.test/test_prepare_pr_local_review.py: 140 passed with the editManual verification
N/A: the subprocess-encoding gate checks the changed call directly.
Screenshots / video
Why no screenshot: nothing renders; this change touches test code and a CI baseline only.
No issue exists; burn-down of the subprocess-encoding gate baseline (precedents #20146, #20142, #20147).