Skip to content

fix(session-ingest): clear a busy session left by a dead CLI - #6568

Merged
iscekic merged 1 commit into
mainfrom
kwf/28572-c-stale-busy-status-de52
Sep 23, 2026
Merged

iscekic merged 1 commit into
mainfrom
kwf/28572-c-stale-busy-status-de52

Conversation

@iscekic

@iscekic iscekic commented Sep 22, 2026 •

Copy link
Copy Markdown
Collaborator

Changelog for users

  • A session whose CLI dies mid-turn no longer keeps a running spinner.
  • Its row moves to retry, so the app shows it as waiting for you to retry.
  • A session whose CLI reconnects in time stays busy and keeps its spinner.

Changelog for maintainers

  • Owner signal: the CLI socket disconnect this service already handles; the existing 600 s absence hold invokes the reset.
  • resetAttentionStatusOnCliDisconnect also clears a busy row when its status write is at least 60 s old, still writing retry.
  • The conditional update re-checks the same age predicate, so a concurrent fresher write wins and the read-back sentinel no-ops.
  • A busy row with no status_updated_at is left alone; no production writer sets status without stamping it.
  • The rule clears 11 of the 11 stale production rows and leaves 0; the clear only fires 600 s after disconnect.
  • Review first: keep the eligibility check and the WHERE re-check in metadata.ts identical; drift there clears a live row.
  • Residual: a busy row whose CLI never opened the /user/cli socket gets no absence hold, so this rule cannot reach it.
  • Unit tests cover a stale busy clear, a recent busy hold, and a null-timestamp hold.

E2E proof — log excerpts

[e1] Backend live: a busy session whose CLI dies leaves busy -> pass :: The e1 CLI socket was killed with no close frame at 17:50:13.525 (e1-cli-run.txt: 'KILL _socket.destroy() (no close frame)' / 'CLOSE 1006') and 600.035 s later the row read busy|2026-09-22 17:29:53.783011+00 -> retry|2026-09-22 18:00:13.56+00 (e1-row-before.txt, e1-row-after.txt), while the user's /api/user/web socket logged previousStatus busy and status retry (e1-web-event.txt); the scenario's fault hook fault:cli-socket-death is not in files/e2e-index.md, so the socket was driven with a small node ws client and the fixture row seeded with db.sh (no UI surface, so no UX screen applies).
[e2] Backend live: a live busy row is untouched -> pass :: After the abrupt kill at 17:59:34.403 the CLI re-attached on a new connectionId 7dc8f047-591d-4d4e-9dc3-2ceff1a56713 at 18:00:52.434 and kept heartbeating every 10 s, and 700 s after the kill the row still read busy|2026-09-22 17:39:17.162743+00 (unchanged from e2-row-before.txt) with 0 session.status.updated lines across that run's 67 web frames (e2-no-status-event.txt); the first attempt on user B was inconclusive because my test client dropped the re-attached socket after 30 s (CLOSE 4408 heartbeat timeout), so the scenario was re-run on a fresh user.
[e3] Backend live: a fresh busy write is not consumed -> pass :: The e3 row was re-stamped busy with status_updated_at=now() at 17:59:47.7, 25.8 s before the hold fired at 18:00:13.56, and it still read busy|2026-09-22 17:59:47.726433+00 afterwards (e3-row-after.txt) with 0 session.status.updated lines for the session (e3-web-frames.txt), so the 60 s CLI_DISCONNECT_STALE_BUSY_WINDOW_MS gate refused the write.
/home/igor_kilocode_ai/.local/share/kwf/sections/28572-c-stale-busy-status-de52/e2e-backend/e1-row-after.txt
ses_h1mo4184qbucosqxfl5kw33dox|retry|2026-09-22 18:00:13.56+00
/home/igor_kilocode_ai/.local/share/kwf/sections/28572-c-stale-busy-status-de52/e2e-backend/e1-cli-run.txt
# e1 run: heartbeats and abrupt kill (1006, no close frame)
+0.1s [cliA-E1] OPEN
+0.1s [cliA-E1] SENT heartbeat ses_h1mo4184qbucosqxfl5kw33dox
+0.1s [cliB-E2] OPEN
+0.1s [cliB-E2] SENT heartbeat ses_px6q65wka6ki3z23rb0wipmdu1
+0.1s [cliC-E3] OPEN
+0.1s [cliC-E3] SENT heartbeat ses_skbhfrzni9pzae5asp4dfmt5ce
+0.1s [cliA-E1] RECV {"type":"heartbeat_ack"}
+0.1s [cliB-E2] RECV {"type":"heartbeat_ack"}
+0.1s [cliC-E3] RECV {"type":"heartbeat_ack"}
+10.0s [cliA-E1] KILL _socket.destroy() (no close frame)
+10.0s [cliB-E2] KILL _socket.destroy() (no close frame)
+10.0s [cliC-E3] KILL _socket.destroy() (no close frame)
2026-09-22T17:50:13.526Z KILL_EPOCH 1790099413525
+10.0s [cliC-E3] CLOSE 1006
+10.0s [cliB-E2] CLOSE 1006
+10.0s [cliA-E1] CLOSE 1006
+210.0s [cliB2-E2] RE-ATTACH on a new connection
+210.1s [cliB2-E2] OPEN
+210.1s [cliB2-E2] SENT heartbeat ses_px6q65wka6ki3z23rb0wipmdu1
+210.1s [cliB2-E2] RECV {"type":"heartbeat_ack"}
+240.1s [cliB2-E2] CLOSE 4408 heartbeat timeout
+900.0s END
/home/igor_kilocode_ai/.local/share/kwf/sections/28572-c-stale-busy-status-de52/e2e-backend/e1-row-before.txt
ses_h1mo4184qbucosqxfl5kw33dox|dc00ebe2-f711-499b-8619-4be349e2acbc|busy|2026-09-22 17:29:53.783011+00
/home/igor_kilocode_ai/.local/share/kwf/sections/28572-c-stale-busy-status-de52/e2e-backend/e1-web-event.txt
# e1: session.status.updated received by the user's /api/user/web socket
2026-09-22T18:00:13.614Z [A] RECV {"type":"system","event":"session.status.updated","data":{"source":"v2","session":{"source":"v2","sessionId":"ses_h1mo4184qbucosqxfl5kw33dox","createdAt":"2026-09-22T
/home/igor_kilocode_ai/.local/share/kwf/sections/28572-c-stale-busy-status-de52/e2e-backend/e2-row-after.txt
ses_cfu9rl9uxu9ve1y3a8i9ndrl89|e47dfb28-cb1e-462e-9b9d-9df20292e481|busy|2026-09-22 17:39:17.162743+00
ses_h1mo4184qbucosqxfl5kw33dox|dc00ebe2-f711-499b-8619-4be349e2acbc|retry|2026-09-22 18:00:13.56+00
ses_skbhfrzni9pzae5asp4dfmt5ce|6464fb7a-a99f-485c-8305-e9916ac530cc|busy|2026-09-22 17:59:47.726433+00
/home/igor_kilocode_ai/.local/share/kwf/sections/28572-c-stale-busy-status-de52/e2e-backend/e2-row-before.txt
ses_cfu9rl9uxu9ve1y3a8i9ndrl89|e47dfb28-cb1e-462e-9b9d-9df20292e481|busy|2026-09-22 17:39:17.162743+00
INSERT 0 1
/home/igor_kilocode_ai/.local/share/kwf/sections/28572-c-stale-busy-status-de52/e2e-backend/e2-no-status-event.txt
# e2 rerun (user D, session ses_cfu9rl9uxu9ve1y3a8i9ndrl89): count of session.status.updated lines in e2-web-frames.log
0
# count of frames mentioning ses_cfu9rl9uxu9ve1y3a8i9ndrl89:
67
# first and last frame:
2026-09-22T17:59:22.443Z LISTENER START duration=900s users=D
2026-09-22T17:59:22.529Z [D] TICKET 200 {"ticket":"b9fd3978-3c6b-402e-9fec-a642fb5f4b41","expiresAt":1790100022}
2026-09-22T18:11:22.654Z [D] RECV {"type":"system","event":"sessions.heartbeat","data":{"connectionId":"7dc8f047-591d-4d4e-9dc3-2ceff1a56713","sessions":[{"id":"ses_cfu9rl9uxu9ve1y3a8i9ndrl89","status
/home/igor_kilocode_ai/.local/share/kwf/sections/28572-c-stale-busy-status-de52/e2e-backend/e3-restamp.log
waiting for kill.time
kill_epoch=1790099413525 target=1790099988525 delta_ms=574948
RESTAMP_AT_MS 1790099987580 iso=2026-09-22T17:59:47Z
ses_skbhfrzni9pzae5asp4dfmt5ce|busy|2026-09-22 17:59:47.726433+00
UPDATE 1
ses_skbhfrzni9pzae5asp4dfmt5ce|busy|2026-09-22 17:59:47.726433+00|0.148942
RESTAMP_DONE iso=2026-09-22T17:59:47Z
/home/igor_kilocode_ai/.local/share/kwf/sections/28572-c-stale-busy-status-de52/e2e-backend/e3-row-after.txt
ses_skbhfrzni9pzae5asp4dfmt5ce|busy|2026-09-22 17:59:47.726433+00
/home/igor_kilocode_ai/.local/share/kwf/sections/28572-c-stale-busy-status-de52/e2e-backend/e3-web-frames.txt
# every frame in web-frames.log (users A,B,C) that mentions the e3 session id ses_skbhfrzni9pzae5asp4dfmt5ce
2026-09-22T17:50:03.785Z [C] SENT subscribe ses_skbhfrzni9pzae5asp4dfmt5ce
2026-09-22T17:50:03.786Z [C] RECV {"type":"system","event":"sessions.list","data":{"sessions":[{"id":"ses_skbhfrzni9pzae5asp4dfmt5ce","status":"busy","title":"kwf-cliC-E3","connectionId":"f28e31aa-b88
# count of session.status.updated lines mentioning ses_skbhfrzni9pzae5asp4dfmt5ce:
0
Owner request

Fix: a session row stays status busy for ever when its CLI dies, so the app keeps showing a running spinner.

Production evidence, Pylon issue 28572, kilo user 9febf58a-950d-436b-8860-4f78d8c0d793:

  • Read-only query on cli_sessions_v2 for the last 7 days returns 11 rows with status busy whose status_updated_at is minutes after created_at and never moves again. Examples: ses_f38b56fe2ffed60eojYSsmo3fe created 2026-09-22T04:06:21Z with status_updated_at 2026-09-22T04:06:32Z; ses_f3e11b421ffeDKgzu4IEO21erN created 2026-09-21T03:06:56Z with status_updated_at 2026-09-21T03:07:15Z.
  • The parent session ses_f39900bddfffUK9xomduMB1zP7 went idle at 2026-09-22T07:24:06Z. The children stayed busy.
  • services/session-ingest/src/ingest/metadata.ts:491 defines resetAttentionStatusOnCliDisconnect, the only reconnect-time reset.
  • services/session-ingest/src/ingest/metadata.ts:513 returns early unless the status is question or permission.
  • No other code in services/session-ingest writes idle. The status comes from the CLI's own metadata change, so a CLI that dies while busy leaves the row unchanged.
  • The user reported it as: "many of the tool or agent calls still with a spinner as if they are in progress, even though those turns have already ended".

Requirements:

  1. A busy session row must not outlive its owner. Decide the owner signal and name it: the CLI socket disconnect event the same file already handles, or the run ledger terminal_at in cloud_agent_session_runs.
  2. Reuse resetAttentionStatusOnCliDisconnect and its conditional write. Do not add a second reset path.
  3. Pick the status a stale busy row receives, and say why. retry is already the value this file uses for a disconnect. A wrong idle on a live session is worse than a wrong retry, so state how a live session is protected.
  4. Do not clear a row with a recent status_updated_at. Name the window and keep it in code, not in prose.
  5. Add a test that disconnects a busy CLI and asserts the row leaves busy, and a test that a live busy row is untouched.

Report the number of the 11 stale rows the new rule would clear, and the number it would leave.

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

Production record for ses_f38b56fe2ffed60eojYSsmo3fe

Axiom, last 72 h

cloudflare-logpush

  • 2026-09-22T04:15:54 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"0053736d-a7e5-4a81-8894-b44d73fbf1de","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":690,"actualBytes":690,"durationMs":37,"items":1,"metadataChanges":0}
  • 2026-09-22T04:14:30 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"e8c47079-5705-4f82-bea8-1ed01d4dbe97","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":99528,"actualBytes":99528,"durationMs":43,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:45 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"85352d5d-23be-4be4-a403-430e567c7f8f","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":20,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:45 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"e6becd54-c043-41ca-bf92-73a030359fee","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":20,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:45 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"9c89d218-a613-403c-a401-aaba7cefec9c","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":10852,"actualBytes":10852,"durationMs":33,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:45 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"f598ff21-cf84-4cc5-999c-1fc00a4e1d5a","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":527,"actualBytes":527,"durationMs":19,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:45 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"76393e27-9dbb-479e-a3e1-632a2c0e9cf2","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":11578,"actualBytes":11578,"durationMs":13,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:45 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"eb9784b7-0b79-4958-9001-c194680563fa","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":11098,"actualBytes":11098,"durationMs":22,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:44 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"eff96100-4a7c-456d-9b1e-748c11c7b579","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":20,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:44 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"42db97af-2566-4ec4-87ae-bf18e9c998b7","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":47306,"actualBytes":47306,"durationMs":40,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:44 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"36227621-3b89-4a46-a1de-b3c3c9d6e589","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":24836,"actualBytes":24836,"durationMs":22,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:44 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"59cebde7-30d6-410c-b4b9-7988b4a9618f","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":24213,"actualBytes":24213,"durationMs":16,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:28 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"542548a6-d7b6-4352-87b9-f62c6803ee72","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":27,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:28 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"44bd6595-9dbe-4cd8-b046-98093dc682c7","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":22,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:28 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"b4b4792a-2de4-4aed-b09f-2570851e9ce3","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":1403,"actualBytes":1403,"durationMs":20,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:28 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"455288f5-27a9-4743-9b10-e4035aafa42d","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":14320,"actualBytes":14320,"durationMs":21,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:28 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"a3f5db5a-863b-4a23-91cb-32cee884dbb8","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":28,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:28 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"3ce9d641-1056-49ae-b7cb-54b20e75f60a","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":17,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:28 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"4a5bef7c-4e42-4569-9661-63c4b48cf120","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":692,"actualBytes":692,"durationMs":16,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:28 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"efd60bb2-d02e-4b79-b0cf-aef6468d6e34","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":3688,"actualBytes":3688,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T04:13:28 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"6b33d37c-eefe-463c-8992-58c22d25f7c9","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":19,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:38 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"6c92de4e-3698-415c-87c0-22ffffbad06b","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":281,"actualBytes":281,"durationMs":28,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:38 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"38cc34c4-3cf3-495c-b718-174d0920bb90","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":693,"actualBytes":693,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:38 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"c6ed284c-715f-4dae-852b-5179167d4085","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":6169,"actualBytes":6169,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:38 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"70a5eb5b-bd62-49d1-a176-698aafdfdf25","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":223,"actualBytes":223,"durationMs":20,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:38 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"75cbc471-d5ce-4c32-95fb-ae39b3b65b0d","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":17,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:38 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"32cc1f0f-16c1-4b83-9c59-1061a9df6d45","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":19,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:38 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"c28026b5-df83-4d6e-b486-f3cf7fbcb1b8","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":693,"actualBytes":693,"durationMs":23,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:38 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"5460c92d-ac93-4125-9e10-cbee9c2b61e9","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":524,"actualBytes":524,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:38 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"5e632201-d09a-4eb7-b0ee-0b93f88884a1","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":4871,"actualBytes":4871,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"5a5a88c7-5445-480d-9ff2-ea0939d7f98a","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":694,"actualBytes":694,"durationMs":19,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"d7b55d77-b667-4367-89bd-101bc2587329","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":524,"actualBytes":524,"durationMs":20,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"ad1daa3a-cec6-4aad-a187-1c996bbe59c4","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":3106,"actualBytes":3106,"durationMs":16,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"d9f49ffd-2d02-4095-a39e-52b049da31c9","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":2984,"actualBytes":2984,"durationMs":19,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"b91dcef9-903c-4fe1-b989-1c41fd87a105","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":26,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"76ff1a38-9361-4dd8-b044-cb414c618e9a","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":3707,"actualBytes":3707,"durationMs":14,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"8cd95150-4cbc-42cc-87a5-74dc89928a60","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":14079,"actualBytes":14079,"durationMs":23,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"8da05dd6-139d-4cdd-a623-38ce835abf94","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"6dd03d66-14ef-4905-b29d-ae9febc2db8e","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":693,"actualBytes":693,"durationMs":26,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"92ed3e1d-7609-4857-8746-df1e4660754e","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":281,"actualBytes":281,"durationMs":19,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"41f21bd7-39a0-40aa-a1de-31ed0e103ea0","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":6082,"actualBytes":6082,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"2b2acd6a-1ce8-496f-97ef-c713a723b850","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"fdbf7009-10a9-4aa2-88ad-6ea432f49a86","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":4243,"actualBytes":4243,"durationMs":20,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"5a250e7f-5385-4b7f-a3bb-08cb60fee259","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":20,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"8296c469-7288-461b-a41c-97342cd162a9","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":951,"actualBytes":951,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"b98cbc68-9e48-4f3d-85d4-7e049c93ca4a","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":523,"actualBytes":523,"durationMs":21,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"73a40295-663d-4198-8f48-4ca6d17cec32","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":7740,"actualBytes":7740,"durationMs":20,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"b4f6a58f-4e39-486f-8642-998c9cd2dd7d","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":32,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:19 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"d04f309b-e644-40cf-9c48-f2cdbaea7e9d","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":694,"actualBytes":694,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:18 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"7ed861d9-d1ef-4b52-bc44-3f44e433fe11","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":523,"actualBytes":523,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:18 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"24317a30-f0c4-4448-a28b-113842302344","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":1234,"actualBytes":1234,"durationMs":28,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:18 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"db2d9edd-8bc5-4361-ae58-64a0acbc1898","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:18 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"bfc2b553-eb4d-48f7-b571-056cbe4d4f4f","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":47,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:18 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"01fd4cb3-7e13-46a6-8937-66ff4098addc","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":1299,"actualBytes":1299,"durationMs":14,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:18 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"588c6a7c-7bc8-4fac-960b-cd6d76cbe8fc","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":27,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:18 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"c30bcd09-bdf6-4de9-9169-aa0d86bf83cb","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":944,"actualBytes":944,"durationMs":12,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:18 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"1e17082f-9b83-499b-97c2-4ba81170454c","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":525,"actualBytes":525,"durationMs":18,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:18 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"1d7bd3cf-e0d0-40fd-8492-52a72ba69a29","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":4000,"actualBytes":4000,"durationMs":41,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:18 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"db5eb882-5551-4491-871a-3a086a502f86","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":22,"items":1,"metadataChanges":0}
  • 2026-09-22T04:12:18 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"0cb71235-d99f-49c2-8380-9652909313d2","sessionId":"ses_f38b56fe2ffed60eojYSsmo3fe","ingestVersion":2,"declaredBytes":6617,"actualBytes":6617,"durationMs":20,"items":1,"metadataChanges":0}
    No line carries this term in: vercel, supabase-production.

The session row, read replica

session_id | status | created_at | updated_at

  • ses_f38b56fe2ffed60eojYSsmo3fe|busy|2026-09-22 04:06:21.40799+00|2026-09-22 04:14:16.379915+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 ses_f3e11b421ffeDKgzu4IEO21erN

Axiom, last 72 h

cloudflare-logpush

  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"2038a069-1bfc-49e7-9738-3ab41d66d4f4","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":800,"actualBytes":800,"durationMs":590,"items":1,"metadataChanges":2}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"27be76db-d1ad-47ac-b4aa-8898eb38ae1b","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":867,"actualBytes":867,"durationMs":82,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"fdd887ac-562f-49f3-9ecf-c3e514806e4d","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":298,"actualBytes":298,"durationMs":82,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"32028069-a011-4374-9139-0a8b15efd8c9","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":4445,"actualBytes":4445,"durationMs":57,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"60cecf40-bb67-4f92-a048-0b10ef06c718","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":867,"actualBytes":867,"durationMs":58,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"33849c39-3f63-4a7a-9067-83de1fb0d413","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":867,"actualBytes":867,"durationMs":62,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"bb9bb054-a3b2-4e4e-bad4-09224e10e37c","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":1712,"items":1,"metadataChanges":1}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"582e8618-7011-4941-914f-6ebac6ba459c","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":632,"actualBytes":632,"durationMs":77,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"e8bf6a72-6e41-40c0-b81b-40472ea63424","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":278,"actualBytes":278,"durationMs":58,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"8a4f9094-6074-4c25-aecc-a55f30dbd256","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":278,"actualBytes":278,"durationMs":259,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"bd444310-b7c6-43c8-9bf6-a7db917abc58","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":537,"actualBytes":537,"durationMs":56,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"dcb46736-40ec-49b8-8ac9-8a1bf1977cf0","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":632,"actualBytes":632,"durationMs":57,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"cfcd6dcf-0fc6-4f7a-a195-1b5eabe879a5","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":278,"actualBytes":278,"durationMs":66,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"755304ed-a04c-4b80-bc78-137b6320a262","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":223,"actualBytes":223,"durationMs":61,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"7e0f346c-ae46-4494-902b-d8e99bdb72ff","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":3949,"actualBytes":3949,"durationMs":66,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"3dcebef9-92aa-40e0-8bec-873cfe05683a","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":7048,"actualBytes":7048,"durationMs":70,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"4d0e44a3-b19b-43c3-afa1-9d02c40ea276","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":715,"actualBytes":715,"durationMs":47,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"7fe2bd7b-18d3-4780-9d88-a2043215a146","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":278,"actualBytes":278,"durationMs":54,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"27b71f15-58f2-46df-82cc-d3ace6c44482","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":62,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"57761d93-a068-4c66-8ba0-455a7045a5e6","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":8669,"actualBytes":8669,"durationMs":59,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"6fed7df1-9c68-4837-bfd3-486da0be2608","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":717,"actualBytes":717,"durationMs":4111,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"d688fbfb-fa6a-4404-b4ab-5c348535c258","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":54,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"729f4d64-92e7-464d-aeac-00b1aab96c91","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":278,"actualBytes":278,"durationMs":65,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"6faaec6f-4beb-425e-a133-4e2b51487be8","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":2638,"actualBytes":2638,"durationMs":89,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"5e523d69-ec21-4041-99dc-98270e427f43","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":1934,"actualBytes":1934,"durationMs":256,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"27ed97b2-1099-43a8-9bde-1cafe6cd8ccf","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":2755,"actualBytes":2755,"durationMs":54,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"0f47f4e9-4283-482b-a922-b20a3d1cee7e","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":950,"actualBytes":950,"durationMs":73,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"e9a265e3-c18e-418e-b3af-0626b4ca219e","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":2185,"actualBytes":2185,"durationMs":136,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"7af490fe-905f-4378-8b65-ea65397ed8c3","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":286,"actualBytes":286,"durationMs":81,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"9abe3758-d210-49a2-a151-d6b53441f40c","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":2233,"actualBytes":2233,"durationMs":55,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"0d1eb0c9-4690-4b87-8407-81ff89b5d6f8","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":286,"actualBytes":286,"durationMs":350,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"1b1c8e96-2613-4f82-998e-09d5062eaf06","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":223,"actualBytes":223,"durationMs":57,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"2684b3aa-f329-4670-abdb-1701720e78b8","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":60,"items":1,"metadataChanges":0}
  • 2026-09-21T03:12:20 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"68a62dd9-30d2-4115-9312-002d707b0f33","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":84,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:44 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"bc74b642-8903-41f5-b0a0-11418034feb5","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":321,"actualBytes":321,"durationMs":68,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:44 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"f9e87e0c-95c1-46f4-9750-ca9a0d0f836e","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":632,"actualBytes":632,"durationMs":85,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:44 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"44df323a-8b61-4f0b-91c0-d733b601de64","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":80,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:44 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"97f5cbd7-c5aa-4d88-92aa-3c009e7ba21a","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":715,"actualBytes":715,"durationMs":61,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:44 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"3310dd1b-6007-4d5d-9971-b861628e7076","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":689,"actualBytes":689,"durationMs":83,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:44 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"52459d04-3d6c-4cdb-8b79-e7bf64308d92","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":522,"actualBytes":522,"durationMs":105,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:44 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"1da273ab-8147-457f-8a8e-922e9261d8fb","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":7898,"actualBytes":7898,"durationMs":76,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:44 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"b4778332-b6e0-4d9c-9674-e045c8fcb264","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":5224,"actualBytes":5224,"durationMs":58,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:44 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"7e31d240-8387-489b-8f9d-50c0e1f58e5e","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":2743,"actualBytes":2743,"durationMs":62,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:44 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"990240bb-aebc-4c01-bc98-ade56a249ec7","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":281,"actualBytes":281,"durationMs":57,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"4c15435e-5d41-4c63-a0e2-775a2ecba3bd","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":223,"actualBytes":223,"durationMs":56,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"d0975156-eb30-4ac4-b5a9-e0a187232a0b","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":183,"actualBytes":183,"durationMs":55,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"0c31ae5d-4e93-4d70-884b-8ca72a919218","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":61,"actualBytes":61,"durationMs":57,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"04067b53-84b6-4c25-853f-1bfde0944afb","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":321,"actualBytes":321,"durationMs":54,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"6ccba13f-87d6-4273-a9fb-0dad106315e0","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":632,"actualBytes":632,"durationMs":65,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"247958e6-673b-404a-9678-54aab5463621","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":941,"actualBytes":941,"durationMs":53,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"c3dfbd88-33e2-4650-afcd-daf2e299e132","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":691,"actualBytes":691,"durationMs":65,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"159f818f-e4c6-4767-892a-44bcf14c6786","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":526,"actualBytes":526,"durationMs":54,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"54d2f560-28cc-4add-a884-4576b4eee09a","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":21937,"actualBytes":21937,"durationMs":59,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"8bbb6080-6c8a-435b-a6ee-8ed71ec6019b","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":15248,"actualBytes":15248,"durationMs":60,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"b6e19959-b71d-4cbb-a1e6-f13d44b87260","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":8786,"actualBytes":8786,"durationMs":74,"items":1,"metadataChanges":0}
  • 2026-09-21T03:11:10 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"9027e50d-8212-411f-acc9-a97797c8e78e","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":8774,"actualBytes":8774,"durationMs":339,"items":1,"metadataChanges":0}
  • 2026-09-21T03:10:09 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"5990e108-dfdb-44eb-89c8-7a149fd6b404","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":278,"actualBytes":278,"durationMs":71,"items":1,"metadataChanges":0}
  • 2026-09-21T03:10:09 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"26453e58-af26-4371-aaa7-06b5f28909f7","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":321,"actualBytes":321,"durationMs":54,"items":1,"metadataChanges":0}
  • 2026-09-21T03:10:09 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"5ed183ca-f4ac-4663-8b26-841f27185f0f","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":949,"actualBytes":949,"durationMs":60,"items":1,"metadataChanges":0}
  • 2026-09-21T03:10:09 [canceled] session-ingest {"event":"direct_ingest_ok","ingestRequestId":"618c4069-43fd-4cec-a785-9c533622d34c","sessionId":"ses_f3e11b421ffeDKgzu4IEO21erN","ingestVersion":2,"declaredBytes":632,"actualBytes":632,"durationMs":54,"items":1,"metadataChanges":0}
    No line carries this term in: vercel, supabase-production.

The session row, read replica

session_id | status | created_at | updated_at

  • ses_f3e11b421ffeDKgzu4IEO21erN|busy|2026-09-21 03:06:56.370814+00|2026-09-21 03:10:26.928858+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.

Follow-ups (not changed here)

Fix: a session row stays status busy for ever when its CLI dies, so the app keeps showing a running spinner.

Production evidence, Pylon issue 28572, kilo user 9febf58a-950d-436b-8860-4f78d8c0d793:

- Read-only query on cli_sessions_v2 for the last 7 days returns 11 rows with status busy whose status_updated_at is minutes after created_at and never moves again. Examples: ses_f38b56fe2ffed60eojYSsmo3fe created 2026-09-22T04:06:21Z with status_updated_at 2026-09-22T04:06:32Z; ses_f3e11b421ffeDKgzu4IEO21erN created 2026-09-21T03:06:56Z with status_updated_at 2026-09-21T03:07:15Z.
- The parent session ses_f39900bddfffUK9xomduMB1zP7 went idle at 2026-09-22T07:24:06Z. The children stayed busy.
- services/session-ingest/src/ingest/metadata.ts:491 defines resetAttentionStatusOnCliDisconnect, the only reconnect-time reset.
- services/session-ingest/src/ingest/metadata.ts:513 returns early unless the status is question or permission.
- No other code in services/session-ingest writes idle. The status comes from the CLI's own metadata change, so a CLI that dies while busy leaves the row unchanged.
- The user reported it as: "many of the tool or agent calls still with a spinner as if they are in progress, even though those turns have already ended".

Requirements:

1. A busy session row must not outlive its owner. Decide the owner signal and name it: the CLI socket disconnect event the same file already handles, or the run ledger terminal_at in cloud_agent_session_runs.
2. Reuse resetAtte
@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

Reviewed the resetAttentionStatusOnCliDisconnect widening (stale busy -> retry) and its tests. The in-memory eligibility and the SQL WHERE re-check encode the same predicate; status_updated_at is read as a mode: 'string' timestamptz and parsed with new Date(...), matching the repo's existing databaseTimestampToMilliseconds convention. busy rows with a null timestamp are held (fail-closed), the SELECT ... FOR UPDATE plus read-back sentinel prevents notifying on a lost race, and the event payload's previousStatus is compatible with SessionStatusSchema. No new comments were added, so the fix link is omitted.

Files Reviewed (2 files)
  • services/session-ingest/src/ingest/metadata.ts
  • services/session-ingest/src/ingest/metadata.test.ts

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

Review guidance: REVIEW.md from base branch main

@iscekic iscekic added the human-ready The PR is ready for human review. label Sep 22, 2026
@iscekic iscekic self-assigned this Sep 22, 2026
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