WIP: A turn goes silent after its work is done and only ends at the idle watchdog — provider, quota, process health and the agent mutex are all excluded #278
Draft
toasterson
wants to merge 1 commit from
claude/wi-019fb44f-a-turn-goes-silent-after-its-work-is-don into main
pull from: claude/wi-019fb44f-a-turn-goes-silent-after-its-work-is-don
merge into: toasterson:main
toasterson:main
toasterson:claude/wi-019fa8f0-adr-081-s0-pay-the-r2-empirical-bet-prob
toasterson:claude/wi-019f90cc-p26-5-wire-the-neural-bridge-into-the-in
toasterson:claude/wi-019f90cc-p27-2-tripleverbalizer-kg-triples-divers
toasterson:ptah/hip-qwen2-device-gating
toasterson:claude/wi-019fa44f-sessions-on-one-akh-still-serialise-on-t
toasterson:claude/wi-019fff96-periodic-snapshots-have-failed-390-day-s
toasterson:claude/wi-019fe620-dispatch-trap-triage-as-an-agent-tool-po
toasterson:claude/wi-019dd0c5-phase-42b-longmemeval-locomo-harness-wit
toasterson:claude/wi-019f90cb-p26-4-neural-vsa-encoder-project-layer-n
toasterson:claude/wi-019fdd22-the-learn-on-new-triples-trigger-fires-4
toasterson:docs/babysit-lane-skill
toasterson:claude/wi-019f90cb-p26-3-polarquant-kv-cache-compression-in
toasterson:claude/wi-019fa8eb-wi-4-diagnostics-provider-dispatched-bla
toasterson:claude/wi-019fa8f0-librarian-consolidation-is-ungated-unbat
toasterson:claude/wi-019fe636-sleep-relocate-leave-the-akh-advisory-lo
toasterson:claude/wi-019fe260-any-acp-call-against-a-non-resident-work
toasterson:fix/upstream-mcp-initialized
toasterson:fix/librarian-cloud-endpoint
toasterson:feat/curation-tasks
toasterson:feat/wake-on-open-hydration
toasterson:feat/exec-none-backend
toasterson:fix/chart-workspace-seed-initcontainer
toasterson:feat/chart-akh-declarative-config
toasterson:claude/wi-019fe1b4-the-akhomed-image-ships-no-protoc-so-eve
toasterson:feat/local-drop-launchdaemon
toasterson:archive/wi-019fa44f-rebased-onto-main
toasterson:claude/wi-019fdd21-ci-never-builds-the-akh-medu-crate-it-on
toasterson:claude/wi-019fa83d-compile-feedback-lints-the-whole-workspa
toasterson:claude/wi-019fbe82-the-akh-emits-tool-activity-as-prose-in
toasterson:claude/wi-019fbf62-phase-44n-context-rot-curve-bench-per-mo
toasterson:claude/wi-019fcce4-per-turn-dispatch-mode-akh-dispatch-mode
toasterson:agent/e138bd65c5aa
toasterson:claude/wi-019fcd3d-akhomed-on-arm64-should-run-pvc-less-in
toasterson:claude/wi-019fce1e-kg-delete-shipped-with-zero-tests-a-dang
toasterson:claude/wi-019f579f-add-kg-delete-triple-delete-capability-t
toasterson:claude/wi-019e480e-mcp-crud-endpoints-for-agent-goals-expos
toasterson:claude/wi-019fba6a-turn-completion-waits-for-the-sink-refco
toasterson:claude/wi-019fcbb6-wire-remotebackend-into-akhomed-the-48c
toasterson:claude/wi-019dcaac-phase-38i-otlp-tracing-skeleton-first-oo
toasterson:claude/wi-019dcaad-phase-38j-otlp-metrics-seshat-instrument
toasterson:claude/wi-019dcaad-phase-38k-otel-logs-to-alloy-w3c-trace-p
toasterson:archive/2026-08-03-38i-pre-reset
toasterson:claude/wi-019fb9d6-panic-in-the-turn-completion-path-tokio
toasterson:claude/wi-019fba6a-the-agentic-loop-wedges-when-the-model-r
toasterson:claude/wi-019fb9d7-a-turn-can-receive-bytes-for-57-minutes
toasterson:claude/wi-019fb44f-the-watchdog-is-blind-while-the-model-ge
toasterson:archive/wi-019fa44f-sessions-on-one-akh-still-serialise-on-t
toasterson:claude/wi-019faa3e-a-reset-upstream-stream-drops-the-turn-i
toasterson:claude/wi-019f85d6-wave-r2-ownership-autostart-owner-host-c
toasterson:claude/wi-019f85d6-wave-w1-ritual-genesis-pantheon-packs-di
toasterson:claude/wi-019f85d7-wave-w2-the-wizard-akh-onboard-verbs-akh
toasterson:claude/wi-019f85d7-wave-w4-render-tier-psyche-render-pipeli
toasterson:claude/wi-019f85d6-wave-r1-config-spine-config-crate-typed
toasterson:archive/2026-07-28-wave-r2-ownership-autostart-owner-host-c
toasterson:archive/2026-07-28-wave-w4-render-tier-psyche-render-pipeli
toasterson:archive/2026-07-28-wave-w2-the-wizard-akh-onboard-verbs-akh
toasterson:archive/2026-07-28-wave-w1-ritual-genesis-pantheon-packs-di
toasterson:archive/2026-08-03-38j-pre-reset
toasterson:claude/wi-019db1bd-anima-integration-workspace-daemon-that
toasterson:archive/2026-08-03-38k-pre-reset
toasterson:claude/wi-019dc599-phase-39-distributed-inference-fabric-ll
toasterson:claude/wi-019dc57a-replace-continuous-learning-wikipedia-wi
toasterson:claude/adr-094-operating-guidance
toasterson:claude/wi-019dd0c6-phase-42c-drawer-ingest-path-embed-worke
toasterson:claude/wi-019f9f56-sessions-report-the-wrong-work-item-teac
toasterson:claude/agent-sandbox-workspace-root
toasterson:claude/wi-019f9a1e-17-work-items-frozen-since-2026-07-23-ag
toasterson:claude/wi-019f85d6-wave-r4-akh-doctor-read-only-7-sections
toasterson:claude/wi-019f85d7-wave-w3-birth-extras-procedural-avatar-f
toasterson:claude/wi-019f85d6-wave-r3-akhadvertisement-akh-daemon-akhs
toasterson:claude/wi-019f85b9-adversarial-review-distributed-inference
toasterson:claude/wi-019f85ba-adversarial-review-mcp-tools-kg-operatio
toasterson:claude/wi-019f8589-wi-3-session-registry-akh-session-list-i
toasterson:claude/wi-019f8589-wi-2-implement-peer-dispatch-in-delegati
toasterson:claude/wi-019f85b9-adversarial-review-heka-long-term-memory
toasterson:claude/wi-019f85b9-adversarial-review-observability-stack-3
toasterson:claude/wi-019e2501-define-fluent-infrastructure-home-state
toasterson:claude/cool-carson-b63ef4
toasterson:feat/macmini
toasterson:claude/wi-019db054-phase-36-delegation-external-scheduling
toasterson:claude/wi-019db054-phase-32-llm-knowledge-extraction
toasterson:claude/wi-019db054-phase-30-procedural-skills
toasterson:claude/wi-019db054-phase-28-n-akh-semantic-router
toasterson:claude/wi-019db054-phase-24-sensory-grounding
toasterson:claude/wi-019db054-phase-23-affective-system
toasterson:claude/wi-019db054-phase-27-live-kg-llm-training
toasterson:claude/wi-019db054-phase-26-llm-vsa-deep-integration
toasterson:claude/wi-019db054-release-alpha-kubernetes-deployment
toasterson:claude/wi-019e3397-bug-infer-rules-creates-indiscriminate-p
toasterson:claude/wi-019dbc03-bootstrap-embedding-nlu-llm-models-via-o
toasterson:claude/wi-019db054-phase-20-active-inference
toasterson:claude/wi-019dd0c7-phase-42h-cross-tool-bridge-daemon-opena
toasterson:claude/wi-019dd0c6-phase-42g-akhipedia-auto-extraction-from
toasterson:claude/wi-019e5982-akhomed-migrate-from-redb-to-postgres-fo
toasterson:claude/wi-019e481e-mcp-provenance-filter-find-triples-by-de
toasterson:claude/wi-019e481d-bounded-snapshot-mcp-workspace-snapshot
toasterson:claude/wi-019dd122-phase-41i-unified-trace-envelope-joining
toasterson:claude/wi-019dd122-phase-41h-ooda-thinkingloop-integration
toasterson:claude/wi-019dd121-2026-04-28-synthesis-prompt-plan-tool-ca
toasterson:claude/wi-019dd0c6-phase-42f-akh-awakening-per-tool-init-cl
toasterson:claude/wi-019dd0c6-phase-42e-heka-mcp-server-8-tools-rememb
toasterson:claude/wi-019dd0c6-phase-42d-hybrid-retrieval-pgvec-vsa-kg
toasterson:claude/wi-019dd0c5-phase-41-the-thinking-engine-unified-thi
toasterson:claude/wi-019dc9c9-phase-39a-llmbackend-trait-candlelocal-i
toasterson:claude/wi-019dc9c9-phase-38a-workspace-entity-lifecycle-loa
toasterson:claude/wi-019dc614-custom-cnpg-image-bake-with-age-pgvector
toasterson:claude/wi-019dc599-phase-38-relocatable-session-based-akh-w
toasterson:claude/wi-019db054-phase-35-t5-training-infrastructure
toasterson:claude/wi-019db054-phase-34-communicative-intelligence
toasterson:claude/wi-019db054-phase-29-capability-exposure
toasterson:claude/wi-019e26ba-bug-byte-index-panic-on-utf-8-boundary-i
toasterson:claude/wi-019e1598-high-fix-agent-memory-rs-456-byte-index
toasterson:claude/wi-019e3b34-fix-akhomed-llm-integration-for-teacher
toasterson:claude/wi-019e4909-ennead-agents-lack-proper-identity-no-ri
toasterson:claude/wi-019e4909-vsa-symbols-never-grounded-ground-symbol
toasterson:claude/wi-019e3eb9-ground-vsa-symbols-in-tecton-workspace-a
No reviewers
Labels
Clear labels
No items
No labels
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/akh-medu!278
Loading…
Reference in a new issue
No description provided.
Delete branch "claude/wi-019fb44f-a-turn-goes-silent-after-its-work-is-don"
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
019fb44f-27ca-7292-ac94-3892ba166eb9.What was measured, 2026-07-30, workspace
tecton, session019fb40c-b48c-7413-9231-79363b0f6f3fThe turn succeeded and then hung.
The deliverable was complete at 17:24:10. Everything after that is dead air.
This is the same shape as the 19 stalls of 2026-07-29 — all ending at exactly
idle_secs, alllast_step="narrative"— but here the useful work demonstrablyfinished first, which makes the window much easier to reason about.
Causes eliminated by measurement (do not re-litigate these)
akh-thothduring this investigation returned 3611 chunks with a maximuminter-chunk gap of 2 seconds:
curl -N .../api/chat -d '{"model":"glm-5.2","stream":true,"think":"high",…}'.ollama.com streams long high-thinking generations fine.
succeed — the probe above is proof).
trigger "learn-on-new-triples"at a steady 4 ticks/minute straight throughthe silence (17:25 … 17:53, unbroken). The daemon takes the same
Arc<Mutex<Agent>>, so the process was alive and acquiring that lock.could not have ticked if the turn held the lock. Note the converse detail —
the minute the turn was actually working (17:23) has zero daemon
ticks, and 17:24 shows a catch-up burst of 9. That is real contention
(see the parallel-sessions work item), but it is not what causes this hang.
image
61c532f3a9ae, built from222b2f1). Itsstreaming failed … continuing non-streamingSystem message and itsStreamEvent::Keepaliveheartbeat both never fired. No chunk arrived, so no keepalive: whatever
the turn is waiting on, it is not a slow provider response.
What that leaves
The turn's messages stop, the process is healthy, the lock is free, and the drain
loop in
src/acp/mod.rs(~3590) sits intokio::time::timeout(idle, msg_rx.recv())until the watchdog. Either the worker finished and theChannelSink's sender was never dropped (sorecv()never yieldsNone), orthe worker is parked on something that issues no request at all.
One candidate was checked and cleared: the
Arc<ChannelSink>cloned into theToolExecutionTracker(mod.rs:754) is torn down correctly —SessionToolGuard::drop(mod.rs:909) callsclear_tool_tracker(). If asurviving sender is the cause, it is a different clone — look for ones captured
by session-scoped MCP proxy tools or by spawned tasks, which would outlive the
guard.
Required change
when the drain loop observes the channel close. Today those two events are
indistinguishable in the log, which is why this took a day to corner. If the
worker returns and the channel does not close within a second, that is the bug,
and it should say so loudly.
depend on every clone of a sender being dropped on every path. Prefer an
explicit completion signal from the worker (a oneshot, or a sentinel message)
that the loop selects on alongside
msg_rx.Acceptance
idle_secs.if a sender clone is still alive.
Why this is the top item
Every long akh turn dies this way. On 2026-07-29 that was 22 sessions and zero
delivered work across 19 hours. The work is often already done when the turn is
killed, and the runner then scores an empty outcome and re-dispatches — so this
one defect manufactures both the throughput loss and a large share of the false
parks.
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.