/rewind says "conversation will be forked" but never creates a resumable fork
Open 💬 6 comments Opened May 1, 2026 by chrisvaillancourt
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
/rewindresets 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
/resumeandclaude --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— zeroisSidechain: trueentries - Every message carries the same
sessionId; no second session ID exists last-prompt/leafUuidentries 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 asisSidechain: 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
- #24471 —
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. - #9279 (closed) — Requests rewind without forking. Its description confirms rewind is designed to fork every time, making the current behavior a bug.
- #47987 — "Summarize from here" after rewind drops pre-rewind messages. Same class of data loss, different trigger.
This issue has 6 comments on GitHub. Read the full discussion on GitHub ↗