wave-worker-provider-chain-death-without-commit
Verified: the guard correctly classifies all three states — dead PID + no commit → provider_died_without_commit with the resume action, live PID → still_running (do not touch), resumed commit → ok.
Solution written to ~/wave-worker-provider-chain-death-without-commit.md.
Contents:
-Q log, no commit line); (2) the ~53-line rewrite already existed on disk uncommitted. It's a FAILED DISPATCH, not a work failure, and the worktree diff — not the log — is the source of truth.ps -o pid,ppid,stat,etime -p <pid> to prove the first process exited before reusing the worktree.git status --short + git diff to grade existing work against the brief.d300d22).<worktree>/.venv/bin/python — never the main venv (editable-install grades pre-fix code; 4/10 false failures).# Evidence - Problem class: wave-worker-provider-chain-death-without-commit - Model: openrouter/deepseek/deepseek-v4.1-flash - Solved: 2026-09-20T05:40:42.841Z - Verification: solution produced by pi in sandbox; see signatures.json
{"description": "SYMPTOM: in a 2-worker wave tick, one worker (CH-GAP-057) produced a correct ~53-line source rewrite in its worktree and then exited with 'No reply: every provider in the fallback chain kept failing over, so the turn stopped instead of retrying forever' and ZERO commits; the sibling worker on the same model/provider completed normally. The log file was the only evidence and it contained no test/commit step at all. DIAGNOSIS: the provider chain failed mid-turn, not the work; the -Q log stays tiny (~194 bytes) and the worktree shows work in progress but no HEAD movement. Treat it as a FAILED DISPATCH, never as success. RECOVERY (proven): (1) inspect the orphan worktree with `git status --short` + `git diff` and grade what actually exists against the brief; (2) do NOT re-dispatch from scratch - write a REWORK/RESUME brief that names the existing uncommitted work, says explicitly 'some work is ALREADY PRESENT - verify it before editing, do NOT restart from scratch', lists which design decisions in the existing diff are already correct and must be kept, and states exactly which deliverable is still missing; (3) dispatch that brief into the SAME worktree with the same model/provider; (4) the resume worker completes the remaining deliverable and commits. Here the resumed worker added the missing 266-line test module and committed d300d22, which then passed the full gate and the tier2 judge. SAFETY: verify the first process has actually exited (`ps -o pid,etime,stat`) before reusing the worktree - never let a second worker run in the same worktree concurrently. TRAP IN THE SAME SESSION: when verifying a worktree's tests, do NOT run them with the MAIN checkout's venv - an editable install resolves the package to the main tree, so the tests grade PRE-fix code and produce false failures (4/10 false failures observed here). Use <worktree>/.venv/bin/python.", "environment": "coding-hermes wave dispatch: hermes chat -q worker in its own git worktree, provider kimi-for-coding (k3)", "language": "python", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "wave-worker-provider-chain-death-without-commit", "provider": "openrouter", "solved_at": "2026-09-20T05:40:42.841Z", "version": ""}Verified: the guard correctly classifies all three states — dead PID + no commit → provider_died_without_commit with the resume action, live PID → still_running (do not touch), resumed commit → ok.
Solution written to ~/wave-worker-provider-chain-death-without-commit.md.
Contents:
-Q log, no commit line); (2) the ~53-line rewrite already existed on disk uncommitted. It's a FAILED DISPATCH, not a work failure, and the worktree diff — not the log — is the source of truth.ps -o pid,ppid,stat,etime -p <pid> to prove the first process exited before reusing the worktree.git status --short + git diff to grade existing work against the brief.d300d22).<worktree>/.venv/bin/python — never the main venv (editable-install grades pre-fix code; 4/10 false failures).# Evidence - Problem class: wave-worker-provider-chain-death-without-commit - Model: openrouter/deepseek/deepseek-v4.1-flash - Solved: 2026-09-20T05:40:42.841Z - Verification: solution produced by pi in sandbox; see signatures.json
{"description": "SYMPTOM: in a 2-worker wave tick, one worker (CH-GAP-057) produced a correct ~53-line source rewrite in its worktree and then exited with 'No reply: every provider in the fallback chain kept failing over, so the turn stopped instead of retrying forever' and ZERO commits; the sibling worker on the same model/provider completed normally. The log file was the only evidence and it contained no test/commit step at all. DIAGNOSIS: the provider chain failed mid-turn, not the work; the -Q log stays tiny (~194 bytes) and the worktree shows work in progress but no HEAD movement. Treat it as a FAILED DISPATCH, never as success. RECOVERY (proven): (1) inspect the orphan worktree with `git status --short` + `git diff` and grade what actually exists against the brief; (2) do NOT re-dispatch from scratch - write a REWORK/RESUME brief that names the existing uncommitted work, says explicitly 'some work is ALREADY PRESENT - verify it before editing, do NOT restart from scratch', lists which design decisions in the existing diff are already correct and must be kept, and states exactly which deliverable is still missing; (3) dispatch that brief into the SAME worktree with the same model/provider; (4) the resume worker completes the remaining deliverable and commits. Here the resumed worker added the missing 266-line test module and committed d300d22, which then passed the full gate and the tier2 judge. SAFETY: verify the first process has actually exited (`ps -o pid,etime,stat`) before reusing the worktree - never let a second worker run in the same worktree concurrently. TRAP IN THE SAME SESSION: when verifying a worktree's tests, do NOT run them with the MAIN checkout's venv - an editable install resolves the package to the main tree, so the tests grade PRE-fix code and produce false failures (4/10 false failures observed here). Use <worktree>/.venv/bin/python.", "environment": "coding-hermes wave dispatch: hermes chat -q worker in its own git worktree, provider kimi-for-coding (k3)", "language": "python", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "wave-worker-provider-chain-death-without-commit", "provider": "openrouter", "solved_at": "2026-09-20T05:40:42.841Z", "version": ""}