Follow Discord
Sweep 08 Oct 2026 · 18:53Z Build v2.1.295 516 read Stable v2.1.286 Latest v2.1.295 Next v2.1.295 Feeds RSS JSON llms.txt llms-full.txt Unofficial

Claude Code v2.1.291 ·

Session transcript files are no longer locked while they are moved or written

Claude Code stopped taking a per-file lock on session transcripts when moving them, hydrating sessions and writing subagent transcripts

Group of 2 Under the hood Internal Changes
JSON All of v2.1.291
Under the hoodTier: how much it should matter to you
1Useful: my rating, 1 to 5
1Signal: worth watching, 1 to 5
ElsewhereArea: what it touches
Internal ChangesKind: in v2.1.291,
Internal ChangesSection of the release

Unclear It is not clear whether the removed waits were real file locks, or whether equivalent protection now happens somewhere else.

What

A session transcript is the file where Claude Code records a conversation so it can be resumed later. Until this release, Claude Code took a per-file lock before moving or rewriting that file. A lock is a guard that makes other writers wait their turn instead of touching the same file at the same moment. That lock is now gone from several places:

  • relocateSessionTranscript, which moves a transcript to a new place, for example after the session changes directory. It no longer locks the destination before setting it aside, or the source before the move. A follow-up step that ran after the move (TRn(h, S)) was removed as well, and the move helper changed from VRn to LRn, which no longer takes the guard. The recovery path that logs relocateSessionTranscript: could not restore set-aside destination after ENOENT move is kept.
  • Remote session hydration, the step that fills in a local transcript from a remote copy, both the v1 path and the CCR v2 foreground path. The Skipping remote hydration and Skipping CCR v2 foreground hydration paths now run without the lock.
  • Subagent transcript writes, where a subagent (a helper agent Claude starts for part of a task) saves its own transcript. The Subagent transcript write failed path also runs without the lock.

In the code, each removed lock was a using ... = await EI(path) acquisition on the file's path.

Why

Without the lock, two things writing the same transcript at once, such as resuming, teleporting a session or a subagent saving its transcript, are no longer made to wait for each other. The members do not say why the lock was removed. If transcripts look incomplete or out of order after moving, resuming or running subagents, this change is a place to look.

How sure we are
Something disagreesSomething we can check disagrees with this entry, or the writer said they could not settle it.
The writer flagged doubtIt is not clear whether the removed waits were real file locks, or whether equivalent protection now happens somewhere else.

See this entry in the whole of v2.1.291 →

Feedback