K8s run zombie after stdin_hold_timeout kill: agent dead 40+ min, run s… - #1096
Merged
Conversation
…drive salvage (warren-7f0b) The in-pod agent-entrypoint idle watchdog kills a stdin-held harness on stdin_hold_timeout, but the pod (entrypoint finalize poller) keeps reading Running, so the run row stayed 'running' with false liveness for the full 40-min finalize ceiling and the emptyDir work was lost with no salvage. - New canonical wire failure reason 'agent_died' (src/core/wire.ts), surfaced in the UI label map, OpenAPI (regenerated), and the judge extension's hand-maintained wire mirror. - inferFailureReason classifies the stdin_hold_timeout system witness as agent_died instead of the anonymous 'crashed'. - The watchdog terminal-reconcile net reaps a still-live pod whose event log carries the witness (stream=system only, via a stream-narrowed hasKind probe): the reap parks the finalize intent the in-pod finalize loop is polling for, so workspace collection + salvage fire while the emptyDir still exists. - General infra-death salvage stays warren-6c94's scope. Tests: state.agent-died.test.ts, watchdog-reconcile.test.ts. check:all 12/12.
jayminwest
enabled auto-merge (squash)
August 27, 2026 16:08
jayminwest
added a commit
that referenced
this pull request
Aug 27, 2026
…warren-7d31) (#1097) Run PRs are now authored by the warren-run-bot machine account when a run-scoped token opens the PR, while the forge GitHub App (warren-forge-bnnl24[bot]) still authors them when the App credential does. The exact-match gate could only name one of those identities, so PRs #1093-#1096 skipped enable-auto-merge and had to be armed by hand. The gate now wraps both the variable and the PR author login in sentinel commas and matches with contains(), so the variable accepts a comma-separated list (no spaces) and stays backward-compatible with a single login. Unset/empty still means owner-only. The repo variable is updated to warren-run-bot separately (a comma list would not match under the old exact-match gate until this merges); extend it to both logins after merge. Claude-Session: https://claude.ai/code/session_013jybTV6kBczdcyTzY4E71o Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
seeds: sync 2026-08-27
Agent notes
The in-pod agent-entrypoint idle watchdog kills a stdin-held harness on
stdin_hold_timeout, but the pod (entrypoint finalize poller) keeps reading
Running, so the run row stayed 'running' with false liveness for the full
40-min finalize ceiling and the emptyDir work was lost with no salvage.
surfaced in the UI label map, OpenAPI (regenerated), and the judge
extension's hand-maintained wire mirror.
agent_died instead of the anonymous 'crashed'.
log carries the witness (stream=system only, via a stream-narrowed
hasKind probe): the reap parks the finalize intent the in-pod finalize
loop is polling for, so workspace collection + salvage fire while the
emptyDir still exists.
Tests: state.agent-died.test.ts, watchdog-reconcile.test.ts. check:all 12/12.
Run
run_qa0e9xax8c8nSeeds
Commits (3)
Files changed
Prompt
Show prompt
🤖 Opened by warren run
run_qa0e9xax8c8n