[BUG] Thinking blocks arrive empty (signature-only) — reasoning invisible in UI and lost from transcripts; no summary events delivered
[BUG] Thinking blocks arrive empty (signature-only) — reasoning invisible in UI and lost from transcripts; no summary events delivered
Environment
- Extension: Claude Code for VSCode 2.1.218 (also reproduced after downgrade to 2.1.217)
- VS Code: 1.114.0, Linux
- Model: Opus 4.8 (
claude-opus-4-8) - CLI used by extension: bundled native binary (
resources/native-binary/claude) - Settings:
effortLevel: "max",CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1
Summary
As of ~2026-07-23 17:09 UTC, every thinking content block streamed to newer clients has empty thinking text — only the signature field is populated. No thinking-summary events arrive in the stream to replace the text. Result: the VSCode extension shows no Thinking block at all, and transcripts (~/.claude/projects/**/*.jsonl) permanently store empty reasoning.
An older CLI (2.1.87) on the same account, same settings, same day, returns full thinking text — so the regression is keyed to client version/protocol, not account or local config.
Evidence
1. Transcript audit — sharp cutover at 2026-07-23 22:39 IST (17:09 UTC):
session mod=07-23 19:07 blocks= 3 empty= 0 total_chars=369
session mod=07-23 22:35 blocks= 24 empty= 0 total_chars=12529
session mod=07-23 22:36 blocks= 6 empty= 0 total_chars=7449
session mod=07-23 22:40 blocks= 16 empty= 16 total_chars=0 <-- cutover
session mod=07-23 22:57 blocks= 6 empty= 6 total_chars=0
session mod=07-23 23:08 blocks= 4 empty= 4 total_chars=0
At the cutover moment, ~/.claude/settings.json was auto-modified (22:39:23) — showThinkingSummaries: true appeared without user action, consistent with the client persisting a server-pushed default.
2. Block structure after cutover (from transcript JSONL):
{"type": "thinking", "thinking": "", "signature": "<644-char signature>"}
3. Version A/B test — same account, same prompt, minutes apart:
# Bundled CLI 2.1.217:
$ claude -p "Briefly, why is the sky blue?" --output-format stream-json --verbose --max-turns 1
THINKING BLOCK: 0 chars, starts: ''
# System CLI 2.1.87:
$ claude -p "Briefly, why is the sky blue?" --output-format stream-json --verbose --max-turns 1
THINKING BLOCK: 45 chars, starts: 'Simple question, not related to the codebase.'
4. No summary events in the stream (2.1.217, full event dump):
system init
rate_limit_event
assistant ['thinking'] <- empty text
assistant ['text']
result success
5. Ruled out locally (each tested):
showThinkingSummaries:true,false, and absent — empty text in all three cases- Extension downgrade 2.1.218 → 2.1.217 — no change
- Full Electron cache wipe (Cache, Code Cache, GPUCache, Service Worker) — no change
state.vscdbintegrity — okthinkingLevel: "default_on"confirmed in launch message; no errors in exthost/renderer/extension logs
Impact
- UI: No Thinking block rendered anywhere in the VSCode extension (live or resumed sessions).
- Data loss: reasoning is not persisted — transcripts since the cutover contain no recoverable reasoning text.
Expected
Either raw thinking text streams to the client (as before), or thinking-summary events actually arrive and render when the server withholds raw text.
Steps to reproduce
- VSCode extension ≥2.1.217 (or bundled CLI), account where the summaries rollout is active
- Send any prompt that triggers extended thinking
- Observe stream:
thinkingblock hasthinking: "", signature only; no summary events; no Thinking UI