Desktop app: messages written after forking a session are hidden in the viewer and omitted from Export (per-row sessionId mismatch)

Status Open
Maintainer reply None cached
Activity 0 comments · opened Sep 17, 2026

Summary

In the Claude desktop app (Code tab), after a session is forked, every message written in the fork after the fork point is invisible in the conversation view and is omitted from "Export transcript". The messages are still present in the transcript file on disk and the running session sees them, so this is a display/export filter bug, not data loss.

Environment

  • Claude desktop app 2.110.1 (macOS, Darwin 27.0.0)
  • Local session, Code tab, auto permission mode

Steps to reproduce

  1. Have a session with some conversation in it.
  2. Fork it (the app creates a session titled "<title> (fork)"; forking again creates "(fork 2)").
  3. Continue the conversation in the fork for several turns.
  4. Open the fork in the sidebar. The view stops at the last message written before the fork. Everything after it is missing.
  5. Export the fork's transcript. The exported transcript.jsonl also contains only the pre-fork rows.

What the transcript file shows

Each row in ~/.claude/projects/<project>/<sessionId>.jsonl carries a sessionId field. In the forked file:

  • Every row copied from the original session still carries the original session's id (e.g. 2664b18b-…).
  • Every row written after the fork carries the fork's id (cf2f5488-…), which is also the file's name.
  • The parentUuid chain is intact across the fork boundary (walking back from the last row reaches the first row; zero orphan parents).

The viewer and the exporter appear to keep only rows whose sessionId matches the original id and drop the rest. Result: 300+ post-fork rows (38 user/assistant turns over two days) are present on disk but never rendered or exported.

Row counts by sessionId in one affected file: 461 rows before the boundary tagged with the original id; 312 rows after it tagged with the fork's id.

Secondary oddity

The sidebar lists an "original" session entry for this conversation that has no transcript file on disk at all, and the id that the rows name as the true original (2664b18b-…) does not appear in the sidebar anywhere. So the fork logic also seems to re-id sessions inconsistently.

Expected

All rows in a session's transcript file should be displayed and exported, regardless of the per-row sessionId tag. Either forking should rewrite the copied rows to the new session id, or the viewer/exporter should not filter on that field.

Workaround

Reading the .jsonl directly, or rendering the post-fork rows to Markdown with a script, recovers the missing messages.

View original on GitHub ↗