{"record":{"id":"08b839ba0fb52dfd","repo":"paperclipai/paperclip","slug":"registered-base-project-workspace-does-not-exist-a","errorCode":null,"errorMessage":"Registered base project workspace does not exist at ${resolvedRegisteredCwd}.","messagePattern":"Registered base project workspace does not exist at (.+?)\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/shared/src/worktree-seed-source.ts","lineNumber":133,"sourceCode":"export function resolveRegisteredWorktreeSeedSource(\n  input: RegisteredWorktreeSeedSourceInput,\n): CanonicalWorktreeSeedSource {\n  const registeredCwd = input.registeredBaseWorkspaceCwd?.trim();\n  const explicitSource = input.explicitSourceConfigPath?.trim();\n  if (!registeredCwd && !explicitSource) {\n    throw new Error(\n      \"Worktree seed source is not registered. Managed boot requires a project workspace; manual boot requires --from-config.\",\n    );\n  }\n\n  let canonicalBaseCwd: string | null = null;\n  let registeredConfigPath: string | null = null;\n  if (registeredCwd) {\n    const resolvedRegisteredCwd = path.resolve(registeredCwd);\n    try {\n      canonicalBaseCwd = realpathSync(resolvedRegisteredCwd);\n    } catch {\n      throw new Error(`Registered base project workspace does not exist at ${resolvedRegisteredCwd}.`);\n    }\n    if (canonicalBaseCwd !== resolvedRegisteredCwd) {\n      throw new Error(\"Registered base project workspace must be canonical and cannot use a symlink alias.\");\n    }\n    if (!lstatSync(canonicalBaseCwd).isDirectory()) {\n      throw new Error(`Registered base project workspace is not a directory at ${canonicalBaseCwd}.`);\n    }\n    // A base workspace that is a plain checkout carries no instance config of its own.\n    // The caller's explicit source supplies it, and stays subject to every check below.\n    registeredConfigPath = baseWorkspaceDeclaresInstanceConfig(canonicalBaseCwd)\n      ? path.join(canonicalBaseCwd, \".paperclip\", \"config.json\")\n      : null;\n  }\n\n  const selectedPath = registeredConfigPath ?? explicitSource;\n  if (!selectedPath) {\n    throw new Error(\n      \"Registered base project workspace has no Paperclip config of its own and no explicit source was provided.\",","sourceCodeStart":115,"sourceCodeEnd":151,"githubUrl":"https://github.com/paperclipai/paperclip/blob/a7e689b3c35347b529cb9f54c9b9a8575a3dcab6/packages/shared/src/worktree-seed-source.ts#L115-L151","documentation":"A registered base workspace cwd was supplied but realpathSync on it throws: nothing exists at that resolved path. The workspace the instance remembers is gone or was never valid, so the resolver cannot anchor the source config.","triggerScenarios":"resolveRegisteredWorktreeSeedSource with a registeredBaseWorkspaceCwd pointing at a deleted, moved, or never-created directory.","commonSituations":"Workspace moved or renamed after registration; clone deleted but registration retained; mount not present (container volume, network drive); typo in a hand-edited registration; container restart with ephemeral workspace paths.","solutions":["Confirm the path exists: `ls <resolvedRegisteredCwd>`.","If the workspace moved, re-register the base workspace at its new location (or move it back).","If the workspace is intentionally gone, drop the registration or fall back to manual boot with --from-config.","On ephemeral/container setups, ensure the workspace path persists across restarts before registering."],"exampleFix":"# before: registration still points at the old checkout path\nmv ~/code/myproj ~/code/myproject   # registration now dangling\n\n# after\npaperclip register --cwd ~/code/myproject   # re-register at the new path","handlingStrategy":"validation","validationCode":"import { existsSync } from \"node:fs\";\n\nif (input.registeredBaseWorkspaceCwd && !existsSync(input.registeredBaseWorkspaceCwd)) {\n  throw new Error(`registered workspace ${input.registeredBaseWorkspaceCwd} is gone — re-register`);\n}","typeGuard":"const workspaceDirExists = (cwd?: string | null): boolean =>\n  Boolean(cwd?.trim()) && existsSync(cwd!.trim());","tryCatchPattern":"try {\n  resolveRegisteredWorktreeSeedSource(input);\n} catch (e) {\n  if (e instanceof Error && /base project workspace does not exist/.test(e.message)) {\n    // prompt user to re-register at the current path, or continue with --from-config\n  } else throw e;\n}","preventionTips":["Re-register workspaces right after moving or renaming them.","In containers, mount workspace paths at stable locations before registering.","Add a periodic `paperclip doctor` that stats every registered workspace cwd."],"tags":["filesystem","registration","worktree-seed","directory-not-found"],"backgroundTag":"directory-not-found","analyzedSha":"a7e689b3c35347b529cb9f54c9b9a8575a3dcab6","analyzedAt":"2026-08-21T17:58:32.592Z","schemaVersion":2},"datasetVersion":"2026-08-22T14:17:55.899Z"}