fix: decode harness git output as utf-8

This commit is contained in:
KOKO\Mimi
2026-08-09 01:54:27 +09:00
parent 67ff700dfc
commit 8895adf24c
2 changed files with 29 additions and 2 deletions
+4 -2
View File
@@ -58,7 +58,7 @@ class StepExecutor:
"""Phase 디렉토리 안의 step들을 순차 실행하는 하네스.""" """Phase 디렉토리 안의 step들을 순차 실행하는 하네스."""
MAX_RETRIES = 3 MAX_RETRIES = 3
FEAT_MSG = "feat({phase}): step {num} {name}" FEAT_MSG = "feat({phase}): step {num} - {name}"
CHORE_MSG = "chore({phase}): step {num} output" CHORE_MSG = "chore({phase}): step {num} output"
TZ = timezone(timedelta(hours=9)) TZ = timezone(timedelta(hours=9))
@@ -112,7 +112,9 @@ class StepExecutor:
def _run_git(self, *args) -> subprocess.CompletedProcess: def _run_git(self, *args) -> subprocess.CompletedProcess:
cmd = ["git"] + list(args) cmd = ["git"] + list(args)
return subprocess.run(cmd, cwd=self._root, capture_output=True, text=True) return subprocess.run(
cmd, cwd=self._root, capture_output=True, text=True, encoding="utf-8"
)
def _checkout_branch(self): def _checkout_branch(self):
branch = f"feat-{self._phase_name}" branch = f"feat-{self._phase_name}"
+25
View File
@@ -34,3 +34,28 @@ def test_invoke_codex_uses_utf8_for_unicode_prompt(tmp_path, monkeypatch):
assert "EulerBernoulli 보" in invocation["kwargs"]["input"] assert "EulerBernoulli 보" in invocation["kwargs"]["input"]
assert invocation["kwargs"]["encoding"] == "utf-8" assert invocation["kwargs"]["encoding"] == "utf-8"
def test_run_git_decodes_output_as_utf8(tmp_path, monkeypatch):
invocation = {}
def capture_run(command, **kwargs):
invocation["command"] = command
invocation["kwargs"] = kwargs
return subprocess.CompletedProcess(command, 0, stdout="", stderr="")
monkeypatch.setattr(execute.subprocess, "run", capture_run)
executor = object.__new__(execute.StepExecutor)
executor._root = str(tmp_path)
executor._run_git("status", "--short")
assert invocation["kwargs"]["encoding"] == "utf-8"
def test_feature_commit_message_is_windows_console_safe():
message = execute.StepExecutor.FEAT_MSG.format(
phase="linear-static-3d-euler-beam", num=0, name="requirements-baseline"
)
message.encode("cp949")