[BUG] API ignores explicit thinking display:"summarized" for Opus 4.8 / Sonnet 5 since 2026-07-16 — empty thinking blocks; server-side (request verified delivered)
Summary
As of 2026-07-16 ~15:00Z, the API returns empty thinking blocks (thinking: "", signature only) for Claude Opus 4.8 and Sonnet 5, even when display: "summarized" is explicitly requested — including when injected directly into the raw request body. Fable 5 and Haiku 4.5 are unaffected. Onset occurred mid-session on unchanged client code and unchanged settings, so this is a server-side change, not a client regression. No client-side remedy (setting, CLI flag, request-body injection, or extension downgrade) restores summaries.
This differs from the existing reports (#74910, #77574, #77460, #76920, #49268): those diagnose the client failing to request summarized. Here the request is verified delivered on the wire and is ignored.
Environment
- macOS 15 (arm64), VS Code extension 2.1.211 (bundled CLI used for headless repro)
- Max plan, direct Anthropic API (no Vertex/Bedrock/proxy)
showThinkingSummaries: truein~/.claude/settings.jsonsince 2026-07-01 (git history) — the documented restore from the v2.1.89 default change, in place and working until onset
Evidence that the client request is correct
- The live extension-spawned CLI process passes
--thinking-display summarized(verified viaps). - Summaries worked through 2026-07-15 EOD and broke 2026-07-16 ~15:00Z inside a still-running session on 2.1.210 — no update, reload, or settings change in between.
- Local transcript scan: Jul 7–15 → 0 empty Opus 4.8 thinking blocks; from Jul 16 ~15:00Z → all empty, signatures up to ~11.5K chars (the
display: "omitted"fingerprint described in #77460).
Decisive experiment: request-body injection
CLAUDE_CODE_EXTRA_BODY='{"thinking":{"type":"enabled","budget_tokens":31999,"display":"summarized"}}' \
claude -p "What is 61*67? Think it through." --model claude-opus-4-8 \
--max-turns 1 --output-format stream-json --verbose
→ thinking block present, thinking text empty. Same with {"type":"adaptive","display":"summarized"}.
Extra-body delivery was verified with a control: injecting {"max_tokens":64} overrode the CLI's own computed max_tokens (response truncated mid-sentence and auto-continued). Same merge precedence ⇒ the explicit display: "summarized" reached the wire and was ignored.
A/B repro (identical flags)
--max-thinking-tokens 31999 --thinking-display summarized --output-format stream-json --verbose, same prompt class:
| Model | Thinking block |
|---|---|
| claude-fable-5 | ✅ text |
| claude-haiku-4-5-20251001 | ✅ text |
| claude-opus-4-8 | ❌ empty or absent |
| claude-opus-4-8[1m] | ❌ absent |
| claude-opus-4-8 + --thinking adaptive | ❌ empty |
| claude-sonnet-5 | ❌ absent |
--debug --debug-to-stderr shows no [thinking] model rejected negotiation — the request succeeds; the summary simply isn't generated.
Expected behavior
An explicit thinking.display: "summarized" request returns summarized thinking text for all models that support it, as it did through 2026-07-15.
Actual behavior
Empty thinking text with signature-only blocks for Opus 4.8 and Sonnet 5; UI renders inert "Thought for Xs" stubs; reasoning is permanently unrecoverable for affected turns (never generated).
Impact
Users who rely on reasoning visibility have no recourse on Opus 4.8 / Sonnet 5 — the documented showThinkingSummaries: true workaround no longer has any effect for accounts hit by this rollout. Staged-rollout pattern matches the dates of prior reports (Jul 6 #74910, Jul 12 #76920, Jul 14 #77574 / #77460, Jul 16 here).