WIP (red test): report central lane health to the circuit breaker #753
Open
toasterson
wants to merge 1 commit from
fix/central-lane-circuit-breaker into main
pull from: fix/central-lane-circuit-breaker
merge into: toasterson:main
toasterson:main
toasterson:anima/01a00463-15bf-7fb2-8c17-d86a09b60834
toasterson:recovery/factory-meter-provider-20261012
toasterson:codex/plan14-stream-recovery-20261007
toasterson:recovery/retired-result-exit-20261012
toasterson:recovery/closed-stream-reaper-20261012
toasterson:recovery/central-overdue-alert-20261012
toasterson:recovery/central-stall-cap-20261012
toasterson:anima/019fd84c-f562-7052-939a-e8d28c4fd6b9
toasterson:recovery/activity-fanout-20261012
toasterson:anima/019ff174-c0e7-7e71-a2f2-82c2ba424f1b
toasterson:anima/01a00c91-57d7-7ef2-ad6b-85825744a332
toasterson:recovery/dark-factory-20261012
toasterson:anima/019fd84b-ed66-7052-ad3f-d4e0b5e52d94
toasterson:anima/019fe61e-6dc7-7ac2-a179-e305a5baed2a
toasterson:anima/019fd3c0-79fc-7630-a23f-80b82c3e1bf3
toasterson:anima/019fa954-ea74-71c3-81e4-ada67861fb27
toasterson:anima/01a08ce9-12bb-7b21-b322-ef1a0259e3e6
toasterson:anima/019fd84d-54f8-7441-9fae-ac75b84a463e
toasterson:anima/01a0b5e6-562c-7203-aaf0-b083da81cd7b
toasterson:anima/019f9fb1-c8d9-7912-b13f-137ea4b79e05
toasterson:anima/019fe0e9-919f-7193-87ef-c8ade2cfcc8f
toasterson:vox/direct-akh-chat
toasterson:fix/external-merge-batch-20261007
toasterson:codex/external-merge-default-kind-20261007
toasterson:anima/019fc44d-aa39-7ac3-ab14-4e23df3b6f57
toasterson:anima/019fc2cc-c7cb-76c3-ae6b-98a1519096ef
toasterson:codex/capture-inbox-20261003
toasterson:claude/wi-01a08ce9-make-operator-ai-approval-bind-the-exact
toasterson:anima/019fe0e9-92d6-7232-9fea-479211e19a14
toasterson:codex/openbao-anima-pat-20261006
toasterson:codex/plan14-recovery-publication-20261006
toasterson:claude/wi-01a0f848-recover-exact-head-native-ci-when-an-app
toasterson:codex/wi305-token-policy-20261006
toasterson:codex/wi846-review-admission-20261006
toasterson:codex/wi478-operator-scope-20261006
toasterson:codex/wi845-central-recovery-20261006
toasterson:anima/01a08276-57fa-7332-a395-31eaf232317c
toasterson:codex/companion-context-budget-20261006
toasterson:vox/akh-inventory
toasterson:vox/remembered-sign-in
toasterson:codex/wi-911-ci-recovery-after-ai-clear
toasterson:codex/wi-01a10716-external-done-fallback
toasterson:codex/local-review-default-prompt-20261004
toasterson:claude/wi-01a0f848-reconcile-externally-merged-work-without
toasterson:anima/01a09f38-f488-7181-a770-d1b96fcc428a
toasterson:anima/01a09b5b-78be-78e2-98fa-e62a913598e7
toasterson:anima/01a09ac8-36a0-73d0-bb42-ec15c18dd0c3
toasterson:claude/wi-01a0c921-pr-backed-document-work-items-advance-pa
toasterson:codex/runtime-catalog
toasterson:codex/workflow-editor
toasterson:codex/ui-phone-layout
toasterson:codex/wi-893-projects-ui
toasterson:codex/wi-899-settings-ui
toasterson:codex/wi-900-automations-ui
toasterson:codex/wi-898-team-ui
toasterson:codex/wi-897-workflows-ui
toasterson:codex/wi-896-threads-ui
toasterson:codex/wi-895-library-ui
toasterson:codex/wi-894-agents-ui
toasterson:fix/wi-890-operator-hold-attention
toasterson:anima/01a0824a-9d47-7fd3-bc47-61bfda776f3e
toasterson:claude/wi-01a08ce2-bootstrap-wi-845-conflict-recovery-by-in
toasterson:fix/tracked-mirror-disposition
toasterson:fix/historical-pr-resync-20260922
toasterson:fix/project-push-remote
toasterson:fix/shared-runtime-capacity-20260922
toasterson:fix/central-retired-delivery-recovery
toasterson:fix/thread-working-indicator
toasterson:fix/wi-loop-state-diff-evidence
toasterson:fix/park-rca-central-20260922
toasterson:claude/wi-019fa5a0-move-the-dashboard-onto-the-activity-fan
toasterson:fix/solstice-health-configured-queue
toasterson:claude/wi-01a020a4-two-honesty-fixes-dropped-in-the-08-08-r
toasterson:recovery/wi-580-20260922
toasterson:claude/wi-019fa59f-reviews-land-in-the-thread-and-reviewers
toasterson:feat/thread-request-anchor
toasterson:fix/attention-ci-lane-trigger
toasterson:feat/thread-attention-inbox
toasterson:claude/wi-01a02e15-lane-activate-ptah-on-hephaistos-as-an-o
toasterson:feat/thread-query-filters
toasterson:fix/thread-human-mention-roster
toasterson:fix/chat-composer-control-focus
toasterson:feat/ui-primary-driver
toasterson:fix/mcp-wi-pagination-20260918
toasterson:fix/terminal-owner-reconciliation-20260917
toasterson:feat/p7-local-workflow
toasterson:verify/p7-local-handback
toasterson:claude/wi-019ff49a-timeout-continuation
toasterson:anima/019fa59f-c674-7182-a6f7-8bfd8b5d60ae
toasterson:fix/akh-lane-recovery-20260914
toasterson:claude/wi-01a09f38-keep-central-runtime-unknown-outcome-rec
toasterson:recovery/central-lifecycle-20260914
toasterson:anima/01a09a32-6cc1-75b0-ae58-b6297b15c713
toasterson:anima/01a08284-9cd5-7142-a90b-9577df89df74
toasterson:claude/wi-01a0824a-rejected-worktree-prep-session-loops-on
toasterson:validation/wi844-central-integration
toasterson:claude/wi-01a09a24-repair-dispatch-counter-cutover
toasterson:validation/wi854-cutover
toasterson:validation/wi854-native-retry-20260913
toasterson:feat/akh-session-client
toasterson:claude/wi-01a08ce1-represent-cross-project-prerequisites-as
toasterson:claude/wi-01a01577-revisit-cap-slice-3-type-system-refusal
toasterson:claude/wi-01a087b6-diagnose-server-stalls-behind-mcp-gatewa
toasterson:claude/wi-01a08276-operator-authorized-conflict-recovery-mu
toasterson:claude/wi-019fd84c-afk-dispatch-requires-a-requested-outcom
toasterson:claude/wi-01a084ce-successful-push-with-unresolved-pr-recor
toasterson:claude/wi-01a00afa-runner-write-safe-directory-entries-to-g
toasterson:claude/wi-019ff0c1-test-network-subnet-collision-something
toasterson:claude/wi-01a01577-revisit-cap-slice-2-wire-the-revisit-che
toasterson:claude/wi-01a08786-operator-recovered-changed-heads-deadloc
toasterson:claude/wi-019fe0f2-build-the-operator-fleet-panels-from-the
toasterson:claude/wi-019fe0f0-reconcile-server-reservations-from-runne
toasterson:claude/wi-01a02048-split-the-ai-review-gate-into-parallel-d
toasterson:claude/wi-01a03511-add-an-audited-manual-seshat-ingest-acti
toasterson:claude/wi-019ff174-pwa-chat-break-the-2567-line-threads-pag
toasterson:claude/wi-01a08284-review-dispatch-bypasses-blocking-depend
toasterson:claude/wi-019ff1c6-archibald-is-disk-bound-not-slot-bound-6
toasterson:claude/wi-019ff09b-tighten-the-test-gate-infra-matchers-a-g
toasterson:claude/wi-019fa59e-exclude-the-same-model-from-being-auto-s
toasterson:claude/wi-019fa59f-cut-the-pwa-over-to-anima-stream-and-ver
toasterson:claude/wi-019fe0f2-expose-bounded-fleet-and-work-flow-metri
toasterson:claude/wi-01a07ac1-runner-leaks-the-forgejo-auth-token-into
toasterson:claude/wi-01a08249-backward-working-to-ready-recovery-incor
toasterson:claude/wi-01a07ab8-analysis-items-reconcile-straight-from-r
toasterson:claude/wi-01a07aaf-scheduler-candidate-window-is-consumed-b
toasterson:claude/wi-01a020a3-delivery-authority-was-never-re-filed-de
toasterson:claude/wi-019fa59e-detect-session-death-by-routability-mand
toasterson:claude/wi-019f9079-wi-3-worktree-lifecycle-in-guest-fetch-f
toasterson:claude/wi-019fa59c-double-gate-a-second-review-phase-where
toasterson:claude/wi-019fbe99-lane-faults-are-billed-to-work-items-sic
toasterson:claude/wi-019fa59b-publish-transient-chunk-deltas-to-a-per
toasterson:claude/wi-019ff174-pwa-chat-summarise-a-finished-turn-s-wor
toasterson:claude/wi-019fa59d-dispatch-branches-on-phasekind-instead-o
toasterson:claude/wi-019fa59b-move-reviewer-ranking-from-the-global-re
toasterson:claude/wi-019f9079-wi-2-acp-over-vsock-transport-in-anima-r
toasterson:claude/wi-019fe0e9-clean-addressed-session-exchange-after-l
toasterson:claude/wi-01a0765a-enforce-unsatisfied-hard-dependencies-at
toasterson:claude/wi-01a07657-late-ci-results-reopen-merged-terminal-i
toasterson:codex/dag-orphan-lifecycle
toasterson:codex/wi-752-753-terminal-dag
toasterson:codex/wi-01a05ddd-terminal-dependency-recovery
toasterson:claude/wi-019fa5a0-delete-liveturns-and-go-multi-replica
toasterson:claude/wi-01a07278-add-audited-one-attempt-ci-rearm-for-an
toasterson:claude/wi-019fa59c-publish-committed-activity-events-to-the
toasterson:claude/wi-01a01460-in-flight-clock-counts-queue-wait-exclud
toasterson:ui/fable-attention-architecture
toasterson:claude/wi-019fe0f7-seed-the-versioned-default-phase-graph-w
toasterson:ops/mini-lane-enablement
toasterson:claude/wi-019fd3c0-pwa-image-tag-lives-in-a-raw-pwa-yaml-th
toasterson:claude/wi-019fe0f0-preserve-per-item-phase-counters-and-pro
toasterson:claude/wi-019fe0f0-pin-each-work-item-to-its-entry-graph-ve
toasterson:claude/wi-01a020a3-dependency-edges-lost-the-informs-kind-e
toasterson:claude/wi-019fe0f0-add-immutable-graph-version-records-and
toasterson:claude/wi-019fd894-orphaned-edges-and-blocked-visibility-pa
toasterson:claude/wi-01a05dd7-recover-terminal-reviewer-registry-entri
toasterson:claude/wi-01a05dc3-make-fable-reviews-delta-first-evidence
toasterson:claude/wi-01a02e14-fix-change-row-supersede-lockout-a-wi-wh
toasterson:claude/wi-01a01577-revisit-cap-slice-1-land-the-per-item-ph
toasterson:claude/wi-019fd84c-sidechannel-detection-runner-flags-branc
toasterson:claude/wi-01a004d3-build-the-runner-image-in-ci-from-docker
toasterson:claude/wi-019fd894-plan-canvas-wi-dependency-graph-with-fro
toasterson:claude/pwa-project-list-scroll-exclude
toasterson:claude/wi-615-persist-workflow-id
toasterson:agent/dc078b377295
toasterson:claude/wi-019fe0ee-show-the-system-horizon-ready-frontier-h
toasterson:claude/wi-01a03fb5-resync-pr-state-must-invalidate-stale-ex
toasterson:agent/5baba3905ebd
toasterson:codex/anima-automation-train
toasterson:claude/wi-019fbe41-operator-forensics-needs-psql-no-queryab
toasterson:codex/wi606
toasterson:codex/wi614
toasterson:codex/wi608
toasterson:codex/wi611
toasterson:codex/wi612
toasterson:codex/wi613
toasterson:codex/wi607
toasterson:codex/wi610
toasterson:codex/wi604-exact-head-ci-retry
toasterson:claude/wi-019fe0f2-trace-scheduler-decisions-runner-attachm
toasterson:claude/wi-01a02e15-runner-slot-accounting-wedges-after-enos
toasterson:claude/wi-01a0155f-overdue-ci-dispatches-is-blind-to-supers
toasterson:codex/wi-01a03fb5-revalidate-implementation-allocation
toasterson:claude/wi-01a02e16-draft-phase-does-not-stick-server-re-pro
toasterson:claude/wi-01a02e14-ci-dispatch-dedup-tombstone-cancel-super
toasterson:codex/wi577-lifecycle-create-update-promote
toasterson:codex/wi520-reviewer-lifecycle
toasterson:codex/wi519-lifecycle
toasterson:claude/wi-019fe0f7-cut-gate-reads-to-phase-state-verify-adr
toasterson:claude/wi-01a02e14-solstice-health-monitoring-orchestrator
toasterson:claude/wi-01a03511-fresh-reimplementation-audited-reconcile
toasterson:claude/wi-01a03511-wire-fail-closed-akh-medu-and-seshat-sha
toasterson:claude/wi-019ff174-pwa-chat-skip-layout-and-paint-for-offsc
toasterson:claude/wi-01a03511-ingest-completed-uploadtranscript-sessio
toasterson:claude/wi-01a02e15-runner-don-t-git-add-worktree-bookkeepin
toasterson:claude/wi-01a0333a-wi-575-follow-up-testing-transition-bypa
toasterson:claude/wi-019fd84d-pwa-renders-turnoutcome-by-recovery-axis
toasterson:claude/wi-019f8438-wi-b-executor-token-scope-stripping-q7c
toasterson:claude/wi-01a038bd-reviewer-sessions-can-finish-approve-but
toasterson:codex/repair-migration-108-collision
toasterson:codex/dedicated-reviewer-lanes-20260825
toasterson:claude/wi-01a0352b-use-both-ranked-reviewer-lanes-fall-thro
toasterson:claude/wi-019fe0f2-restore-dashboardservice-against-the-mig
toasterson:claude/wi-01a02e15-wire-solstice-logs-url-into-agent-sessio
toasterson:claude/wi-01a03351-circuit-breaker-restart-forgets-quota-pa
toasterson:claude/wi-019fe0ee-assemble-each-agent-turn-from-durable-ho
toasterson:claude/wi-019fa59d-anima-stream-a-stateless-edge-serving-wa
toasterson:claude/wi-019ff2f5-re-derive-the-silent-429-signature-from
toasterson:claude/wi-01a020f0-build-the-late-output-producer-the-runne
toasterson:codex/unpark-dispatch-context-fix
toasterson:claude/wi-01a0301b-active-dispatches-claims-leak-on-session
toasterson:agent/cc11b86143f0
toasterson:agent/522d45ef1973
toasterson:claude/wi-01a02047-invert-the-quality-gate-cheap-local-comp
toasterson:claude/wi-01a02047
toasterson:claude/wi-019ff2f6-create-work-item-ignores-current-phase-d
toasterson:claude/wi-019ff2f5-reclaim-an-unrenewed-session-lease-as-fa
toasterson:claude/wi-019ff2f4-reproduce-a-hung-acp-session-on-demand-p
toasterson:claude/wi-019ff2f4-stamp-liveness-witnesses-from-the-acp-ch
toasterson:claude/wi-019fa59c-anima-work-exchange-lane-queues-and-the
toasterson:claude/wi-01a00ab4-retire-periodic-provider-usage-polling-t
toasterson:claude/wi-01a005fc-the-acp-brief-carries-the-description-bu
toasterson:claude/wi-01a029e0-runner-test-gate-misreads-cargo-json-and
toasterson:codex/wi-01a020df-cancelled-output-first
toasterson:claude/wi-01a009dc-quota-probe-kills-the-claude-code-lane-a
toasterson:claude/wi-01a00462-a-runner-blocked-session-is-unreapable-t
toasterson:claude/wi-019fa5a0-persist-the-assembled-prompt-to-s3-along
toasterson:claude/wi-019faa5d-nothing-prunes-session-tokens-104-083-ro
toasterson:claude/wi-019f8438-wi-c-runner-interceptor-checkpoint-detec
toasterson:claude/wi-019fd84c-runner-stops-relabeling-human-cancels-ca
toasterson:claude/wi-019fe0e9-pin-the-rust-toolchain-and-make-ci-repor
toasterson:claude/wi-019fd84c-witness-and-park-logic-consume-the-turno
toasterson:claude/wi-019fd84c-turnoutcome-closed-14-variant-proto-enum
toasterson:claude/wi-019f9fb1-quota-aware-scheduling-budget-provider-c
toasterson:claude/wi-019fd84d-break-glass-reset-reason-every-operator
toasterson:claude/wi-019fe61e-agent-sessions-have-no-git-push-credenti
toasterson:claude/wi-019fd84d-divergence-report-db-vs-registry-vs-brok
toasterson:claude/wi-019fe0e9-operator-watch-set-board-backed-by-bound
toasterson:claude/wi-019fa59b-seed-the-default-phase-graph-with-ci-to
toasterson:claude/wi-019fa59d-anima-session-addressed-exchange-with-pe
toasterson:claude/wi-01a00b8c-ci-verdict-pipeline-is-fully-dead-orches
toasterson:claude/wi-019fd84d-two-layer-operator-scope-property-mint-p
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-019fd84b-anima-mq-v1-proto-envelope-package-broke
toasterson:claude/wi-019fc44d-pre-push-test-gate-iterations-are-witnes
toasterson:migration-verification-20260818
toasterson:claude/wi-019fa954-mcp-proxy-registry-sessions-get-one-endp
toasterson:claude/wi-019fc2cc-ci-infrastructure-failures-qemu-ssh-rese
toasterson:claude/wi-019fce0d-reviewer-verdicts-are-not-persisted-to-w
toasterson:claude/wi-019fe0ee-checkpoint-typed-progress-witnesses-and
toasterson:claude/wi-01a00c91-builds-escape-the-per-slot-cargo-target
toasterson:claude/wi-01a00ec5-a-timed-out-turn-discards-the-worktree-a
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-019ff173-pwa-chat-anchor-the-user-s-message-to-th
toasterson:claude/wi-01a00463-anima-runner-leaks-its-executor-child-on
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-019fd894-satisfied-edges-feed-context-dependency
toasterson:claude/wi-019fe1d3-no-runner-can-reach-dind-so-the-janitor
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-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-019fff95-the-runner-s-anima-owner-worktree-tag-is
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-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-019fce0d-unpark-work-item-mcp-tool-one-audited-un
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-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-019fbdc3-pwa-workflowgraph-node-component-workflo
toasterson:claude/wi-019fa5a0-single-active-consumer-akh-lanes-and-rel
toasterson:claude/wi-019fa59c-graph-versioning-pin-in-flight-work-item
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: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-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-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-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!753
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/central-lane-circuit-breaker"
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?
⚠️ Do not merge — the new PG regression is RED
The production change is complete and does not regress anything. The regression test asserting it is not green yet, and I have located but not fixed why. Details at the bottom. Flagging loudly rather than presenting this as finished.
The gap
Central sessions never reach
services::runner, which was the only caller ofLaneCircuitBreaker. A central executor could therefore emit unbounded consecutive runtime faults and never leave rotation.Observed live on
astra-impl-2: 21 consecutiveunknown_outcomeattempts between 2026-09-14 and 2026-09-22, ~50 min per cycle, breaker never tripped. The legacy path trips correctly after 3 — WI-298 was parked by exactly that, onimhotep. So the breaker works; it simply never saw central lanes.Classification — named accurately
unknown_outcomeis runtime-attributed and NOT a business refusal. The runtime never learned the execution outcome, so no verdict was produced and there is nothing to refuse.completion.rsalready says this of the witness ("the runtime, rather than an implementation attempt, exhausted reconciliation");Business::lane_attributionnow says the same for the lane, sharinginfrastructure_failure()withwitness()so the two cannot drift.RuntimeFaultHealthyBusinessFailureReported through the existing lane API — no new breaker semantics
record_lane_dispatch_failurealready means "counts toward the breaker but does NOT charge the work item's phase revisit budget" and already has four callers inscheduler.rs. Using it keeps this path out of the WI budget by construction.record_refusalis deliberately not used — refusals are business verdicts.No migration. Migration 151 is NOT reserved. Persistence is unchanged and matches the existing callers exactly: the trip (
circuit_breaker_tripped,paused_until) persists and survives restart; a partial streak below threshold is in-memory, asload_from_dbhas always documented.Exactly once per durable attempt
The hook sits after
outbox::apply_close_in_tx, which short-circuits an already-applied close — so repeated reconciliation polls of the same attempt cannot inflate the count. The executor is read inside the transaction that finishes the session; the breaker update is applied only aftertx.commit(), because the breaker writes through the pool and an uncommitted attempt must not move lane state.Legacy behaviour preserved
Relay::circuit_breakerisOption, defaultNone— an unwired Relay behaves exactly as before rather than inventing lane state.main.rswires the real one.Central routes were already gated. I verified
scheduler.rs:2210sits in the same candidate loop as the legacyNoCapacitycheck, so it covers central candidates too — only the feeding was missing. No global or fresh-review route is silently disabled; only genuinely sick lanes pause, for the existing cooldown.Verification
natural_completion_commits_canonical_outcome_policy_and_owner_onceandpending_reconciliation_backs_off_instead_of_reclaiming_every_tick— so the normal completion path is not regressed.cargo clippy -p anima-server --lib --tests: 0 errors, no lints on touched files.The red test, honestly
central_runtime_faults_charge_the_lane_once_and_never_the_work_itemasserts all four required properties. Its first assertions pass — one durable attempt charges exactly once, four replays do not inflate it, and the WI phase-revisit budget is untouched. It then fails driving the fixture to a second close.Root cause located:
anima-akh/src/outbox/selected.rs:45decodesclosing_intentas a non-OptionValue:A NULL
closing_intenttherefore raisesdecoding column 1: unexpected null. The runtime-fault fixture reachesadvance_selected_closewith it still NULL. That is a pre-existing latent fragility in the akh outbox, surfaced by this test rather than caused by it — and arguably worth fixing on its own merits, since a nullable column decoded as non-nullable is a crash waiting for the right state.I stopped iterating on the harness rather than burn more budget guessing. Next step is to make the runtime-fault fixture establish
closing_intentthe way the natural-completion fixture does, or to make that decodeOption.Ownership
Touches
central_sessions.rs,central_sessions/completion.rs,lane_circuit_breaker.rs,main.rs, and this test file. No overlap with Sol1 (staging/reviews), Sol2 (scheduler/runner claim), or Opus1 (PR752 scheduler/lifecycle).main.rsis a one-line builder call — flagging it in case anyone else is in there.🤖 Generated with Claude Code
Central sessions never reach `services::runner`, which was the only caller of `LaneCircuitBreaker`. A central executor could therefore emit unbounded consecutive runtime faults and never leave rotation. Observed live on astra-impl-2: 21 consecutive `unknown_outcome` attempts between 2026-09-14 and 2026-09-22, ~50 min per cycle, breaker never tripped — while the legacy path trips correctly after 3 (WI-298 was parked by exactly that). Classification, named accurately. `unknown_outcome` is runtime-attributed and is NOT a business refusal. The runtime never learned the execution outcome, so no verdict was produced and there is nothing to refuse. `completion.rs` already says this of the witness ("the runtime, rather than an implementation attempt, exhausted reconciliation"); `Business::lane_attribution` now says the same for the lane, sharing `infrastructure_failure()` with `witness()` so the two cannot drift. RuntimeFault -> charge the lane Healthy -> reset the lane BusinessFailure -> move the lane in neither direction A work-item-attributable failure must not punish the lane; the lane did its job. Reported through the existing lane-attributed API, not a new one. `record_lane_dispatch_failure` already means "counts toward the breaker but does NOT charge the work item's phase revisit budget", and already has four callers in `scheduler.rs`. Using it keeps this path out of the WI budget by construction and adds no new breaker semantics. `record_refusal` is deliberately NOT used: refusals are business verdicts. No migration. Persistence semantics are unchanged and match the existing callers exactly: the trip (`circuit_breaker_tripped`, `paused_until`) is persisted and survives restart; a partial streak below threshold is in-memory, as `load_from_db` has always documented. Migration 151 is NOT reserved. Exactly once per durable central attempt. The hook sits after `outbox::apply_close_in_tx`, which short-circuits a close that was already applied, so repeated reconciliation polls of the same attempt cannot inflate the count. The executor is read inside the same transaction that finishes the session, but the breaker update is applied only AFTER `tx.commit()` — the breaker writes through the pool, and an uncommitted attempt must not move lane state. Legacy behaviour preserved. `Relay::circuit_breaker` is `Option`, defaulting to `None`. An unwired Relay behaves exactly as before rather than inventing lane state. `main.rs` wires the real one. Fresh/global review routes are untouched: the existing scheduler gate at `scheduler.rs:2210` already covers central candidates in the same loop as legacy ones, so no route is silently disabled — only genuinely sick lanes pause, and only for the existing cooldown. KNOWN RED — the PG regression in this commit does not pass yet. `central_runtime_faults_charge_the_lane_once_and_never_the_work_item` asserts the four required properties (one charge per durable attempt across replays; distinct attempts reach the threshold; success resets; no WI budget penalty). Its first two assertions pass; it then fails driving the fixture to a second close. Root cause located, not yet fixed: `anima-akh/src/outbox/selected.rs:45` decodes `closing_intent` as a non-`Option` `Value`, so a NULL there raises "decoding column 1: unexpected null". The runtime-fault fixture reaches `advance_selected_close` with `closing_intent` still NULL. That is a pre-existing latent fragility in the akh outbox, surfaced by this test rather than caused by it. DO NOT MERGE until it is green. Both pre-existing tests in this file pass unchanged (`natural_completion_commits_canonical_outcome_policy_and_owner_once`, `pending_reconciliation_backs_off_instead_of_reclaiming_every_tick`), so the production change does not regress the normal completion path. `cargo clippy -p anima-server --lib --tests`: 0 errors, no lints on the touched files. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>View command line instructions
Manual merge helper
Use this merge commit message when completing the merge manually.
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.