From 63d91def6a77896c990a22d7d65f7f8089630329 Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Sat, 28 Mar 2026 20:56:17 -0700 Subject: [PATCH] fix: clear stale worktree and claude session on sidebar reconnect loadSession() was restoring worktreePath and claudeSessionId from prior crashes. The worktree directory no longer existed (deleted on cleanup) and --resume with a dead session ID caused claude to fail silently. Now validates worktree exists on load and clears stale claude session IDs on every server restart. Co-Authored-By: Claude Opus 4.6 (1M context) --- browse/src/server.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/browse/src/server.ts b/browse/src/server.ts index 1b6e7f74..f3f8d68d 100644 --- a/browse/src/server.ts +++ b/browse/src/server.ts @@ -221,6 +221,16 @@ function loadSession(): SidebarSession | null { const activeData = JSON.parse(fs.readFileSync(activeFile, 'utf-8')); const sessionFile = path.join(SESSIONS_DIR, activeData.id, 'session.json'); const session = JSON.parse(fs.readFileSync(sessionFile, 'utf-8')) as SidebarSession; + // Validate worktree still exists — crash may have left stale path + if (session.worktreePath && !fs.existsSync(session.worktreePath)) { + console.log(`[browse] Stale worktree path: ${session.worktreePath} — clearing`); + session.worktreePath = null; + } + // Clear stale claude session ID — can't resume across server restarts + if (session.claudeSessionId) { + console.log(`[browse] Clearing stale claude session: ${session.claudeSessionId}`); + session.claudeSessionId = null; + } // Load chat history const chatFile = path.join(SESSIONS_DIR, session.id, 'chat.jsonl'); try {