@@ -46,12 +46,22 @@ watchdog heartbeats `POST /sessions/streams/heartbeat` every 30s (`sessions/aliv
4646 (` services/runner/src/engines/sandbox_agent/acp-interactions.ts:166-200 ` ) emits stream event
4747 `{type:"interaction_request", kind:"user_approval", payload:{toolCallId, toolCall,
4848 availableReplies, options}}` , creates a durable **interactions row** (kind ` user_approval`,
49- status ` pending ` , ` data.request={tool,args} ` + stored workflow ` references ` —
50- ` services/runner/src/sessions/interactions.ts:55-93 ` → ` POST /sessions/interactions/ ` ), and
49+ status ` pending ` , ` data.request={tool,args} ` + stored workflow ` references ` + the turn's
50+ ** effective config** ` data.parameters ` —
51+ ` services/runner/src/sessions/interactions.ts ` ` buildInteractionData ` →
52+ ` POST /sessions/interactions/ ` ), and
5153 the turn ends ` stopReason:"paused" ` . The sandbox ** parks warm** in the in-process
5254 ` SessionPool ` (` awaiting_approval ` , TTL ` approvalTtlMs ` = ** 5 min** ,
5355 ` session-identity.ts:31,34 ` ; ` server.ts:427-455 ` ). After TTL: sandbox evicted, the pending
5456 row stays actionable for ** 7 days** (` interactions/dao.py:31 ` , 209-214).
57+ > ** ` data.parameters ` (effective-turn-config plan, 2026-07-29).** The row now carries the
58+ > post-hydration config the gated turn was RUNNING, stamped by the SDK onto the ` /run ` wire
59+ > as ` effectiveParameters ` and echoed here opaquely by the runner. An out-of-band answer
60+ > replays it as the resume's ` data.parameters ` , which suppresses reference hydration and
61+ > reproduces the turn — without it a references-only resume runs the referenced variant's
62+ > HEAD revision, which for a dirty run means the wrong model, instructions and ** tool
63+ > permissions** . A row written before this landed (or one whose config was over the 64 KB
64+ > stamp cap) has no ` parameters ` and is still answerable — it just degrades to hydration.
55652 . ** Durable visibility (twice over):** the ` interaction_request ` event is a session record
5666 (replayable), and the interactions row is queryable via ` POST /sessions/interactions/query `
5767 ` {query:{session_id?, actionable_only:true}} ` — ` session_id ` is OPTIONAL
0 commit comments