Bug Description
/rewind promises "The conversation will be forked" but mutates the session in place. After rewinding, the original session disappears from /resume and claude --resume. No fork is created.
CLI text shown at rewind time
Rewind
Confirm you want to restore to the point before you sent this message:
│ did you save the transcript anywhere? if not get it again and put it
│ in the inbox next to the report but don't commit it.
│ (9m ago)
The conversation will be forked.
The code will be unchanged.
"The conversation will be forked" promises two things:
- The rewound conversation gets a new session ID
- The original session stays unchanged and resumable
The docs make the same promise for --fork-session:
This creates a new session ID while preserving the conversation history up to that point. The original session remains unchanged.
— How Claude Code works → Resume or fork sessions
/rewind honors neither.
What actually happens
/rewind resets the branch pointer to an earlier message within the same JSONL file
- No new session file or session ID is created
- The original end-state vanishes from
/resume and claude --resume
- Post-rewind messages remain in the JSONL (append-only) but no UI can reach them
JSONL evidence
Session 08bbfa97-c2f2-4220-a4a4-d9ca2f10fe42:
- 204 lines, every one marked
isSidechain: false — zero isSidechain: true entries
- Every message carries the same
sessionId; no second session ID exists
last-prompt / leafUuid entries advance through messages but never branch into a separate session
- No other JSONL file in the project directory references this session ID
A real fork would produce one of:
- A new JSONL file with a new session ID (containing the rewound conversation), or
- The abandoned branch marked
isSidechain: true, with new messages appended as isSidechain: false
Neither occurred.
Expected behavior
When /rewind says "The conversation will be forked":
- Create a new session with a new session ID for the rewound conversation
- Leave the original session unchanged and visible in
/resume
- Make both independently resumable
Environment
- Claude Code version: 2.1.126
- OS: macOS 26.4.1 (Darwin, arm64)
- Platform: CLI
Related issues
Bug Description
/rewindpromises "The conversation will be forked" but mutates the session in place. After rewinding, the original session disappears from/resumeandclaude --resume. No fork is created.CLI text shown at rewind time
"The conversation will be forked" promises two things:
The docs make the same promise for
--fork-session:/rewindhonors neither.What actually happens
/rewindresets the branch pointer to an earlier message within the same JSONL file/resumeandclaude --resumeJSONL evidence
Session
08bbfa97-c2f2-4220-a4a4-d9ca2f10fe42:isSidechain: false— zeroisSidechain: trueentriessessionId; no second session ID existslast-prompt/leafUuidentries advance through messages but never branch into a separate sessionA real fork would produce one of:
isSidechain: true, with new messages appended asisSidechain: falseNeither occurred.
Expected behavior
When
/rewindsays "The conversation will be forked":/resumeEnvironment
Related issues
isSidechainnever set on rewound branches; compaction severs the tree. Same root cause, different symptom: that issue covers the rewind picker losing history; this one covers the original session vanishing from/resume.