fix(issue-34): merge review - the remote runner's deadline wording counts as an unconfirmed close

remote.py closes a job whose end it could not see with
`error --detail "deadline_timeout (remote runner)"`; the sub-job table
matched the reason exactly and filed it as a plain failure, losing the
unconfirmed count and the late-write warning (merge review, codex R2).
The kind is the first word of the reason now. Test T14 replays the
remote runner's close through the real registry and producer; it fails
without the fix.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
This commit is contained in:
GodopuandClaude Fable 5.1 committed 2026-09-25 16:23:06 +09:00
1 parent 8a9101ed30
commit e80186f560
2 files changed
+24 -1

No files matched your search

+20
View File
@@ -251,6 +251,26 @@ def test_t13_a_sub_job_cancelled_before_injection_is_not_dispatched_in_the_table
assert f"| NOT-DISPATCHED | {reason} |" in block, block
def test_t14_the_remote_runners_deadline_wording_is_closed_unconfirmed(tmp_path, monkeypatch):
"""Merge review R2 (codex): remote.py closes a job it could not see finish
with `error --detail "deadline_timeout (remote runner)"`; the exact-match
classifier filed it as a plain failure and the unconfirmed count and its
warning were lost."""
env = _env(tmp_path)
reg = tmp_path / "reg"
p = _jid(_submit(env, reg))
c = _jid(_submit(env, reg, "--parent-job", p))
tok = _record(reg, c)["dispatch_token"]
res = subprocess.run([sys.executable, str(REGISTRY), "--registry-dir", str(reg), "close", "--job", c,
"--request", "deadline_timeout", "--expect-dispatch-token", tok],
capture_output=True, text=True, env=env, timeout=120)
assert res.returncode == 0, res.stderr
_publish(env, reg, c, "error", "deadline_timeout (remote runner)")
block = _runner(tmp_path, monkeypatch)._subjobs_block([p])
assert f"| {c} | " in block and "| CLOSED-UNCONFIRMED | deadline_timeout (remote runner) |" in block, block
assert "미확인 종결 1" in block, block
def test_t7_a_job_without_children_is_waited_for_as_before(tmp_path, monkeypatch):
env = _env(tmp_path)
reg = tmp_path / "reg"