From 5cc2e24800329378c38c3ea66892c063d01bd226 Mon Sep 17 00:00:00 2001 From: Tibsfox Date: Mon, 6 Apr 2026 19:12:48 -0700 Subject: [PATCH] fix(gsd): handle deleted cwd in projectRoot to prevent ENOENT crash process.cwd() throws ENOENT when the worktree directory was deleted during a failed merge. Every /gsd command calls projectRoot(), causing the entire extension to crash. Now catches the ENOENT and falls back to HOME directory. Closes #3598 Co-Authored-By: Claude Opus 4.6 (1M context) --- src/resources/extensions/gsd/commands/context.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/resources/extensions/gsd/commands/context.ts b/src/resources/extensions/gsd/commands/context.ts index 7bbaa5790..f4a5aa423 100644 --- a/src/resources/extensions/gsd/commands/context.ts +++ b/src/resources/extensions/gsd/commands/context.ts @@ -13,7 +13,13 @@ export interface GsdDispatchContext { } export function projectRoot(): string { - const cwd = process.cwd(); + let cwd: string; + try { + cwd = process.cwd(); + } catch { + // cwd directory was deleted (e.g. worktree teardown) — fall back to HOME (#3598) + cwd = process.env.HOME ?? "/"; + } const root = resolveProjectRoot(cwd); if (root !== cwd) { assertSafeDirectory(cwd);