From ee1cd006afe222b67d72ea47a03801f062ccf7df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Tue, 25 Aug 2026 06:12:42 +0000 Subject: [PATCH] =?UTF-8?q?todo:=20refresh=20loses=20a=20finished=20turn's?= =?UTF-8?q?=20output=20=E2=80=94=20replay=20shows=20an=20empty=20fold?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- TODO.md | 6 +-- ...shing-a-finished-chat-turn-loses-output.md | 37 +++++++++++++++++++ 2 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 todo/known-bugs/refreshing-a-finished-chat-turn-loses-output.md diff --git a/TODO.md b/TODO.md index 5311ccbc..df7bd35c 100644 --- a/TODO.md +++ b/TODO.md @@ -21,7 +21,7 @@ the owner's OS user and can never be granted. Indirection there really is accide ## Themes -**91 open, 29 closed**, across 31 themes. +**92 open, 29 closed**, across 31 themes. | Theme | Open | Closed | | ------------------------------------------------------------------------------------------ | ---- | ------ | @@ -37,7 +37,7 @@ the owner's OS user and can never be granted. Indirection there really is accide | [Fleet — one command across every server](todo/fleet/) | 5 | 2 | | [Headscale](todo/headscale/) | 0 | 5 | | [Infra (alpha)](todo/infra/) | 7 | 0 | -| [Known bugs](todo/known-bugs/) | 3 | 2 | +| [Known bugs](todo/known-bugs/) | 4 | 2 | | [Mobile apps](todo/mobile-apps/) | 3 | 0 | | [Multi-user](todo/multi-user/) | 16 | 5 | | [Notifications](todo/notifications/) | 1 | 0 | @@ -68,6 +68,7 @@ the owner's OS user and can never be granted. Indirection there really is accide - `2026-08-25` **An affordance: a scoped agent warns when a request lands outside its scope** — [affordances/an-affordance-a-scoped-agent-warns-on-the](todo/affordances/an-affordance-a-scoped-agent-warns-on-the.md) - `2026-08-25` **Resurrect Projects/Apps** — [backburner/resurrect-projects-apps](todo/backburner/resurrect-projects-apps.md) +- `2026-08-25` **Refreshing a finished chat turn loses output — replay collapses to a fold and the closing message vanishes** — [known-bugs/refreshing-a-finished-chat-turn-loses-output](todo/known-bugs/refreshing-a-finished-chat-turn-loses-output.md) - `2026-08-23` **A worker cannot verify that the owner delegated to a manager, so it has to ask every time** — [agent-coordination/a-peer-cannot-verify-a-delegation](todo/agent-coordination/a-peer-cannot-verify-a-delegation.md) - `2026-08-23` **An agent cannot learn its own transcript id, so it cannot sign its own work** — [agent-coordination/an-agent-cannot-learn-its-own-session-id](todo/agent-coordination/an-agent-cannot-learn-its-own-session-id.md) - `2026-08-23` **The SendOff file size limit is one constant for everybody** — [sendoff/per-user-size-limit](todo/sendoff/per-user-size-limit.md) @@ -75,4 +76,3 @@ the owner's OS user and can never be granted. Indirection there really is accide - `2026-08-22` **Revisit the bun 1.3 pin once 1.4 has been watched for a while** — [infra/revisit-the-bun-1-3-pin-once-1-4-has-been](todo/infra/revisit-the-bun-1-3-pin-once-1-4-has-been.md) - `2026-08-22` **A plugin's permission should be on for every role by default, off only on request** — [multi-user/a-plugin-s-permission-should-be-on-for-every](todo/multi-user/a-plugin-s-permission-should-be-on-for-every.md) - `2026-08-22` **A user's settings should export and import as a plain file** — [settings/a-user-s-settings-should-export-and-import-as](todo/settings/a-user-s-settings-should-export-and-import-as.md) -- `2026-08-22` **The same for system settings, owned by the Super Admin** — [settings/the-same-for-system-settings-owned-by-the](todo/settings/the-same-for-system-settings-owned-by-the.md) diff --git a/todo/known-bugs/refreshing-a-finished-chat-turn-loses-output.md b/todo/known-bugs/refreshing-a-finished-chat-turn-loses-output.md new file mode 100644 index 00000000..fb87c899 --- /dev/null +++ b/todo/known-bugs/refreshing-a-finished-chat-turn-loses-output.md @@ -0,0 +1,37 @@ +--- +id: known-bugs/refreshing-a-finished-chat-turn-loses-output +title: 'Refreshing a finished chat turn loses output — replay collapses to a fold and the closing message vanishes' +theme: known-bugs +status: open +created: 2026-08-25 +date_source: stated +order: 4 +--- + +**Refreshing a finished chat turn loses output.** Reported by the owner 2026-08-25, with a screenshot: +a Command HQ chat (the "Voice Memos" commander, first turn), refreshed after the turn completed, shows +the prompt, then one collapsed seam reading `6 tool calls · 3 messages · 3 failed`, then +`TURN FINISHED · NO CLOSING MESSAGE`. The turn's actual output — including AskUserQuestion activity the +prompt explicitly requested — is gone from view. The header confirms how wrong the fold is: +`0 turns · 0 tok · $0` on a session that plainly ran six tool calls. He reports this happens "a lot of +times" on refresh, not once. + +Two distinct wrongs, and they may have different owners: + +1. **The collapse itself is (he recalls) a deliberate decision** — fold past tool calls on replay. If + so, the decision needs revisiting where it hides MESSAGES, not just tool chatter: "3 messages" inside + a collapsed seam means prose the agent wrote is behind a click, and a first-time reader concludes the + turn produced nothing. +2. **"No closing message" on a turn that had one.** The fold's own code says that banner was built for + turns that genuinely ended without an answer, and its comments record it once mis-fired for streams + (`turn-rows.ts:178`, `types.ts:38` — "printed 'Turn finished · no closing message' under work that + was still going"). A replay reaching that state on a turn that DID close means the replay source is + missing the final message — so look at what the fold is FED on refresh, not at the fold: the event + log the page replays (`chat_session_events` → `turn-rows.ts` folding) versus what the live socket + streamed. `3 failed` inside the seam is a second clue about what the stored events actually hold. + +Where to look, verified in the tree: `Chat/components/turn-rows.ts` (the folding, with its own history +of exactly this class of bug in comments and tests), `TurnFold.tsx:88` (renders the banner), and +whatever writes the durable events the replay reads — the claude sidecar has owned `chat_session_events` +writes since the isolation work. Note `0 turns · 0 tok · $0` suggests the commander's turn ledger also +saw none of it, which points the same direction: the durable record, not the renderer.