[BUG] Fable 5 routes assistant prose before tool calls into non-rendered 'narration' blocks — summaries preceding AskUserQuestion are invisible
Environment
- Claude Code: 2.1.210 (CLI, Linux terminal)
- Model:
claude-fable-5 - OS: Linux (Arch, kernel 7.0.x)
Summary
With Fable 5, assistant prose composed in the same turn as a subsequent tool call — most visibly AskUserQuestion — is emitted as a thinking-family narration block instead of a plain text block. Claude Code does not render narration durably (and persists it signature-only in the session jsonl), so the user sees nothing except the bare question widget. Multi-paragraph "here's a summary of my findings, now choose an option" turns are completely invisible.
Other Claude models (e.g. Opus 4.8) emit a plain text block in the same situation, which renders fine.
Repro
- Start Claude Code with model
claude-fable-5. - Give a prompt that makes the model present a markdown summary and then call
AskUserQuestionin the same turn (e.g. "summarize the repo layout in a bulleted list, then ask me via AskUserQuestion whether to continue"). - Observe: only the AskUserQuestion widget renders; the summary text never appears on screen.
Evidence (session jsonl)
In the affected sessions, every invisible-summary assistant turn has this content shape:
thinking (thinking: "", signature: "...") <- plaintext empty, signature-only
thinking (thinking: "", signature: "...") <- base64 signature contains the block-type string "narration"
tool_use (AskUserQuestion)
- Zero
textblocks in the turn. - The two "thinking" blocks are persisted with empty
thinkingplaintext; their base64signaturepayloads containclaude-fable-5plus the block-type stringsthinkingandnarrationrespectively. usage.output_tokens≈ 1885 while the only visible content (the tool_use input) is ~150 tokens — ~1700 tokens of prose vanished into the non-rendered blocks.
Controlled comparison in the same conversation:
| Turn shape (Fable 5) | Visible to user? |
|---|---|
| text → end turn (no tool call) | yes |
| AskUserQuestion widget payload (question/options) | yes |
| prose → AskUserQuestion same turn | no (becomes narration) |
| short text → Bash same turn | sometimes (nondeterministic — short text sometimes survives as a real text block) |
Notably, even when the model deliberately composes the content as final answer prose (not commentary), it is still emitted/classified as narration when an AskUserQuestion call follows in the same turn.
Expected
Either (a) Fable 5 emits user-directed prose as text blocks when a tool call follows, or (b) Claude Code renders narration blocks as durable, scrollback-visible output.
Related (but distinct) issues
- #30422 — widget truncates the last line of preceding text (here there is no text block at all)
- #23862 — AskUserQuestion covers preceding output
- #65841 — widget intermittently never renders