[BUG] Claude Desktop 1.7196.0 (macOS): "Can't rewind to this message" persists with no plugins installed — plugin-independent variant of #57206
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report
- [x] I am using the latest version of Claude Code
What's Wrong?
In Claude Desktop 1.7196.0 on macOS, every rewind attempt is rejected with the popup "Can't rewind to this message" — the same surface symptom as the closed issue #57206 — but the resolution given there (remove the double-shot-latte plugin from superpowers-marketplace) does not apply to my install. I have no third-party marketplace plugins installed, only first-party swift-lsp and clangd-lsp from claude-plugins-official, and no Stop hooks configured anywhere in ~/.claude/settings.json. Updating Desktop from 1.6608.0 → 1.7196.0 did not change the behavior.
This matches the situation reported by stefansimik on #57206: same symptoms, no plugins, current Desktop build. That issue was closed after a single user's bisection found a plugin trigger and is therefore not tracking this plugin-independent variant.
Critical observation distinguishing this from a "corrupted session jsonl" hypothesis: the on-disk session jsonl files are structurally intact. Walking parentUuid from the latest leaf in a sample failing session reaches nearly every entry (763 of 772), with zero orphan parent references. Desktop's main.log for that same session reports chain size 5/1367 for the rewind attempt. The defect is in Desktop's in-memory chain reconstruction, not the persisted history.
What Should Happen?
Selecting an anchor in the rewind picker should restore the conversation to the point before that message, as in pre-1.6608.0 builds. The validator should walk the same parentUuid chain that the on-disk jsonl already encodes correctly.
Error Messages/Logs
Two repeating signatures in ~/Library/Logs/Claude/main.log on every rewind attempt (UUIDs redacted):
[info] LocalSessions.rewind: sessionId=local_<sid> target=<uuid>
[info] [Rewind] No rewind point for local_<sid> target=<uuid> (assistantUuid=none, hasText=true)
[info] LocalSessions.rewind: sessionId=local_<sid> target=<uuid>
[info] [Rewind] target=<uuid> → assistantUuid=<uuid> not on active chain for local_<sid> (chain size 5/1367)
Observed chain size N/M values across several distinct affected sessions: 1/678, 3/471, 4/402, 4/451, 5/1367, 8/466. These are the same two log signatures called out in #57206 (assistantUuid=none, hasText=true and not on active chain).
For one of the affected sessions, I analyzed the on-disk jsonl directly:
- 964 lines, 772 entries carry a
uuid. - 771 of those entries carry a
parentUuid. 0 of them are orphans — everyparentUuidresolves to auuidpresent in the same file. - Walking
parentUuidfrom the most recent entry yields an active chain of 763 entries — essentially the whole file. - Desktop's own log, for the same
sessionId, reportedchain size 5/1367on its rewind attempt against this session.
So Desktop's in-memory "active chain" disagrees with the persisted history both in size (1367 vs 772) and in traversal length (5 reachable vs 763 reachable on disk). The file mixes entrypoint=claude-desktop entries from versions 2.1.121 and 2.1.128, consistent with a session that survived a Desktop auto-update mid-conversation.
Steps to Reproduce
- Install Claude Desktop 1.7196.0 on macOS with no third-party marketplace plugins enabled and no
Stophooks in~/.claude/settings.json. - Open any existing session whose jsonl spans more than one Desktop client version (e.g. one started under 2.1.121 and continued under 2.1.128).
- Press
Esc Esc(or click the rewind button). The picker renders normally with anchors. - Select any anchor.
- Popup: "Can't rewind to this message", and a matching
[Rewind] ... not on active chain (chain size N/M)line (withN << M) lands in~/Library/Logs/Claude/main.logwithin ~1 second.
Reproduces 100% on affected sessions. Fresh single-version sessions are less consistently affected, matching the multi-version jsonl hypothesis.
Claude Model
Not relevant — the failure is in Desktop's client-side rewind validator before any model call is issued.
Is this a regression?
Yes, this worked in a previous version.
Last Working Version
Pre-1.6608.0 Desktop (per the original report on #57206). Both 1.6608.0 and 1.7196.0 exhibit the failure on this machine.
Claude Code Version
Claude Desktop 1.7196.0 (from CFBundleShortVersionString in /Applications/Claude.app/Contents/Info.plist).
Terminal Claude Code on the same machine: 2.1.139 — CLI rewind continues to work correctly against the same shared session jsonl files.
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Other — failure is in the Claude Desktop GUI, not a terminal.
Additional Information
- Variant of #57206, not a duplicate. That issue was closed as not-a-bug after its reporter bisected to the
double-shot-latteplugin. The same surface symptom ("Can't rewind to this message"+ the two log signatures above) occurs here without that plugin or any other third-party marketplace plugin, and without anyStophooks.stefansimik's comment on #57206 reports the same plugin-independent failure mode on a clean install. - Hypothesis on root cause. The validator that emits
not on active chainandassistantUuid=none, hasText=trueappears to be walking an in-memory chain that does not correspond to theparentUuidgraph actually persisted in the session jsonl. When the jsonl mixes multiple Desktop client versions (mid-session auto-update) and/or CLI + Desktop entries, the in-memory reconstruction collapses to a very short chain (single-digit length out of hundreds or thousands of entries) and every rewind anchor falls outside it. - Workarounds that still function in 1.7196.0:
- "Fork from here" on the intended rewind anchor.
- Initiating the rewind from terminal Claude Code on the same shared session jsonl. The CLI walks
parentUuidcorrectly and persists the truncation to disk, though Desktop does not re-render the truncated branch (consistent with the secondary observation already filed on #57206). - Suggested fix direction. The validator should walk
parentUuidon the persisted jsonl rather than relying on an in-memory chain that diverges from it; or, at minimum, relax the rejection when the on-diskparentUuidchain to the requested anchor is well-formed even if the in-memory chain has dropped entries.
Related issues
- #57206 — closed; covers the plugin-induced variant only.
- #50780 — Desktop first-message-only rewind failure (distinct: every message is rejected here).
- #48955 — Desktop rewind breaks for CLI-origin messages (distinct: native Desktop messages are rejected here too).
- #44828 —
isMeta:truefilter (distinct rejection path).
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗