Skip to content

fix(cloud-agent-next): recover an accepted no-output turn once before failing it - #6582

Merged
iscekic merged 2 commits into
mainfrom
kwf/28572-e-wrapper-no-output-5187
Sep 23, 2026
Merged

iscekic merged 2 commits into
mainfrom
kwf/28572-e-wrapper-no-output-5187

Conversation

@iscekic

@iscekic iscekic commented Sep 22, 2026 •

Copy link
Copy Markdown
Collaborator

Changelog for users

  • A turn whose runtime stops producing output no longer ends as "Response failed" on the first detection.
  • The harness re-dispatches the accepted turn automatically on a fresh runtime.
  • The message the user typed survives the recovery and runs once.
  • Only a second identical no-output detection ends the turn as "Response failed".

Changelog for maintainers

  • Recovery chosen: automatic re-dispatch of the same durable turn on a fresh runtime, reusing the pending-drain and queue-retry machinery. The one-tap user retry was rejected: the turn is already recoverable server-side, so it needs no user action.
  • Both producers of wrapper_no_output are covered: the accepted-message inactivity timeout in SandboxSession.failOverdueAcceptedMessage and the legacy wrapper no-output watchdog in handleUnhealthyWrapper.
  • The typed message is held in the record's immutable intent (or admissionSnapshot; legacy rows use legacyAdmissionConstraints) and re-queued unchanged.
  • One recoveryAttempts counter on the message state bounds both producers to a single automatic recovery.
  • A second identical detection keeps the terminal path and records the attempt count as attempts in the failure payload.
  • Reconcile before recover: a completed assistant reply found in stored events settles the turn instead of re-running it.
  • Review first: the recovery clears every dispatch and terminal field, including the old operation proof, so a late result cannot revive the retired authorization.
  • Tests: a DO integration test drives the inactivity producer; wrapper-supervisor unit tests drive the watchdog producer; each asserts recovery then a terminal second failure.

E2E proof — log excerpts

[e1] Legacy wrapper no-output watchdog recovers a turn automatically (mobile, ne -> pass :: Producer-2 recovery proved in real workerd+DO by the pack's integration tier: e1-2-watchdog-integration.log quotes 'Wrapper liveness no-output recovery re-queued the accepted turn' with producer 'wrapper_no_output_watchdog' and recoveryAttempts: 1 before any 'Session message terminalized', so the first detection re-queues instead of terminal-failing; no mobile device fleet exists in this backend section (platform empty), so the device UI was not exercised.
[e2] A second identical watchdog silence ends terminal (mobile, needs:fault: rep -> pass :: e2-second-detection-terminal.log quotes 'Session message terminalized' with finalStatus 'failed' and completionSource 'wrapper_failure' from the passing test 'fails the second identical no-output detection with the attempt count', and e1-2-watchdog-integration.log quotes the same second detection classified code 'wrapper_no_output' stage 'post_dispatch_no_activity' reason 'wrapper_liveness' after exactly one recovery.
[p1] Control-plane accepted-inactivity recovery and second-failure terminal (web -> pass :: Proved from the worker integration harness as the advisory permits: p1-inactivity-integration.log quotes recovery 'redispatched' producer 'accepted_inactivity' recoveryAttempts: 1, then the second detection with attempts: 2 and cause 'accepted_overdue', i.e. one automatic re-dispatch then terminal with the attempt count recorded.
/home/igor_kilocode_ai/.local/share/kwf/sections/28572-e-wrapper-no-output-5187/e2e-backend/e1-first-detection-recovers.log
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > exhausts failover publication after persisted 2, 4, and 8 second retries
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > quarantines cleanup after five failed attempts
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > quarantines the fifth cleanup attempt when its watchdog expires
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > releases an exhausted cleanup once a recheck confirms wrapper absence
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > does not recheck an exhausted cleanup before its recheck deadline
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > falls back to one interval for exhausted leases without a persisted recheck deadline
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > keeps an exhausted cleanup fenced when the recheck still observes the wrapper
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > records sandbox inspection failures from an exhausted recheck without releasing
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > releases a legacy exhausted cleanup quarantined without a recheck deadline
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > forces an exhausted cleanup recheck on demand even inside the cadence window
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > keeps the lease fenced when the forced recheck still observes the wrapper
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > does not force a recheck when the lease is not exhausted
/home/igor_kilocode_ai/.local/share/kwf/sections/28572-e-wrapper-no-output-5187/e2e-backend/e1-2-watchdog-integration.log
  tags: { '$logger': { level: 'debug' } },
  messageId: 'msg_018f1e2d3c4bColdFailMsAbCd',
  attempts: 1,
  error: 'Sandbox connect failed'
}
stdout | test/integration/session/execute-directly-failure.test.ts > hot delivery failure preserves existing wrapper identity > failed cold delivery fences its run and retains physical cleanup respons
{
  message: 'Failed to flush pending session message',
  level: 'warn',
  time: '2026-09-22T18:40:45.750Z',
  tags: { '$logger': { level: 'debug' } },
<redacted>
  messageId: 'msg_018f1e2d3c4bColdFailMsAbCd',
  error: 'Sandbox connect failed',
  attempts: 1,
  exhausted: false,
  nextFlushAttemptAt: 1790102447749
}
 ✓ |integration| test/integration/session/execute-directly-failure.test.ts > hot delivery failure preserves existing wrapper identity > failed hot delivery does not clear wrapper identity for already 
 ✓ |integration| test/integration/session/execute-directly-failure.test.ts > hot delivery failure preserves existing wrapper identity > failed cold delivery fences its run and retains physical cleanup
 Test Files  1 passed (1)
      Tests  12 passed (12)
   Start at  18:40:35
   Duration  10.18s (transform 3.94s, setup 0ms, import 8.46s, tests 1.05s, environment 0ms)
/home/igor_kilocode_ai/.local/share/kwf/sections/28572-e-wrapper-no-output-5187/e2e-backend/e2-second-detection-terminal.log
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > exhausts failover publication after persisted 2, 4, and 8 second retries
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > quarantines cleanup after five failed attempts
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > quarantines the fifth cleanup attempt when its watchdog expires
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > releases an exhausted cleanup once a recheck confirms wrapper absence
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > does not recheck an exhausted cleanup before its recheck deadline
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > falls back to one interval for exhausted leases without a persisted recheck deadline
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > keeps an exhausted cleanup fenced when the recheck still observes the wrapper
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > records sandbox inspection failures from an exhausted recheck without releasing
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > releases a legacy exhausted cleanup quarantined without a recheck deadline
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > forces an exhausted cleanup recheck on demand even inside the cadence window
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > keeps the lease fenced when the forced recheck still observes the wrapper
 ↓ |unit| src/session/wrapper-supervisor.test.ts > WrapperSupervisor > does not force a recheck when the lease is not exhausted
/home/igor_kilocode_ai/.local/share/kwf/sections/28572-e-wrapper-no-output-5187/e2e-backend/p1-inactivity-integration.log
  message: 'Sandbox control diagnostic',
  level: 'info',
  time: '2026-09-22T18:41:10.522Z',
  tags: { '$logger': { level: 'debug' } },
<redacted>
  messageId: 'msg_no_output',
  expectedWrapperInstanceId: 'd0e63dc4-63e1-450a-ab7d-7ddfae2e5b7b',
  epoch: 0,
  acceptedAt: 1790102050513,
  lastActivityAt: 1790102050513,
  stage: 'inactivity',
  reason: 'inactivity_due',
  attempts: 2,
  phase: 'finished',
  result: 'inactivity',
  durationMs: 6,
  logTag: 'sandbox_control',
  diagnosticEvent: 'accepted_reconciliation'
}
 ✓ |integration| test/integration/sandbox-session-no-output-recovery.test.ts > sandbox session no-output recovery > re-dispatches an accepted no-output turn once, then terminalizes with the attempt co
 Test Files  1 passed (1)
      Tests  1 passed (1)
   Start at  18:41:01
   Duration  8.80s (transform 3.77s, setup 0ms, import 8.04s, tests 57ms, environment 0ms)
Owner request

Fix: the harness ends an accepted turn as "Response failed", and the user gets no automatic recovery.

Production evidence, Pylon issue 28572, session ses_f39900bddfffUK9xomduMB1zP7, workspace workspace_920df027-f52b-484e-9db6-4b447fd4cb40:

  • The read replica row in cloud_agent_session_runs for message msg_0c7ef30a0000s6QOT6ROltSAmB reads: status failed, queued_at 2026-09-22T07:05:35Z, dispatch_accepted_at 2026-09-22T07:06:10Z, terminal_at 2026-09-22T07:24:04Z, failure_stage post_dispatch_no_activity, failure_code wrapper_no_output, failure_responsibility platform, failure_reason wrapper_liveness.
  • The Axiom diagnostic for that exact message names the producer. accepted_reconciliation at 2026-09-22T07:24:05.506Z with messageId msg_0c7ef30a0000s6QOT6ROltSAmB, stage inactivity, reason inactivity_due, phase finished, result inactivity, durationMs 783. So the accepted-message inactivity timeout ran. The wrapper no-output watchdog did not.
  • The chain, read in the source: services/cloud-agent-next/src/sandbox-session/SandboxSession.ts:3101 failOverdueAcceptedMessage; :3120-3124 fails the message with reason accepted_overdue; services/cloud-agent-next/src/sandbox-session/control-dispatch.ts:207-208 holds the safe text "Turn did not complete"; services/cloud-agent-next/src/telemetry/control-plane-failure.ts:97-98 maps accepted_overdue to stage post_dispatch_no_activity and code wrapper_no_output; packages/worker-utils/src/cloud-agent-failure.ts:392-395 maps code wrapper_no_output to responsibility platform and reason group wrapper_liveness.
  • A second producer carries the same code: services/cloud-agent-next/src/session/wrapper-supervisor.ts:1204-1207 logs "Wrapper liveness no-output deadline expired" and raises wrapper_no_output for a wrapper that writes nothing during the watchdog window.
  • services/cloud-agent-next/src/session/safe-failure-projection.ts:55 holds the safe text "Agent wrapper made no execution progress during the watchdog window".
  • The app renders the failed turn with the title "Response failed" from apps/mobile/src/components/agents/message-failure-state.ts:92 and apps/mobile/src/i18n/locales/en.json:2350.
  • The user reported it as: "That session also ended so far with response failed - that's a new one, I have not seen that error before".

Requirements:

  1. A turn that the wrapper accepted must not become a terminal failure while the session can still be recovered. A user's typed message is the thing at stake.
  2. Name both producers in the fix. The inactivity path fired here; the watchdog path shares the code. A fix that covers only one leaves the same user-visible outcome.
  3. Decide one recovery and name it: re-dispatch the message on a fresh runtime, or mark the run recoverable and let the user retry in one tap. Reuse the existing liveness, re-dispatch and queue-retry machinery. Do not add a second watchdog.
  4. The message the user typed must not be lost. State where it is held across the recovery.
  5. Keep the current terminal path for a turn that fails the same way twice, and record the attempt count.
  6. Add a test for each producer: one that starves the accepted turn of activity, and one that stops wrapper output after an accepted dispatch. Assert the recovery, then a second failure that ends terminal.

Report the recovery path chosen, why the other was rejected, and which producer each new test drives.

Production record (automatic, 2026-09-22):

Production record for ses_f39900bddfffUK9xomduMB1zP7

Axiom, last 72 h

vercel

  • 2026-09-22T00:07:02 [info] [CloudAgentNextClient.prepareSession] Request completed { elapsed: 1938, kiloSessionId: 'ses_f39900bddfffUK9xomduMB1zP7', cloudAgentSessionId: 'workspace_920df027-f52b-484e-9db6-4b447fd4cb40' }
    cloudflare-logpush
  • 2026-09-22T14:53:49 [ok] session-ingest {"event":"kilo_sdk_history_read","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","limit":50,"hasCursor":false,"outcome":"ok","messageCount":50,"omittedItemCount":0,"hasNextCursor":true,"durationMs":686}
  • 2026-09-22T14:50:38 [ok] session-ingest {"event":"kilo_sdk_history_read","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","limit":50,"hasCursor":false,"outcome":"ok","messageCount":50,"omittedItemCount":0,"hasNextCursor":true,"durationMs":638}
  • 2026-09-22T07:25:41 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"846335ba-2a29-4f42-8a78-30f7ce0260ec","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":23,"items":1,"metadataChanges":0}
  • 2026-09-22T07:25:41 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"88a70b4f-4e59-4c40-8033-e314797adeac","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":66,"items":1,"metadataChanges":1} | {"event":"remote_session_attention_outcome","sessionId":"ses_f39900
  • 2026-09-22T07:25:41 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"168cfd2b-af31-4c5b-834f-187a0717e0b7","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":719,"actualBytes":719,"durationMs":24,"items":1,"metadataChanges":0}
  • 2026-09-22T07:25:41 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"95198bd5-e7de-425f-9990-c40cebe1e028","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":26954,"actualBytes":26954,"durationMs":456,"items":1,"metadataChanges":0}
  • 2026-09-22T07:19:10 [ok] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"b8a11940-eaa8-408e-865f-0802886a9bc5","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":27696,"actualBytes":27696,"durationMs":215,"items":3,"metadataChanges":1} | {"event":"remote_session_attention_outcome","sessionId":"ses
  • 2026-09-22T07:19:10 [ok] cloud-agent-next {"message":"Handling request","level":"info","time":"2026-09-22T07:16:58.956Z","tags":{"source":"worker-entry","method":"POST","path":"/api/session/ses_f39900bddfffUK9xomduMB1zP7/ingest","$logger":{"level":"debug"}}}
  • 2026-09-22T07:18:11 [ok] cloud-agent-next {"message":"Handling request","level":"info","time":"2026-09-22T07:16:34.422Z","tags":{"source":"worker-entry","method":"POST","path":"/api/session/ses_f39900bddfffUK9xomduMB1zP7/ingest","$logger":{"level":"debug"}}}
  • 2026-09-22T07:18:11 [ok] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"68e878f9-4db4-48f4-b514-67171bb15d5d","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":32632,"actualBytes":32632,"durationMs":202,"items":3,"metadataChanges":0}
  • 2026-09-22T07:18:09 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"c3c819e0-c2c9-4b23-907f-15224b9430e0","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":705,"actualBytes":705,"durationMs":24,"items":1,"metadataChanges":0}
  • 2026-09-22T07:18:09 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"13f458f8-c260-414b-8075-095b61f791ed","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":698,"actualBytes":698,"durationMs":19,"items":1,"metadataChanges":0}
  • 2026-09-22T07:18:09 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"cca74e34-043c-41b9-9123-df7f1e5c36f6","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":223,"actualBytes":223,"durationMs":21,"items":1,"metadataChanges":0}
  • 2026-09-22T07:18:09 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"4ad3666b-6b34-40c6-aa0f-79afb98d10ba","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":21,"items":1,"metadataChanges":0}
  • 2026-09-22T07:18:09 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"9b801d5f-6507-4e4c-bff4-d5753cce1e44","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T07:18:09 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"4918330a-7029-4c35-9bab-dfab4008ad6c","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":521,"actualBytes":521,"durationMs":40,"items":1,"metadataChanges":0}
  • 2026-09-22T07:18:09 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"0702cc73-2401-404d-83a4-d441a9ee36d0","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":778,"actualBytes":778,"durationMs":15,"items":1,"metadataChanges":0}
  • 2026-09-22T07:18:09 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"421714ba-12b4-461e-80d9-37a6fbb509f3","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":26871,"actualBytes":26871,"durationMs":22,"items":1,"metadataChanges":0}
  • 2026-09-22T07:18:09 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"3ff9f380-19a3-4c64-b0b6-2f58ed6e96e4","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":32152,"actualBytes":32152,"durationMs":24,"items":1,"metadataChanges":0}
  • 2026-09-22T07:17:00 [ok] cloud-agent-next {"message":"Handling request","level":"info","time":"2026-09-22T07:16:06.219Z","tags":{"source":"worker-entry","method":"POST","path":"/api/session/ses_f39900bddfffUK9xomduMB1zP7/ingest","$logger":{"level":"debug"}}}
  • 2026-09-22T07:17:00 [ok] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"06713d14-7dda-4f57-8912-4bbc356901c3","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":450,"actualBytes":450,"durationMs":147,"items":2,"metadataChanges":0}
  • 2026-09-22T07:17:00 [ok] cloud-agent-next {"message":"Handling request","level":"info","time":"2026-09-22T07:15:59.724Z","tags":{"source":"worker-entry","method":"POST","path":"/api/session/ses_f39900bddfffUK9xomduMB1zP7/ingest","$logger":{"level":"debug"}}}
  • 2026-09-22T07:17:00 [ok] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"238e2c9a-2a38-430c-aa92-90c7882d7b05","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":14863,"actualBytes":14863,"durationMs":209,"items":10,"metadataChanges":0}
  • 2026-09-22T07:10:13 [ok] cloud-agent-next {"message":"Control-plane child session creation failed","level":"warn","time":"2026-09-22T07:08:45.527Z","tags":{"$logger":{"level":"debug"}},"rootKiloSessionId":"ses_f39900bddfffUK9xomduMB1zP7","eventKiloSessionId":"ses_f380ec6f2ffegLzooSenPmKZEO","status":500}
  • 2026-09-22T07:10:12 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"705ef593-f48e-4a81-9400-2a93e692d986","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":4123,"actualBytes":4123,"durationMs":21,"items":1,"metadataChanges":0}
  • 2026-09-22T07:10:11 [ok] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"a8946712-f92d-46af-8453-effe982d6732","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":4736,"actualBytes":4736,"durationMs":161,"items":2,"metadataChanges":0}
  • 2026-09-22T07:10:11 [ok] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"a4d8b585-5b85-41cc-9c70-0a6b9e9b7a42","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":120262,"actualBytes":120262,"durationMs":495,"items":5,"metadataChanges":0}
  • 2026-09-22T07:09:20 [ok] cloud-agent-next {"message":"Handling request","level":"info","time":"2026-09-22T07:07:50.911Z","tags":{"source":"worker-entry","method":"POST","path":"/api/session/ses_f39900bddfffUK9xomduMB1zP7/ingest","$logger":{"level":"debug"}}}
  • 2026-09-22T07:09:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"aa90dd7b-3ed7-489c-b3f9-ee29d68de766","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":623,"actualBytes":623,"durationMs":25,"items":1,"metadataChanges":0}
  • 2026-09-22T07:09:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"46bc28fb-20d7-442e-8347-921751d57971","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":3921,"actualBytes":3921,"durationMs":21,"items":1,"metadataChanges":0}
  • 2026-09-22T07:09:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"28ece5fc-504f-4e25-b2b4-a361b6c9c02c","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":3816,"actualBytes":3816,"durationMs":20,"items":1,"metadataChanges":0}
  • 2026-09-22T07:09:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"926dc9bf-2e5c-4eb6-959e-a6ebe93a08af","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":45214,"actualBytes":45214,"durationMs":27,"items":1,"metadataChanges":0}
  • 2026-09-22T07:09:08 [ok] cloud-agent-next {"message":"Handling request","level":"info","time":"2026-09-22T07:07:45.056Z","tags":{"source":"worker-entry","method":"POST","path":"/api/session/ses_f39900bddfffUK9xomduMB1zP7/ingest","$logger":{"level":"debug"}}}
  • 2026-09-22T07:09:08 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"04f6c1f3-196f-411a-8e5c-ea399683ba4f","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":223,"actualBytes":223,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T07:08:11 [ok] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"f3b7f480-bf99-4ff8-a25f-27d319278213","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":2282,"actualBytes":2282,"durationMs":175,"items":5,"metadataChanges":0}
  • 2026-09-22T07:08:11 [ok] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"a89d0e2a-f703-4ef0-81f6-434b44d8525e","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":2210,"actualBytes":2210,"durationMs":160,"items":5,"metadataChanges":0}
  • 2026-09-22T07:08:11 [ok] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"19dae7d9-8871-4459-bc59-41c23fd84202","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":2420,"actualBytes":2420,"durationMs":162,"items":6,"metadataChanges":0}
  • 2026-09-22T07:08:10 [ok] cloud-agent-next {"message":"Handling request","level":"info","time":"2026-09-22T07:06:47.532Z","tags":{"source":"worker-entry","method":"POST","path":"/api/session/ses_f39900bddfffUK9xomduMB1zP7/ingest","$logger":{"level":"debug"}}}
  • 2026-09-22T07:08:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"7a59d1d2-ed68-4b27-9506-56794e58d5e0","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":698,"actualBytes":698,"durationMs":19,"items":1,"metadataChanges":0}
  • 2026-09-22T07:08:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"96fad18c-f5c3-4815-b61a-d96153650cbe","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":19,"items":1,"metadataChanges":0}
  • 2026-09-22T07:08:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"47d89011-9cf8-4b2c-ae2b-5beeb08db1fb","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":278,"actualBytes":278,"durationMs":20,"items":1,"metadataChanges":0}
  • 2026-09-22T07:08:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"f127e18a-e845-429d-afe5-cf71d66f73dd","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":278,"actualBytes":278,"durationMs":20,"items":1,"metadataChanges":0}
  • 2026-09-22T07:08:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"8a18e12c-49d1-41bb-8590-266f1836f020","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":625,"actualBytes":625,"durationMs":21,"items":1,"metadataChanges":0}
  • 2026-09-22T07:08:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"6f1ef126-a7f2-45b8-8066-b8d4f651c380","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":22,"items":1,"metadataChanges":1}
  • 2026-09-22T07:08:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"82b84d16-6e20-48ee-aee8-0f856e75b09f","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":698,"actualBytes":698,"durationMs":20,"items":1,"metadataChanges":0}
  • 2026-09-22T07:08:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"f84c2c19-1c25-4ff2-bab6-edc4f556414e","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":1241,"actualBytes":1241,"durationMs":22,"items":1,"metadataChanges":0}
  • 2026-09-22T07:08:01 [ok] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"197a8948-9b7a-4d00-b12f-0f7b8f7950aa","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":450,"actualBytes":450,"durationMs":162,"items":2,"metadataChanges":0}
  • 2026-09-22T07:08:01 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"90a57d28-2906-443a-b7f0-8ce9e1efc584","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":32,"items":1,"metadataChanges":0}
  • 2026-09-22T07:08:01 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"bdfae19f-3dc2-41ca-9c3a-151cfa43adb9","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":254,"actualBytes":254,"durationMs":37,"items":1,"metadataChanges":0}
  • 2026-09-22T07:08:01 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"32973d27-9e5b-4a63-b639-a8b91f42618c","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":277,"actualBytes":277,"durationMs":17,"items":1,"metadataChanges":0}
  • 2026-09-22T07:08:00 [ok] cloud-agent-next {"message":"Handling request","level":"info","time":"2026-09-22T07:06:15.938Z","tags":{"source":"worker-entry","method":"POST","path":"/api/session/ses_f39900bddfffUK9xomduMB1zP7/ingest","$logger":{"level":"debug"}}}
  • 2026-09-22T07:08:00 [ok] cloud-agent-next {"message":"Handling request","level":"info","time":"2026-09-22T07:06:14.650Z","tags":{"source":"worker-entry","method":"POST","path":"/api/session/ses_f39900bddfffUK9xomduMB1zP7/ingest","$logger":{"level":"debug"}}}
  • 2026-09-22T07:08:00 [ok] cloud-agent-next {"message":"Handling request","level":"info","time":"2026-09-22T07:06:13.598Z","tags":{"source":"worker-entry","method":"POST","path":"/api/session/ses_f39900bddfffUK9xomduMB1zP7/title","$logger":{"level":"debug"}}}
  • 2026-09-22T07:08:00 [ok] cloud-agent-next {"message":"Handling request","level":"info","time":"2026-09-22T07:06:12.584Z","tags":{"source":"worker-entry","method":"POST","path":"/api/session/ses_f39900bddfffUK9xomduMB1zP7/ingest","$logger":{"level":"debug"}}}
  • 2026-09-22T07:08:00 [ok] cloud-agent-next {"message":"Handling request","level":"info","time":"2026-09-22T07:05:59.918Z","tags":{"source":"worker-entry","method":"GET","path":"/api/session/ses_f39900bddfffUK9xomduMB1zP7/export","$logger":{"level":"debug"}}}
  • 2026-09-22T06:48:58 [ok] session-ingest {"event":"kilo_sdk_history_read","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","limit":50,"hasCursor":false,"outcome":"ok","messageCount":50,"omittedItemCount":0,"hasNextCursor":true,"durationMs":324}
  • 2026-09-22T05:13:02 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"130fe3c9-998a-4560-8ab9-0b07003971a3","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":238,"actualBytes":238,"durationMs":9,"items":1,"metadataChanges":0}
  • 2026-09-22T05:12:04 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"7a713491-058d-4bd1-837c-4a287fae9d1e","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":277,"actualBytes":277,"durationMs":17,"items":1,"metadataChanges":0}
  • 2026-09-22T05:12:04 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"efdd786b-bd10-4c5e-8601-743914d658ac","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":25,"items":1,"metadataChanges":1} | {"event":"remote_session_attention_outcome","sessionId":"ses_f39900
  • 2026-09-22T05:12:04 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"c37c0e6f-68fe-4020-ac91-17fd1108cc4d","sessionId":"ses_f39900bddfffUK9xomduMB1zP7","ingestVersion":2,"declaredBytes":698,"actualBytes":698,"durationMs":19,"items":1,"metadataChanges":0}
    No line carries this term in: supabase-production.

The session row, read replica

session_id | status | created_at | updated_at

  • ses_f39900bddfffUK9xomduMB1zP7|idle|2026-09-22 00:07:01.414358+00|2026-09-22 07:24:06.324171+00

Log archives, R2 kilocode-sessions

NOT READ: R2 keys are indexed by the agent id, not the session id; take the agent_* from the worker logs above and query that.

Sentry, last 72h

No Sentry issue carries this term.

Production record (automatic, 2026-09-22):

Production record for msg_0c7ef30a0000s6QOT6ROltSAmB

Axiom, last 72 h

cloudflare-logpush

  • 2026-09-22T07:25:42 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:24:05.472Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","sandboxId":"usr-c63a46adfe234dc8227806b49d539f461938d55d18da1ad4","wrapperInstanceId":"8e9145b2-b276-49dc-a016-f
  • 2026-09-22T07:25:41 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:24:04.723Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","messageId":"msg_0c7ef30a0000s6QOT6ROltSAmB","expectedWrapperInstanceId":"8e9145b2-b276-49dc-a016-fcff9f3b1492","
  • 2026-09-22T07:24:40 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:23:06.550Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","messageId":"msg_0c7ef30a0000s6QOT6ROltSAmB","expectedWrapperInstanceId":"8e9145b2-b276-49dc-a016-fcff9f3b1492","
  • 2026-09-22T07:24:40 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:23:36.744Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","messageId":"msg_0c7ef30a0000s6QOT6ROltSAmB","expectedWrapperInstanceId":"8e9145b2-b276-49dc-a016-fcff9f3b1492","
  • 2026-09-22T07:23:33 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:22:36.368Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","messageId":"msg_0c7ef30a0000s6QOT6ROltSAmB","expectedWrapperInstanceId":"8e9145b2-b276-49dc-a016-fcff9f3b1492","
  • 2026-09-22T07:23:31 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:22:06.173Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","messageId":"msg_0c7ef30a0000s6QOT6ROltSAmB","expectedWrapperInstanceId":"8e9145b2-b276-49dc-a016-fcff9f3b1492","
  • 2026-09-22T07:23:30 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:21:35.924Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","messageId":"msg_0c7ef30a0000s6QOT6ROltSAmB","expectedWrapperInstanceId":"8e9145b2-b276-49dc-a016-fcff9f3b1492","
  • 2026-09-22T07:22:31 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:21:05.714Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","messageId":"msg_0c7ef30a0000s6QOT6ROltSAmB","expectedWrapperInstanceId":"8e9145b2-b276-49dc-a016-fcff9f3b1492","
  • 2026-09-22T07:21:30 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:20:05.336Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","messageId":"msg_0c7ef30a0000s6QOT6ROltSAmB","expectedWrapperInstanceId":"8e9145b2-b276-49dc-a016-fcff9f3b1492","
  • 2026-09-22T07:21:29 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:20:35.514Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","messageId":"msg_0c7ef30a0000s6QOT6ROltSAmB","expectedWrapperInstanceId":"8e9145b2-b276-49dc-a016-fcff9f3b1492","
  • 2026-09-22T07:21:27 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:19:35.144Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","messageId":"msg_0c7ef30a0000s6QOT6ROltSAmB","expectedWrapperInstanceId":"8e9145b2-b276-49dc-a016-fcff9f3b1492","
  • 2026-09-22T07:20:21 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:19:04.950Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","messageId":"msg_0c7ef30a0000s6QOT6ROltSAmB","expectedWrapperInstanceId":"8e9145b2-b276-49dc-a016-fcff9f3b1492","
  • 2026-09-22T07:19:12 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:18:34.742Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","messageId":"msg_0c7ef30a0000s6QOT6ROltSAmB","expectedWrapperInstanceId":"8e9145b2-b276-49dc-a016-fcff9f3b1492","
  • 2026-09-22T07:08:10 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:06:09.751Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","messageId":"msg_0c7ef30a0000s6QOT6ROltSAmB","attemptId":"e652d6b2-835a-47e8-a372-fd6f8c9a0e00","operationId":"e6
  • 2026-09-22T07:08:10 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:06:10.103Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","sandboxId":"usr-c63a46adfe234dc8227806b49d539f461938d55d18da1ad4","wrapperInstanceId":"8e9145b2-b276-49dc-a016-f
  • 2026-09-22T07:08:10 [ok] cloud-agent-next {"message":"Sandbox control diagnostic","level":"info","time":"2026-09-22T07:06:09.529Z","tags":{"$logger":{"level":"debug"}},"sessionId":"workspace_920df027-f52b-484e-9db6-4b447fd4cb40","sandboxId":"usr-c63a46adfe234dc8227806b49d539f461938d55d18da1ad4","wrapperInstanceId":"8e9145b2-b276-49dc-a016-f
    No line carries this term in: vercel, supabase-production.

The session row, read replica

NOT READ: not a session id.

Log archives, R2 kilocode-sessions

NOT READ: R2 keys are indexed by the agent id, not the session id; take the agent_* from the worker logs above and query that.

Sentry, last 72h

No Sentry issue carries this term.

Follow-ups (not changed here)

E2E proof — log excerpts

[e1] Legacy wrapper no-output watchdog recovers a turn automatically (mobile, ne -> pass :: Producer-2 recovery proved in real workerd+DO by the pack's integration tier: e1-2-watchdog-integration.log quotes 'Wrapper liveness no-output recovery re-queued the accepted turn' with producer 'wrapper_no_output_watchdog' and recoveryAttempts: 1 before any 'Session message terminalized', so the first detection re-queues instead of terminal-failing; no mobile device fleet exists in this backend section (platform empty), so the device UI was not exercised.
[e2] A second identical watchdog silence ends terminal (mobile, needs:fault: rep -> pass :: e2-second-detection-terminal.log quotes 'Session message terminalized' with finalStatus 'failed' and completionSource 'wrapper_failure' from the passing test 'fails the second identical no-output detection with the attempt count', and e1-2-watchdog-integration.log quotes the same second detection classified code 'wrapper_no_output' stage 'post_dispatch_no_activity' reason 'wrapper_liveness' after exactly one recovery.
[p1] Control-plane accepted-inactivity recovery and second-failure terminal (web -> pass :: Proved from the worker integration harness as the advisory permits: p1-inactivity-integration.log quotes recovery 'redispatched' producer 'accepted_inactivity' recoveryAttempts: 1, then the second detection with attempts: 2 and cause 'accepted_overdue', i.e. one automatic re-dispatch then terminal with the attempt count recorded.

Comment thread services/cloud-agent-next/src/sandbox-session/SandboxSession.ts
Comment thread services/cloud-agent-next/src/sandbox-session/SandboxSession.ts
Comment thread services/cloud-agent-next/src/session/wrapper-supervisor.ts Outdated
Comment thread services/cloud-agent-next/src/session/session-message-queue.ts Outdated
Comment thread services/cloud-agent-next/src/session/session-message-queue.ts Outdated
@kilo-code-bot

kilo-code-bot Bot commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Executive Summary

All five previously reported findings are fixed at HEAD (85c3ce377); the reconciliation and recovery guards added in this incremental diff introduce no new issues in the changed code.

Files Reviewed (15 files)
  • services/cloud-agent-next/AGENTS.md
  • services/cloud-agent-next/src/sandbox-session/SandboxSession.ts
  • services/cloud-agent-next/src/sandbox-session/accepted-stored-settlement.test.ts
  • services/cloud-agent-next/src/sandbox-session/accepted-stored-settlement.ts
  • services/cloud-agent-next/src/sandbox-session/session-message-queue.test.ts
  • services/cloud-agent-next/src/sandbox-session/session-message-queue.ts
  • services/cloud-agent-next/src/session/preparation-test-helpers.ts
  • services/cloud-agent-next/src/session/session-message-queue.test.ts
  • services/cloud-agent-next/src/session/session-message-queue.ts
  • services/cloud-agent-next/src/session/session-message-state.test.ts
  • services/cloud-agent-next/src/session/session-message-state.ts
  • services/cloud-agent-next/src/session/wrapper-supervisor.test.ts
  • services/cloud-agent-next/src/session/wrapper-supervisor.ts
  • services/cloud-agent-next/test/integration/sandbox-session-no-output-recovery.test.ts
  • services/cloud-agent-next/test/integration/session/execute-directly-failure.test.ts
Previous Review Summary (commit 30a0579)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit 30a0579)

Status: 5 Issues Found | Recommendation: Address before merge

Executive Summary

The control-plane no-output recovery can requeue a turn that was just stopped and re-dispatches without reconciling stored assistant events, while the legacy producer mislabels unrecovered failures as retry exhaustion and drops prompt attachments.

Overview

Severity Count
CRITICAL 0
WARNING 4
SUGGESTION 1
Issue Details (click to expand)

WARNING

File Line Issue
services/cloud-agent-next/src/sandbox-session/SandboxSession.ts 3126 Recovery ignores a concurrent Stop; requeues a turn whose cancellation is set, which then cannot be dispatched or settled.
services/cloud-agent-next/src/sandbox-session/SandboxSession.ts 3127 Re-dispatches without reconciling stored assistant events first (legacy producer does), risking duplicate execution and side effects.
services/cloud-agent-next/src/session/wrapper-supervisor.ts 1075 Emits attempts for wrapper_no_output even when no recovery was spent; client maps it to retry exhaustion.
services/cloud-agent-next/src/session/session-message-queue.ts 1351 Legacy recovery reconstruction drops prompt attachments held in legacyAdmissionConstraints.

SUGGESTION

File Line Issue
services/cloud-agent-next/src/session/session-message-queue.ts 1325 Queued state is committed before the pending row; a failed pending write strands the turn with no dispatch or terminal signal.
Files Reviewed (11 files)
  • services/cloud-agent-next/AGENTS.md - 0 issues
  • services/cloud-agent-next/src/sandbox-session/SandboxSession.ts - 2 issues
  • services/cloud-agent-next/src/sandbox-session/session-message-queue.test.ts - 0 issues
  • services/cloud-agent-next/src/sandbox-session/session-message-queue.ts - 0 issues
  • services/cloud-agent-next/src/session/session-message-queue.ts - 2 issues
  • services/cloud-agent-next/src/session/session-message-state.test.ts - 0 issues
  • services/cloud-agent-next/src/session/session-message-state.ts - 0 issues
  • services/cloud-agent-next/src/session/wrapper-supervisor.test.ts - 0 issues
  • services/cloud-agent-next/src/session/wrapper-supervisor.ts - 1 issue
  • services/cloud-agent-next/test/integration/sandbox-session-no-output-recovery.test.ts - 0 issues
  • services/cloud-agent-next/test/integration/session/execute-directly-failure.test.ts - 0 issues

Fix these issues in Kilo Cloud


Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0

Review guidance: REVIEW.md from base branch main

@iscekic
iscekic marked this pull request as draft September 22, 2026 19:10
@iscekic
iscekic force-pushed the kwf/28572-e-wrapper-no-output-5187 branch from d253a7e to 85c3ce3 Compare September 22, 2026 22:12
@iscekic
iscekic marked this pull request as ready for review September 22, 2026 22:34
@iscekic iscekic added the human-ready The PR is ready for human review. label Sep 23, 2026
@iscekic iscekic self-assigned this Sep 23, 2026
@iscekic
iscekic merged commit 019d772 into main Sep 23, 2026
25 of 26 checks passed
@iscekic
iscekic deleted the kwf/28572-e-wrapper-no-output-5187 branch September 23, 2026 12:19
eshurakov added a commit that referenced this pull request Sep 23, 2026
Reconcile the accepted-turn watchdog with #6582: keep main's inactivity
recovery (stored settlement, single re-dispatch, accepted_overdue,
cancellation guard) and this branch's socket-blip tolerance plus the
follow-up delivery fix.

- acceptedRuntimeReadiness owns the ready/blip/stopped split; a blip keeps
  the accepted row and rearms, only an observed physical stopped is loss
- the sync boundary validates a returned ok:false frame before any
  superseded return and always rethrows in the catch
- runtimeFailureHitsAccepted owns which accepted rows a runtime failure
  affects, including the undefined-wrapper case, at the three scope sites
- follow-up delivery falls through to the alarm tail except when the
  watched row was re-queued for recovery
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

human-ready The PR is ready for human review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants