The worker store validated a tools[] pin as exactly {version, tools}, so a pin
carrying delegation_backend raised invalid_params and left the worker's store
failed for the rest of the turn (every managed-worker test timed out).
A managed worker's AIAgent holds a RuntimeSessionStore as its session_db. The store is new
in this PR and was built call by call, so reviewers found the gaps one at a time (the lease
refresh's patience_s keyword, d93039f5b4a). A mechanical sweep of every <x>._session_db /
session_db / lease-facade db call in run_agent.py and agent/*.py against the store found two
more SessionDB methods the store lacked:
- latest_conversation_role: _close_durable_failed_turn's idempotence probe. The
AttributeError was swallowed by its best-effort guard, so a failed managed turn never got
its Hermes-authored boundary and the next prompt merged into the failed request.
- get_message_role: in-place compaction's held-row liveness checks
(held_archive_watermark, the absorbed-row tail count). The AttributeError aborted the
in-place commit, so a managed worker's in-place compaction always rolled back.
Both are closed, read-only receipt operations on the owner's transaction
(session.tail_role, session.row_role), scoped to the worker's own transcript like every
other worker read.
Test: tests/agent/test_runtime_session_store_surface_parity.py parametrizes over every core
call site (fails on r11-base for get_message_role, latest_conversation_role and
refresh_session_turn_lease), plus an owner-parity check of the two reads.
Review: Adolanium reg-1 (class sweep)
(cherry picked from commit 4e7b4ff8cfc23a01c6dc98f33fca64cee626b423)
- busy_input_mode over the durable FIFO (run_inbound._hm_busy_preempt): a follow-up during a running
turn still steers into it, redirects it, or ends it before admission; before, every messaging
follow-up was queued behind a turn that could hang for its whole request timeout (chaos cell
busy_interrupt_during_provider_hang: no answer in 15 s).
- Native provenance binds a credential-less plugin platform by platform + owning profile instead
of refusing it as not_found (every turn on the chaos fake platform failed RuntimeStoreError).
- Worker tools[] pin follows main's {version, tools} shape (d956f0ae57): the owner verb stores it
content-addressed like SessionDB.update_session_tool_names, and worker session reads resolve it.
- Durable webhook destination accepts main's `mirror`/`route` delivery keys (11fb429f49); the
route-test authority fixture pins a single default-profile runner.
- Desktop: the REST bridge's `connection` was shadowed by a block-scoped const, so the profile
preference hook read `undefined.mode` after every request; the core E2E process census
recognises `gateway run` backends (the app attaches through `gateway ensure` here); canonical
group labels for fr/de/es; the #119569 reducer test uses the canonical admission receipt.
The worker session-store facade had no update_session_tool_names, so
persist_agent_tool_names swallowed the AttributeError and left
sessions.tool_names NULL; the next fresh worker re-probed check_fns from
current config and forked the cached tools prefix. The facade now persists
the pin through a closed 'session.tools' receipt operation and a rebuilt
worker reads it back from the same row.
Finding: F26.