Skip to content

[Bug]: Settled turns hide substantive response under Worked for ... #7518

Description

@none23

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/desktop, apps/web, apps/mobile

Steps to reproduce

  1. Start a fresh thread using a Claude model.
  2. Send the prompt below exactly.
  3. Wait for the turn to finish.
  4. Observe which parts remain visible without expanding "Worked for".
Reproduction prompt
I am testing chat rendering. Do not read, create, modify, or delete any files.

Follow these steps in this exact order, all within this turn:

1. Before using any tool, write a user-facing report titled "Synthetic deployment checklist". It must contain exactly 12 numbered items, and each item must be a complete sentence of at least 12 words. This report is the main answer and must appear before the tool call.
2. After printing the complete report, use the shell/Bash tool exactly once to run:
   printf 't3-fold-reproduction\n'
3. After the command finishes, send exactly this sentence and nothing else:
   Verification finished. The complete checklist is above.

Do not repeat, summarize, or quote the checklist after the tool call.

Expected behavior

The "Synthetic deployment checklist" is the main user-facing response, so it should remain visible after the turn finishes.

Tool activity may be folded, but substantive assistant text should not be hidden with it.

Actual behavior

After the turn finishes, the complete checklist is folded under "Worked for". Only the final sentence remains immediately visible:

Verification finished. The complete checklist is above.

The user must expand "Worked for" to find the actual response.

The reproduction does not depend on private project data, custom hooks, or an unusual provider continuation. A normal tool call between two assistant messages is enough to trigger it.

Impact

Major degradation or frequent failure

Based on my local session history, the issue affects roughly 1.5% of turns with Claude, and appears at least once in 9% of my Claude sessions. Having a Stop hook configured for Claude can ruin most turns as #5297 and #5506 indicate.

Version or commit

main @ f2d5fc9

Environment

Tested on 0.0.34-nightly.20260818.1126 and Android app 1.0.3, code path is universal for all surfaces

Screenshots, recordings, or supporting files

worked-for-hidden.mp4

Workaround

Manually expand "Worked for" after the turn finishes. The hidden response is still present inside the folded section.

Related issues

Activity

  1. added
    bugSomething is broken or behaving incorrectly.
    needs-triageIssue needs maintainer review and initial categorization.
    on Aug 19, 2026
  2. none23 commented on Aug 19, 2026

    @none23
    ContributorAuthor

    Technical analysis

    1. Claude produces separate assistant messages before and after the tool call. Both belong to the same turnId.
    2. The web and desktop client treats the last assistant message in that turn as the final answer.
    3. Once the turn finishes, the client folds every earlier entry under "Worked for", including the substantive first response. Mobile applies the same rule.
    4. The server retains both messages, which is why expanding "Worked for" reveals the missing response. Any provider that produces multiple assistant messages in one turn may trigger the same behavior.

    Triggering turn shape

    At the client boundary, the triggering shape is a settled turn containing multiple assistant messages with the same turnId:

    Turn T, completed
    ├─ Assistant A, substantive response
    ├─ Tool activity (e.g. hook, or memory update)
    └─ Assistant B, short follow-up
    

    The messages have different IDs but share turn T. The current client derives:

    terminal message = B
    hidden entries   = A + tool activity
    visible entries  = "Worked for ..." + B
    

    The tool activity is not required. The minimum trigger is two assistant messages in one completed turn. The client hides every assistant message except the last.

  3. changed the title [-][Bug]: Settled turns hide substative response under `Worked for ...`[/-] [+][Bug]: Settled turns hide substantive response under `Worked for ...`[/+] on Aug 19, 2026
  4. rubywwwilde commented on Aug 19, 2026

    @rubywwwilde

    Same bug as #7529, which I filed a few hours after this one without finding it (sorry). That issue has the code history if anyone wants it: the fold came in with #3022 as a port of #2451, the divider became a fold somewhere in the port, and nothing in either PR discusses hiding assistant text. The only design intent on record is that tool calls should look uninteresting.

    I have a fix ready: only tool activity folds, every assistant message stays visible in place, and the fold row sits where the folded work is. The trade-off is that providers that narrate between tool calls make settled threads longer. Before I open the PR (it would close both issues): is anyone attached to the current compact view, or is this as clearly a bug as it looks?

  5. none23 commented on Aug 19, 2026

    @none23
    ContributorAuthor

    Same bug as #7529, which I filed a few hours after this one without finding it (sorry). That issue has the code history if anyone wants it: the fold came in with #3022 as a port of #2451, the divider became a fold somewhere in the port, and nothing in either PR discusses hiding assistant text. The only design intent on record is that tool calls should look uninteresting.

    I have a fix ready: only tool activity folds, every assistant message stays visible in place, and the fold row sits where the folded work is. The trade-off is that providers that narrate between tool calls make settled threads longer. Before I open the PR (it would close both issues): is anyone attached to the current compact view, or is this as clearly a bug as it looks?

    I have explored this approach. However, it affects visible output a lot, especially for Codex (that outputs a lot of intermediary comments).

    Codex could use phase: "commentary" | "final_answer" field to reduce noise substantially.
    Other providers might need special treatment as well.

    Ultimately this feels like a product decision for the team to make

  6. rubywwwilde commented on Aug 19, 2026

    @rubywwwilde

    Yes, that is true. I thought about it during the last couple of hours and it does seem that hiding intermediate steps is beneficial.

    Showing at least the first step seems like a good option. But also having a setting to see everything by default. It annoys me so much having to toggle the "Worked for" section every time.

  7. VincentShipsIt commented on Aug 22, 2026

    @VincentShipsIt

    Same empty-timeline look on Grok 4.6 and OpenCode, not only Claude.

    On 0.0.33, a Grok /deploy turn had 16 assistant messages in state.sqlite (none empty) and still rendered as user bubbles + collapsed tool rows. OpenCode sessions from the last week are the same: e.g. 40 assistant messages / 21k chars in SQLite, UI looks blank until you expand Worked for.

    Grok also emits a lot of tool-only assistant messages (147/167 empty content in one native session). Those never become T3 text, so even a perfect fold still looks empty between user turns.

    Related live stall while this was open: #6556 (ingestion died at 64KB/itemCount: 0, Grok kept going for ~2h).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is broken or behaving incorrectly.needs-triageIssue needs maintainer review and initial categorization.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions