[Bug] Fable mid-turn messages not visible to operator, long mid-turn assistant text is emitted as a thinking block instead of a text block
Bug Description
Fable mid-turn messages are consistently invisible to the operator
Environment Info
- Platform: darwin
- Terminal: tmux
- Version: 2.1.210
- Feedback ID: 5b5c1689-276a-48ba-a6f5-f76b11e2715c
Errors
[]
---
Model: claude-fable-5 · Claude Code: 2.1.210 · Platform: macOS arm64 (Darwin 25.5.0)
Summary: With interleaved thinking + tool use, Fable 5 systematically fails to deliver substantive prose written mid-turn (i.e., followed by more tool calls in the same response). The content arrives at the client as an extra signed thinking block rather than a text block, so Claude Code never renders it as a message and strips it to an empty stub in the session transcript. The model believes it answered; the user sees nothing. Opus 4.8 in the identical setup does not do this.
Evidence (session JSONL analysis, one representative session of 124 API responses):
- Only 19 responses contained text blocks. Every mid-turn survivor was ≤157 chars (short transitional one-liners). The only long survivor (~3KB) was the turn-final message with no trailing tool call.
- 31 responses show the failure fingerprint: [thinking, thinking, tool_use] under one message id, where the second thinking block (empty content + valid signature after persist) sits exactly where the emitted prose should be. Grep for distinctive phrases from the lost messages returns zero hits.
- Lost content included direct answers to mid-turn user questions and a multi-paragraph plan the user explicitly asked to have restated — it was "restated" into a thinking block again.
- Control: Opus 4.8 transcripts on the same machine persist mid-turn text blocks of 1–3KB alongside tool_use without issue.
Impact: the model appears unresponsive/rude — it "answers" mid-turn questions invisibly and keeps working. Recurs in every Fable session observed, never with Opus.
Repro: ask Fable 5 a question mid-turn while it's in a long tool-use loop, such that its answer exceeds a few hundred characters and is followed by further tool calls. Then check the session JSONL for [thinking, thinking, tool_use] groups and grep for the answer text.
Workaround observed to help: keeping mid-turn narration to one short sentence; placing anything user-critical in the turn's final message.