paperclipai/paperclip · error · Error

workspace_durable_seed_root_invalid

workspace_durable_seed_root_invalid

Error message

workspace_durable_seed_root_invalid

What it means

Guard in persistDurableSeedArchive: after mkdir of the target's parent directory, an lstat shows the parent is a symlink or not a directory. The durable seed storage root fails the runtime's safety checks — typically because a symlink was planted at the parent path or something replaced the directory between creation and verification.

Source

Thrown at packages/adapter-utils/src/sandbox-managed-runtime.ts:787

  }
  if (
    input.expectedSha256 &&
    (await sha256File(input.sourcePath)) !== input.expectedSha256
  ) {
    throw new Error("workspace_durable_seed_digest_mismatch");
  }
  await fs.copyFile(input.sourcePath, input.targetPath);
}

async function persistDurableSeedArchive(input: {
  sourcePath: string;
  targetPath: string;
}): Promise<void> {
  const parent = path.dirname(input.targetPath);
  await fs.mkdir(parent, { recursive: true, mode: 0o700 });
  const parentStat = await fs.lstat(parent);
  if (parentStat.isSymbolicLink() || !parentStat.isDirectory()) {
    throw new Error("workspace_durable_seed_root_invalid");
  }
  const temporary = path.join(
    parent,
    `.${path.basename(input.targetPath)}.${randomUUID()}.tmp`,
  );
  try {
    await fs.copyFile(input.sourcePath, temporary);
    await fs.chmod(temporary, 0o600);
    await fs.rename(temporary, input.targetPath);
  } finally {
    await fs.rm(temporary, { force: true }).catch(() => undefined);
  }
}

async function execTar(args: string[]): Promise<void> {
  await execFile("tar", args, {
    env: {
      ...process.env,

View on GitHub (pinned to 01ad858492)

Solutions

  1. Remove the offending symlink or non-directory at the parent path and retry the prepare
  2. Check the runtime root (under the workspace remote dir) for leftover artifacts from a prior failed run
  3. Ensure no external process is mutating .paperclip-runtime storage while the sandbox prepares
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/adapter-utils/src/sandbox-managed-runtime.ts:787 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-09-10). Data as JSON: /api/errors/19106b44f657f9dd. Report an issue: GitHub.