From 714cbe6dbd0dcf9676613bcf2ecf66b3c774ff2d Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Tue, 26 May 2026 13:48:52 -0400 Subject: [PATCH] fix(opencode): preserve worktree path when disposing instances --- packages/opencode/src/worktree/index.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/worktree/index.ts b/packages/opencode/src/worktree/index.ts index 76884eb60..0af9c9540 100644 --- a/packages/opencode/src/worktree/index.ts +++ b/packages/opencode/src/worktree/index.ts @@ -395,8 +395,8 @@ export const layer: Layer.Layer< const directory = yield* canonical(input.directory) - // Bootstrapped worktrees may hold file handles, which must be released before removal on Windows. - if (directory !== (yield* canonical(ctx.worktree))) yield* store.disposeDirectory(directory) + // Preserve the loaded path casing for the store cache; `directory` is lowercased on Windows. + if (directory !== (yield* canonical(ctx.worktree))) yield* store.disposeDirectory(input.directory) const list = yield* git(["worktree", "list", "--porcelain"], { cwd: ctx.worktree }) if (list.code !== 0) { @@ -415,6 +415,8 @@ export const layer: Layer.Layer< return true } + // Git may return the original casing when a caller supplied a normalized Windows path. + yield* store.disposeDirectory(entry.path) yield* stopFsmonitor(entry.path) const removed = yield* git(["worktree", "remove", "--force", entry.path], { cwd: ctx.worktree }) if (removed.code !== 0) {