/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:

  1. The rewound conversation gets a new session ID
  2. 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

  1. /rewind resets the branch pointer to an earlier message within the same JSONL file
  2. No new session file or session ID is created
  3. The original end-state vanishes from /resume and claude --resume
  4. 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":

  1. Create a new session with a new session ID for the rewound conversation
  2. Leave the original session unchanged and visible in /resume
  3. Make both independently resumable

Environment

  • Claude Code version: 2.1.126
  • OS: macOS 26.4.1 (Darwin, arm64)
  • Platform: CLI

Related issues

  • #24471isSidechain never 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.

View original on GitHub ↗

This issue has 6 comments on GitHub. Read the full discussion on GitHub ↗