WIP: A timed-out turn discards the worktree and is reported as "no durable output": capture the diff on non-end_turn stops and stop mislabelling turn timeouts as quota faults #616
Draft
toasterson
wants to merge 1 commit from
claude/wi-01a00ec5-a-timed-out-turn-discards-the-worktree-a into main
pull from: claude/wi-01a00ec5-a-timed-out-turn-discards-the-worktree-a
merge into: toasterson:main
toasterson:main
toasterson:claude/wi-019ff2f6-create-work-item-ignores-current-phase-d
toasterson:claude/wi-019fd84d-two-layer-operator-scope-property-mint-p
toasterson:claude/wi-019fbe99-lane-faults-are-billed-to-work-items-sic
toasterson:claude/wi-019fd84d-pwa-renders-turnoutcome-by-recovery-axis
toasterson:claude/wi-019fe0e9-finish-the-pwa-phase-axis-cutover-on-cur
toasterson:claude/wi-019fd84c-buf-breaking-change-ci-wire-json-across
toasterson:claude/wi-019ff2f4-reproduce-a-hung-acp-session-on-demand-p
toasterson:claude/wi-019fd84b-anima-mq-v1-proto-envelope-package-broke
toasterson:claude/wi-019fc44d-pre-push-test-gate-iterations-are-witnes
toasterson:claude/wi-019f9079-wi-2-acp-over-vsock-transport-in-anima-r
toasterson:claude/wi-019ff0c1-test-network-subnet-collision-something
toasterson:claude/wi-01a00b8c-ci-verdict-pipeline-is-fully-dead-orches
toasterson:migration-verification-20260818
toasterson:claude/wi-019fa954-mcp-proxy-registry-sessions-get-one-endp
toasterson:claude/wi-019fd3c0-pwa-image-tag-lives-in-a-raw-pwa-yaml-th
toasterson:claude/wi-019fa59c-double-gate-a-second-review-phase-where
toasterson:claude/wi-019fc2cc-ci-infrastructure-failures-qemu-ssh-rese
toasterson:claude/wi-019fe0f2-trace-scheduler-decisions-runner-attachm
toasterson:claude/wi-019fce0d-reviewer-verdicts-are-not-persisted-to-w
toasterson:claude/wi-019fe0f2-expose-bounded-fleet-and-work-flow-metri
toasterson:claude/wi-019fe0f7-cut-gate-reads-to-phase-state-verify-adr
toasterson:claude/wi-019fe0f2-restore-dashboardservice-against-the-mig
toasterson:claude/wi-019fa59b-publish-transient-chunk-deltas-to-a-per
toasterson:claude/wi-019fe0ee-checkpoint-typed-progress-witnesses-and
toasterson:claude/wi-01a00c91-builds-escape-the-per-slot-cargo-target
toasterson:claude/wi-019fd894-plan-canvas-wi-dependency-graph-with-fro
toasterson:claude/wi-01a004d3-build-the-runner-image-in-ci-from-docker
toasterson:claude/wi-01a00afa-runner-write-safe-directory-entries-to-g
toasterson:claude/wi-01a009dc-circuit-breaker-state-fails-to-load-on-e
toasterson:claude/wi-019ff175-adr-0038-acp-has-no-structured-agent-to
toasterson:claude/wi-01a005fc-the-acp-brief-carries-the-description-bu
toasterson:claude/wi-01a00462-a-runner-blocked-session-is-unreapable-t
toasterson:claude/wi-019ff173-pwa-chat-anchor-the-user-s-message-to-th
toasterson:claude/wi-01a00463-anima-runner-leaks-its-executor-child-on
toasterson:claude/wi-019fe61e-agent-sessions-have-no-git-push-credenti
toasterson:claude/wi-019ff2f4-stamp-liveness-witnesses-from-the-acp-ch
toasterson:claude/wi-019fd84c-witness-and-park-logic-consume-the-turno
toasterson:claude/wi-019fd84c-runner-stops-relabeling-human-cancels-ca
toasterson:claude/wi-019fd84c-turnoutcome-closed-14-variant-proto-enum
toasterson:claude/wi-019fd84c-afk-dispatch-requires-a-requested-outcom
toasterson:claude/wi-019fd84d-break-glass-reset-reason-every-operator
toasterson:claude/wi-019fd84d-divergence-report-db-vs-registry-vs-brok
toasterson:claude/wi-019ff174-pwa-chat-make-a-tool-call-say-what-it-is
toasterson:claude/wi-019fe0f0-reap-heartbeat-live-but-activity-dead-tu
toasterson:claude/wi-019fe0ee-persist-scheduling-clocks-and-leases-so
toasterson:claude/wi-019ff093-mark-implementation-complete-advances-wo
toasterson:claude/wi-019ff174-pwa-chat-summarise-a-finished-turn-s-wor
toasterson:claude/wi-019fd894-satisfied-edges-feed-context-dependency
toasterson:claude/wi-019fe1d3-no-runner-can-reach-dind-so-the-janitor
toasterson:claude/wi-01a009dc-quota-probe-kills-the-claude-code-lane-a
toasterson:claude/wi-019fe251-the-pre-push-gate-runs-tests-but-not-cli
toasterson:claude/wi-019fdd2a-lane-quota-detection-uses-a-total-turn-t
toasterson:claude/wi-019fd894-orphaned-edges-and-blocked-visibility-pa
toasterson:claude/wi-019fd894-dependency-edge-api-surface-grpc-mcp-too
toasterson:claude/wi-019fd893-edge-witness-kind-dependent-satisfaction
toasterson:claude/wi-01a0057c-sessions-finish-with-no-captured-diff-an
toasterson:claude/wi-019fa59e-retire-failed-dispatch-count-per-item-ph
toasterson:claude/wi-019fd895-anima-server-wedges-grpc-mcp-accept-conn
toasterson:claude/wi-019fce0d-in-flight-ceiling-stranded-working-queue
toasterson:claude/wi-019fd84c-sidechannel-detection-runner-flags-branc
toasterson:claude/wi-019fff95-the-runner-s-anima-owner-worktree-tag-is
toasterson:claude/wi-019fe0f0-add-immutable-graph-version-records-and
toasterson:claude/wi-019fbe42-inventory-every-psql-kubectl-recipe-oper
toasterson:claude/wi-019fe0f7-move-exit-bar-state-onto-pinned-phase-in
toasterson:claude/wi-019ff075-an-orphaned-solstice-dispatch-strands-a
toasterson:claude/wi-019ff173-pwa-chat-pin-the-pending-permission-esca
toasterson:agent/19ce972d63dc
toasterson:agent/972084064aa3
toasterson:claude/wi-019fe0e9-operator-watch-set-board-backed-by-bound
toasterson:claude/wi-019fe0e9-clean-addressed-session-exchange-after-l
toasterson:claude/wi-019fa59e-detect-session-death-by-routability-mand
toasterson:claude/wi-019fe706-solstice-rabbitmq-is-degraded-job-reques
toasterson:claude/wi-019fe18f-the-pre-push-test-gate-bills-toolchain-f
toasterson:claude/wi-019fe0e9-audited-reconcile-session-releases-zombi
toasterson:claude/wi-019fe0e9-use-one-durable-https-credential-path-fo
toasterson:claude/wi-019fe6f2-stranded-work-items-drowns-real-strandin
toasterson:claude/wi-019fe6fd-pwa-data-error-51-items-without-workflow
toasterson:claude/wi-019fec06-items-with-a-changes-requested-review-ve
toasterson:claude/wi-019fe0f0-cache-provider-quota-back-off-failures-a
toasterson:claude/wi-019fe0e9-pin-the-rust-toolchain-and-make-ci-repor
toasterson:claude/wi-019fce0d-unpark-work-item-mcp-tool-one-audited-un
toasterson:claude/wi-019fe0ee-assemble-each-agent-turn-from-durable-ho
toasterson:claude/wi-019fe0ee-codify-the-anima-owned-horizon-boundary
toasterson:claude/wi-019fe0e7-re-implement-owner-tagged-resource-reape
toasterson:claude/wi-019fd893-dependency-edges-table-dag-write-path-de
toasterson:claude/wi-019fce0d-operator-scheduling-controls-over-mcp-ho
toasterson:claude/wi-019fd84d-interleaved-refusal-witnesses-indefinite
toasterson:claude/wi-019fdd2a-a-fully-cleared-exit-bar-does-not-advanc
toasterson:claude/wi-019fd898-corrective-resume-dispatch-to-an-acp-gat
toasterson:claude/wi-019fe5fd-approve-and-merge-refuses-heads-whose-gr
toasterson:claude/wi-019fe624-testing-phase-items-with-a-moved-head-ha
toasterson:claude/wi-019fdd4c-the-24h-in-flight-ceiling-has-no-operato
toasterson:claude/wi-019fa5a0-move-the-dashboard-onto-the-activity-fan
toasterson:claude/wi-019fe0f2-add-one-shared-otlp-observability-initia
toasterson:claude/wi-019fce4e-approve-and-merge-no-already-merged-shor
toasterson:claude/wi-019fce0d-lane-occupancy-over-mcp-list-sessions-by
toasterson:claude/wi-019fbdc4-pwa-plan-detail-workflow-graph-define-im
toasterson:claude/wi-019fd86c-worktree-prep-rebase-parks-items-that-va
toasterson:claude/wi-019fa96b-session-project-binding-covers-work-item
toasterson:claude/wi-019fdd87-a-failed-turn-does-not-roll-back-mark-im
toasterson:claude/wi-019fe0f0-add-audited-cancelsession-that-terminate
toasterson:claude/wi-019fcde5-work-items-cannot-be-looked-up-by-their
toasterson:claude/wi-019fa5a0-persist-the-assembled-prompt-to-s3-along
toasterson:claude/wi-019fa59f-reviews-land-in-the-thread-and-reviewers
toasterson:claude/wi-019fbdc3-pwa-workflowgraph-node-component-workflo
toasterson:claude/wi-019fa5a0-single-active-consumer-akh-lanes-and-rel
toasterson:claude/wi-019faa5d-nothing-prunes-session-tokens-104-083-ro
toasterson:claude/wi-019fa59c-graph-versioning-pin-in-flight-work-item
toasterson:claude/wi-019fa59c-anima-work-exchange-lane-queues-and-the
toasterson:claude/wi-019fa59d-dispatch-branches-on-phasekind-instead-o
toasterson:claude/wi-019fa59d-anima-session-addressed-exchange-with-pe
toasterson:claude/wi-019fa5a0-attempt-counter-in-postgres-surviving-ev
toasterson:claude/node-workflow-overview-wi-4c95cf
toasterson:claude/wi-019fc826-the-account-quota-probe-polls-the-provid
toasterson:claude/grpc-api-surface-evaluation-cd6026
toasterson:claude/wi-019fc9a5-exit-bar-gates-survive-across-pr-generat
toasterson:claude/wi-019fa59f-boards-read-the-phase-graph-instead-of-a
toasterson:claude/wi-019fcce5-implementation-sessions-lack-workitem-wr
toasterson:claude/wi-019f9fc2-anima-has-no-ssh-credential-story-runner
toasterson:claude/wi-019f9946-a-work-item-filed-without-a-plan-has-no
toasterson:claude/wi-019fa3a4-reviewers-cannot-build-the-code-they-rev
toasterson:claude/wi-019fc638-anima-emits-no-traces-metrics-or-structu
toasterson:agent/4a6b46e02b58
toasterson:claude/wi-019fc63c-dispatch-has-no-dependency-graph-work-it
toasterson:agent/e7469dfa074b
toasterson:claude/wi-019f9fb1-quota-aware-scheduling-budget-provider-c
toasterson:agent/2cfe41dbf7f5
toasterson:claude/wi-019faa43-the-janitor-s-two-sweeps-both-exclude-th
toasterson:claude/wi-019fcc85-move-cargo-target-dir-from-per-runner-to
toasterson:claude/wi-019f8615-agents-page-show-each-agent-s-live-slot
toasterson:agent/1c04647808fc
toasterson:claude/wi-019dbb8e-auth-for-akh-medu-seshat-envoy-gateway-s
toasterson:claude/wi-019dc57c-p1-5-seshat-ingest-hook-transcripts-libr
toasterson:claude/wi-019ddfd9-mcp-tool-time-bounded-out-of-hours-sessi
toasterson:claude/wi-019e8873-native-solstice-ci-dispatch-send-explici
toasterson:claude/beautiful-leavitt-d2a8d7
toasterson:agent/8e80f1909fac
toasterson:agent/baf43b288ad9
toasterson:claude/wi-019fc9a5-a-failed-git-push-silently-discards-the
toasterson:agent/0d500af2cd88
toasterson:agent/c4a84cf02ec2
toasterson:claude/wi-019f9ea6-dispatched-sessions-hit-scope-walls-mid
toasterson:claude/wi-019fc826-the-account-quota-probe-hammers-the-prov
toasterson:claude/wi-019f98b5-opencode-lane-is-dead-weight-every-turn
toasterson:claude/wi-019fb430-list-working-document-kinds-omits-ci-ret
toasterson:agent/cb05e821a3bc
toasterson:agent/a9ae8f731a77
toasterson:agent/89755cf8eb3e
toasterson:claude/wi-019fa59d-error-queue-drainer-park-the-work-item-s
toasterson:claude/wi-019fc2cc-flaky-test-no-reviewer-dispatched-twice
toasterson:agent/0c195963cd85
toasterson:agent/21dbfeaf95c9
toasterson:agent/30dad6db7aa0
toasterson:agent/917a59a781d8
toasterson:agent/b557136f8edf
toasterson:claude/wi-019fc3bd-park-vs-live-session-race-parks-land-whi
toasterson:agent/2c4165ec8872
toasterson:claude/wi-019fa59b-phasekind-enum-and-the-fk-constrained-ph
toasterson:claude/wi-019fa9f3-dispatch-ordering-does-not-prefer-work-i
toasterson:claude/wi-019fa8f3-the-scheduler-s-unclaimed-wi-warning-re
toasterson:claude/wi-019fa59a-dispatch-payload-type-and-the-idempotenc
toasterson:claude/wi-019fa979-the-reviewer-slot-reservation-is-applied
toasterson:claude/wi-019fa59b-error-envelope-and-per-lane-error-queues
toasterson:claude/wi-019fa7d9-an-executor-must-be-able-to-rebase-its-o
toasterson:claude/wi-019fa59b-seed-the-default-phase-graph-with-ci-to
toasterson:claude/wi-019fbe41-zombie-session-repair-is-a-raw-sql-sweep
toasterson:claude/wi-019fbe97-grpc-services-and-mcp-handlers-each-reim
toasterson:claude/wi-019fbe41-a-stale-recorded-pr-head-breaks-ci-dispa
toasterson:claude/wi-019fbe41-operator-forensics-needs-psql-no-queryab
toasterson:claude/wi-019fa59e-retire-anima-sched-max-active-for-runner
toasterson:claude/wi-019fb424-derive-every-git-remote-config-from-the
toasterson:claude/wi-019fa3d2-the-ai-gate-ships-no-review-instructions
toasterson:claude/wi-019f9e06-implement-emit-contextwindowstats-from-p
toasterson:claude/wi-019fb464-a-review-analysis-wi-that-delivers-its-f
toasterson:claude/wi-019fa3a4-approve-and-merge-fails-permanently-on-f
toasterson:claude/wi-019f9e06-implement-a-b-stats-comparison-harness-4
toasterson:claude/wi-019fb477-per-executor-lane-state-leaks-on-session
toasterson:claude/wi-019fa59a-anima-mq-crate-topology-declaration-for
toasterson:claude/wi-019fba1f-witness-output-first-classification-coun
toasterson:claude/wi-019f9e06-implement-strategy-specific-stats-for-co
toasterson:claude/wi-019f841f-quick-reply-dedup-options-render-as-bull
toasterson:archive/wi-410-20260807
toasterson:claude/wi-019fa5a0-owner-tagged-reaper-for-containers-workt
toasterson:archive/wi-394-20260807
toasterson:claude/wi-019fa59e-per-item-phase-revisit-cap-as-workflow-c
toasterson:claude/wi-019fa59f-surface-the-operator-watch-set-on-the-bo
toasterson:claude/wi-019fb477-deliverable-reconcile-fails-every-tick-p
toasterson:claude/wi-019fa59e-migrate-exit-bar-columns-to-phases-and-v
toasterson:claude/wi-019f8b49-wi-5b-drop-work-items-status-after-the-p
toasterson:claude/wi-019f841f-live-roster-presence-real-availability-o
toasterson:claude/wi-019faf95-implementer-runs-the-touched-crates-test
toasterson:claude/wi-019faf96-migration-086-cannot-run-under-sqlx-inde
toasterson:claude/wi-019faf95-corrective-dispatch-resumes-the-prior-se
toasterson:claude/wi-019faf95-refusal-is-not-an-empty-turn-distinct-wi
toasterson:claude/wi-019fa59f-24-hour-in-flight-ceiling-that-parks-wit
toasterson:claude/wi-019fb477-rejected-work-item-is-neither-dispatchab
toasterson:claude/wi-019faf95-session-accounting-capture-per-session-t
toasterson:claude/wi-019fb40f-a-terminal-worktree-prep-rejection-leaks
toasterson:claude/wi-019f90ad-scheduler-over-assigns-in-bursts-8-assig
toasterson:claude/wi-019f860b-pwa-chat-config-pickers-replay-a-dead-se
toasterson:claude/wi-019f85b9-wi-3-pwa-collapsible-subthread-ui
toasterson:claude/wi-019f841f-thread-scoped-activity-streaming-retire
toasterson:claude/wi-019f841e-forward-agent-message-content-blocks-end
toasterson:claude/wi-019f85b9-wi-2-runner-delegation-reporting-subthre
toasterson:claude/wi-019f52d2-review-loop-starvation-reviewer-re-dispa
toasterson:claude/wi-019eab9e-feature-mcp-read-tools-for-session-artif
toasterson:claude/wi-019e846d-catch-unwired-dead-code-pub-in-pub-mod-h
toasterson:claude/wi-019faa49-the-per-executor-cap-does-not-hold-acros
toasterson:claude/wi-019f615e-sia-populate-external-ref-external-state
toasterson:claude/wi-019dd0b7-wipsnapshot-retention-per-wi-cap-age-pru
toasterson:claude/wi-019dc0e8-git-remote-url-normalization-ssh-vs-git
toasterson:claude/wi-019fa9c4-ci-green-is-a-sticky-boolean-with-no-com
toasterson:claude/wi-019f85b9-wi-1-subthread-domain-model-parent-threa
toasterson:claude/wi-019f9087-pwa-workitemdetail-request-changes-appro
toasterson:claude/wi-019f9079-wi-1-spike-gates-the-rest-hypervisor-pic
toasterson:claude/wi-019f862a-project-overview-in-flight-section-split
toasterson:claude/wi-019f903c-ci-builds-pushes-multi-arch-deploy-image
toasterson:claude/wi-019f841e-resource-mentions-in-the-composer-files
toasterson:claude/wi-019f57aa-message-part-streaming-forward-acp-delta
toasterson:claude/wi-019e93df-mcp-ambient-get-work-item-detail-full-wi
toasterson:claude/wi-019e846d-in-server-merge-engine-hardening-anima-g
toasterson:claude/wi-019dbb9c-agent-annotation-pathway-broken-pat-lack
toasterson:claude/wi-019faa38-a-ci-green-work-item-awaiting-review-is
toasterson:claude/wi-019fa5a0-register-session-gate-reject-a-redeliver
toasterson:claude/wi-019fa902-the-ci-red-corrective-loop-hands-the-imp
toasterson:claude/wi-019fa945-per-executor-reservation-leaks-a-capped
toasterson:claude/wi-019f90f9-pwa-delivery-board-is-blind-to-the-phase
toasterson:claude/wi-019fa7c9-anima-runner-exec-slots-name-is-also-par
toasterson:claude/wi-019fa59c-distinguish-an-empty-turn-from-a-failed
toasterson:claude/wi-019f9aa3-ci-lints-against-an-unpinned-toolchain-d
toasterson:claude/wi-019f9fb8-dispatches-that-fail-before-the-session
toasterson:claude/wi-019fa59b-progress-witness-pr-aware-per-attempt-re
toasterson:claude/wi-019f9a17-every-native-ci-dispatch-fires-twice-rec
toasterson:claude/wi-019f9698-ci-red-corrective-loop-must-distinguish
toasterson:claude/wi-019f9ec2-a-dropped-amqp-connection-silently-ends
toasterson:claude/wi-019f84ec-enforce-session-project-binding-on-write
toasterson:claude/wi-019f903c-fleet-observability-metrics-alerts-for-r
toasterson:claude/wi-019fa7c6-a-turn-that-only-repairs-the-base-repo-s
toasterson:claude/wi-019fa7c6-a-rejected-assignment-re-dispatches-ever
toasterson:claude/wi-019f9b4b-reject-never-reaches-the-implementer-lin
toasterson:claude/wi-019f9b6e-reviewer-only-is-not-expressible-keeping
toasterson:claude/wi-019f9ac1-quota-aware-lanes-meter-usage-over-acp-s
toasterson:claude/wi-019f99ca-native-ci-falls-back-to-a-job-script-tha
toasterson:claude/wi-019f8610-remove-the-global-anima-sched-max-active
toasterson:claude/wi-019f990a-analysis-work-parks-itself-17-of-20-park
toasterson:claude/wi-019f9aa3-a-model-provider-429-is-indistinguishabl
toasterson:claude/wi-019f99a4-dispatch-queue-ignores-priority-strict-f
toasterson:claude/wi-019f83ce-wi-a-backend-escalation-core-schema-type
toasterson:claude/wi-019f98d9-you-cannot-follow-a-wi-along-its-route-1
toasterson:claude/wi-019f98b5-a-failed-turn-is-indistinguishable-from
toasterson:claude/account-quota-meter
toasterson:claude/wi-019fa2fc-the-akh-gateway-advertises-6-slots-for-a
toasterson:claude/wi-019fa243-every-re-dispatch-throws-away-the-previo
toasterson:claude/wi-019fa2de-a-review-session-is-dispatched-alongside
toasterson:claude/wi-019f9e35-worktree-base-branch-is-one-global-env-v
toasterson:claude/thread-window-redesign-2360d9
toasterson:claude/wip-lift-rehook
toasterson:claude/wi-019f9b1d-review-slot-reservation-leaks-when-a-rev
toasterson:claude/wi-019f99ac-create-project-leaves-new-projects-undis
toasterson:claude/wi-019f9980-pin-ci-verdicts-to-the-commit-under-test
toasterson:claude/wi-019f8438-wi-d-frontend-permission-card-render-hum
toasterson:claude/wi-019f8438-wi-c-runner-interceptor-checkpoint-detec
toasterson:claude/wi-019f8438-wi-b-executor-token-scope-stripping-q7c
toasterson:claude/wi-019f8602-reopen-work-items-when-their-orphaned-se
toasterson:claude/wi-019f90cf-review-analysis-wis-never-close-no-phase
toasterson:claude/wi-019f90fe-mcp-update-work-item-advertises-status-v
toasterson:claude/claude-lane-opus-5
toasterson:claude/wi-019f17e4-user-settings-foundation-store-registry
toasterson:claude/wi-019f1779-per-user-configurable-inbox-auto-clear-w
No reviewers
Labels
Clear labels
Compat/Breaking
Breaking change that won't be backward compatible
Kind/Bug
Something is not working
Kind/Documentation
Documentation changes
Kind/Enhancement
Improve existing functionality
Kind/Feature
New functionality
Kind/Security
This is security issue
Kind/Testing
Issue or pull request related to testing
Priority
Critical
The priority is critical
Priority
High
The priority is high
Priority
Low
The priority is low
Priority
Medium
The priority is medium
Reviewed
Confirmed
Issue has been confirmed
Reviewed
Duplicate
This issue or pull request already exists
Reviewed
Invalid
Invalid issue
Reviewed
Won't Fix
This issue won't be fixed
Status
Abandoned
Somebody has started to work on this but abandoned work
Status
Blocked
Something is blocking this issue or pull request
Status
Need More Info
Feedback is required to reproduce issue or to continue work
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
toasterson/Anima!616
Loading…
Reference in a new issue
No description provided.
Delete branch "claude/wi-01a00ec5-a-timed-out-turn-discards-the-worktree-a"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Anima work item
01a00ec5-55a3-7cb2-b40b-cab2baa9d59c.Observed 2026-08-16 on WI-549 (four opencode turns, three killed at the 3600s cap). Runner log (anima-runner-opencode-1, 19:35Z):
Three defects compound here:
1. Work discard. On any stop_reason other than
end_turn(timeout, cancel),anima_runner::vcsskips commit/push/PR entirely. An hour of real edits in the worktree is silently thrown away. The next session starts from zero, repeats the same hour, and dies the same way — a work-discard loop that reaches K=3 no-progress while looking like agent failure. Fix: on non-clean stops, still capture the worktree diff — commit to the WI branch (or at minimum record it as an agent_diff / work_item_changes row flaggedpartial: true) so (a) the work survives into the next turn and (b) the witness system can distinguish "made progress but timed out" from "genuinely idle". Do NOT auto-open a PR from a partial capture.2. Misleading park text. The park reason renders as "the agent produced no durable output before the turn was cancelled". With capture skipped by policy, this statement is unfalsifiable — the runner never looked. Reword to state the mechanism: "turn hit the 3600s cap; worktree state was discarded (stop_reason=cancelled)". Related: WI-470/471 (TurnOutcome classifier), WI-554 (honest drain outcomes).
3. Quota mislabel. The thread messages for these turns read "Session blocked — lane out of quota" for what was a turn timeout ("provider lane blocked (turn timed out after 3600s)"). A timeout is not a quota fault; this launders executor/task hangs into lane-health noise and misleads operators. Same family as WI-448/WI-539 (fault attribution) — the fix here is just to route the timeout signature to its own message text.
Acceptance:
turn timed outblocked_reason.Observed 2026-08-16 on WI-549: three opencode turns killed at the 3600s cap with work discarded. Current VCS logic skips commit/push entirely for non-end_turn stops (timeout, cancel, error), throwing away an hour of real edits. The next session starts from zero and repeats the same work-discard loop. Fix 1: Capture on non-clean stops ================================== Introduce a three-way push decision in crates/anima-runner/src/vcs.rs: - PushAndPr: Clean turn (end_turn) + real work → commit, push, open PR - CaptureOnly: Non-clean stop + real work → commit, push, NO PR - Skip: Scaffold-only (any stop_reason) → no commit, no push A non-clean turn with real work is now committed and pushed to preserve the state (so the next turn can resume), but does NOT open a PR (partial work is not promoted to review status). The commit logs as: "capturing partial work (turn did not end cleanly: stop_reason=...); will commit+push to preserve state but NOT open a PR" Scaffold-only diffs (empty or only .anima/ paths) are still skipped entirely, regardless of stop_reason. Acceptance: - [x] A turn killed at the cap with worktree changes leaves a recoverable commit on the WI branch (pr_number=0 signals no PR opened). - [x] The next session for the WI starts from the captured commit. - [x] Existing clean-path behavior (end_turn → commit/push/PR) unchanged. - [x] All anima-runner tests pass (155 passed, 0 failed). Test updates: - decide_push tests now expect CaptureOnly for non-clean turns with real work, instead of Skip (the old behavior). - committed_work_from_an_unclean_turn_is_captured: an errored turn with real work is now CaptureOnly (preserves work without PR), not skipped. Messaging improvements (already present in runner): - Backstop timeout: "turn exceeded the {max_secs}s backstop cap (total turn time, regardless of activity)" — clearly NOT a quota issue. - Idle timeout: "provider lane blocked (no ACP event for {turn_idle_secs}s — quota-stuck signature)" — distinct from backstop timeout. The park/thread text will now accurately reflect that timeouts preserve work (the commit exists on the branch) rather than discarding it. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.