Assistant text blocks silently dropped when followed by more thinking in the same turn — never rendered, missing from transcript JSONL (2.1.201, adaptive thinking)

Open 💬 5 comments Opened Jul 4, 2026 by federbenjamin

Environment: Claude Code 2.1.201, macOS (darwin 25.5), model claude-fable-5 (interleaved/adaptive thinking), terminal TUI (also reproduced in a claude.ai/code bridged child session, CLAUDE_CODE_CHILD_SESSION=1).

Summary: Assistant text emitted mid-turn — a text block followed by another thinking block and/or further tool calls in the same turn — is frequently neither rendered on any surface nor persisted to the session transcript JSONL. The affected assistant message is persisted as [thinking, thinking, tool_use] with the text block absent. Text in the shape [thinking, text, tool_use] (text immediately preceding the tool call) and end-of-turn text render and persist normally.

Impact: The model believes it has shown the user content and asks follow-ups like "Did you review the list printed above?" when nothing was ever displayed — from the user's side, "the text is being swallowed." In one measured session, 12 of 13 mid-turn status texts vanished from both the display and the JSONL. This is easily mistaken for #23862 / #58207 (AskUserQuestion dialog overlay hiding preceding text) but is distinct: the text is absent from the transcript JSONL itself, so the loss occurs upstream of rendering, and it affects text before any tool call, not just AskUserQuestion.

Evidence (session JSONLs available on request):

  • Incident session: message-ID-grouped JSONL entries show single API messages persisted as [thinking(signature-only), thinking(signature-only), tool_use:AskUserQuestion] whose tool input references "printed above" / "reprinted above" content that exists nowhere in the file (verified by full-file grep for the referenced phrases — they occur only inside the tool inputs and their tool_results).
  • Control in the same session: an ask persisted as [thinking, text(3817), tool_use:AskUserQuestion] — the text both persisted and rendered (user confirmed reviewing it).
  • Diagnostic session: the assistant demonstrably emitted ~13 short texts between tool calls; exactly 1 persisted (the one shaped [thinking, text, tool_use]); the user confirmed seeing none of them render.

Repro sketch (stochastic — depends on the model interleaving thinking after the text): With a thinking-enabled model, prompt: "Think about X, then print a 10-line numbered summary in chat, then reconsider briefly, then run ls — all in one turn." When the model emits thinking → text → thinking → tool_use, observe that the summary neither renders nor appears in ~/.claude/projects/<project>/<session>.jsonl, while the message's thinking and tool_use blocks do.

Open question the local evidence can't settle: whether the text block is dropped harness-side (streamed but discarded) or never surfaced by the API as a visible block — thinking content is signature-only (redacted) in the JSONL, so the two are locally indistinguishable. Either way the harness-visible symptom is the same: user-facing loss of assistant output with no error.

View original on GitHub ↗

This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗