diff --git a/scripts/provision-worktree.sh b/scripts/provision-worktree.sh index 725f9c67802..a80c01f7793 100644 --- a/scripts/provision-worktree.sh +++ b/scripts/provision-worktree.sh @@ -332,11 +332,15 @@ main().catch((error) => { EOF } -if paperclipai_command_available; then - run_isolated_worktree_init +if [[ -e "$worktree_config_path" && -e "$worktree_env_path" ]]; then + echo "Reusing existing isolated Paperclip worktree config at $worktree_config_path" >&2 else - echo "paperclipai CLI not available in this workspace; writing isolated fallback config without DB seeding." >&2 - write_fallback_worktree_config + if paperclipai_command_available; then + run_isolated_worktree_init + else + echo "paperclipai CLI not available in this workspace; writing isolated fallback config without DB seeding." >&2 + write_fallback_worktree_config + fi fi list_base_node_modules_paths() { diff --git a/server/src/__tests__/workspace-runtime.test.ts b/server/src/__tests__/workspace-runtime.test.ts index e44f40da957..50e89c017cf 100644 --- a/server/src/__tests__/workspace-runtime.test.ts +++ b/server/src/__tests__/workspace-runtime.test.ts @@ -897,7 +897,7 @@ describe("realizeExecutionWorkspace", () => { await runGit(repoRoot, ["commit", "-m", "Add worktree provision script"]); try { - const workspace = await realizeExecutionWorkspace({ + const workspaceInput = { base: { baseCwd: repoRoot, source: "project_primary", @@ -923,7 +923,8 @@ describe("realizeExecutionWorkspace", () => { name: "Codex Coder", companyId: "company-1", }, - }); + } satisfies Parameters[0]; + const workspace = await realizeExecutionWorkspace(workspaceInput); const configPath = path.join(workspace.cwd, ".paperclip", "config.json"); const envPath = path.join(workspace.cwd, ".paperclip", ".env"); @@ -954,6 +955,34 @@ describe("realizeExecutionWorkspace", () => { process.chdir(workspace.cwd); expect(resolvePaperclipConfigPath()).toBe(configPath); + + const preservedPort = 39999; + await fs.writeFile( + configPath, + JSON.stringify( + { + ...configContents, + server: { + ...configContents.server, + port: preservedPort, + }, + }, + null, + 2, + ) + "\n", + "utf8", + ); + await fs.writeFile(envPath, `${envContents}PAPERCLIP_WORKTREE_COLOR="#112233"\n`, "utf8"); + + const reusedWorkspace = await realizeExecutionWorkspace(workspaceInput); + const reusedConfigContents = JSON.parse(await fs.readFile(configPath, "utf8")); + const reusedEnvContents = await fs.readFile(envPath, "utf8"); + + expect(reusedWorkspace.cwd).toBe(workspace.cwd); + expect(reusedWorkspace.created).toBe(false); + expect(reusedConfigContents.server.port).toBe(preservedPort); + expect(reusedConfigContents.database.embeddedPostgresDataDir).toBe(path.join(expectedInstanceRoot, "db")); + expect(reusedEnvContents).toContain('PAPERCLIP_WORKTREE_COLOR="#112233"'); } finally { process.chdir(previousCwd); }