From 80967271176f9f78352f8ea0145079475bc91334 Mon Sep 17 00:00:00 2001 From: Dotta Date: Sat, 10 Oct 2026 11:44:36 -0500 Subject: [PATCH] test(boat): keep remote acceptance extensions in stacked PR Preserve the two existing additive runtime acceptance suites in the stacked feature PR while keeping browser synchronization fixes in the independently checked core branch. Co-Authored-By: Paperclip --- .../src/server/execute.remote.test.ts | 25 ------------ .../heartbeat/runtime-execution.test.ts | 39 ------------------- 2 files changed, 64 deletions(-) diff --git a/packages/adapters/claude-local/src/server/execute.remote.test.ts b/packages/adapters/claude-local/src/server/execute.remote.test.ts index 58118a838e6..cbb6ed55013 100644 --- a/packages/adapters/claude-local/src/server/execute.remote.test.ts +++ b/packages/adapters/claude-local/src/server/execute.remote.test.ts @@ -231,31 +231,6 @@ describe("claude remote execution", () => { })); }); - it("keeps an authoritative remote workspace in place while delivering managed Claude assets", async () => { - const rootDir = await mkdtemp(path.join(os.tmpdir(), "paperclip-claude-in-place-")); - cleanupDirs.push(rootDir); - await execute({ - runId: "run-in-place", - agent: { id: "agent-1", companyId: "company-1", name: "Claude", adapterType: "claude_local", adapterConfig: {} }, - runtime: { sessionId: null, sessionParams: null, sessionDisplayId: null, taskKey: null }, - config: { engine: "cli", command: "claude", cwd: "/stale-host-cwd" }, - context: { paperclipWorkspace: { cwd: "/remote-only-agent-home", source: "agent_home" } }, - executionTarget: { - kind: "remote", transport: "ssh", remoteCwd: "/old-copied-workspace", - workspaceRealization: { mode: "in_place", authoritativeRoot: "/persistent-project", pathAliases: [], outboundRestorePaths: [] }, - spec: { host: "127.0.0.1", port: 2222, username: "fixture", remoteWorkspacePath: "/persistent-project", remoteCwd: "/persistent-project", - privateKey: "PRIVATE KEY", knownHosts: "[127.0.0.1]:2222 ssh-ed25519 AAAA", strictHostKeyChecking: true }, - }, - onLog: async () => {}, - }); - expect(prepareWorkspaceForSshExecution).not.toHaveBeenCalled(); - expect(restoreWorkspaceFromSshExecution).not.toHaveBeenCalled(); - expect(syncDirectoryToSsh).toHaveBeenCalledTimes(2); - expect(syncDirectoryToSsh).toHaveBeenCalledWith(expect.objectContaining({ remoteDir: "/persistent-project/.paperclip-runtime/claude/skills" })); - const call = runChildProcess.mock.calls[0] as unknown as [string, string, string[], { remoteExecution: { remoteCwd: string } }]; - expect(call[3].remoteExecution.remoteCwd).toBe("/persistent-project"); - }); - it("does not resume saved Claude sessions for remote SSH execution without a matching remote identity", async () => { const rootDir = await mkdtemp(path.join(os.tmpdir(), "paperclip-claude-remote-resume-")); cleanupDirs.push(rootDir); diff --git a/server/src/services/heartbeat/runtime-execution.test.ts b/server/src/services/heartbeat/runtime-execution.test.ts index be39cf56883..6fdf8fa0e9b 100644 --- a/server/src/services/heartbeat/runtime-execution.test.ts +++ b/server/src/services/heartbeat/runtime-execution.test.ts @@ -1,5 +1,4 @@ import { randomUUID } from "node:crypto"; -import type { CommandManagedRuntimeRunner } from "@paperclipai/adapter-utils/command-managed-runtime"; import { mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; @@ -219,44 +218,6 @@ describe.skipIf(!support.supported)("heartbeat runtime execution boundary", () = expectCleanup(input); }); - it.each([true, false])("validates computer worktrees remotely before finalization (matching branch: %s)", async matches => { - const { input, adapter } = await fixture(); - const remoteCwd = "/home/user/paperclip/company/projects/project/task"; - const runner: CommandManagedRuntimeRunner = { - execute: vi.fn(async () => ({ exitCode: 0, signal: null, timedOut: false, pid: null, startedAt: new Date().toISOString(), - stdout: matches ? "paperclip/task\n" : "other-task\n", stderr: "" })), - }; - input.workspace.executionTarget = { - kind: "remote", transport: "computer", remoteCwd, runner, processRunner: runner, - listenerPort: 43100, - resourceAuthority: { kind: "computer-owner", computerId: randomUUID(), ownerId: randomUUID(), generation: 1 }, - fileAuthority: { kind: "remote-persistent", placementId: randomUUID(), root: remoteCwd, agentHome: "/home/user/paperclip/company/agents/agent" }, - launch: vi.fn(), inspectProcess: vi.fn(async () => ({ running: false, claim: null })), - retainWarm: vi.fn(), retire: vi.fn(async () => true), computerTool: { command: "computer", args: [] }, - }; - Object.assign(input.workspace.executionWorkspace, { - cwd: remoteCwd, worktreePath: remoteCwd, strategy: "git_worktree", branchName: "paperclip/task", - }); - adapter.execute.mockImplementationOnce(async ctx => { - expect(ctx.stopRemoteStartup).toBeTypeOf("function"); - await expect(ctx.stopRemoteStartup!()).rejects.toThrow("Remote startup stop requires a cancelled run"); - expect(input.services.envOrchestrator.releaseForRun).not.toHaveBeenCalled(); - return { exitCode: 0, signal: null, timedOut: false }; - }); - if (matches) { - await expect(executeHeartbeatRuntime(db, input)).resolves.toMatchObject({ dispatched: true }); - expect(await finalizations()).toMatchObject([{ status: "succeeded" }]); - } else { - await expect(executeHeartbeatRuntime(db, input)).rejects.toThrow("computer_workspace_branch_mismatch"); - expect(await finalizations()).toMatchObject([{ status: "failed" }]); - } - expect(runner.execute).toHaveBeenCalledOnce(); - expect(runner.execute).toHaveBeenCalledWith(expect.objectContaining({ - command: "git", args: ["symbolic-ref", "--quiet", "--short", "HEAD"], cwd: remoteCwd, bypassSession: true, - })); - expectCleanup(input); - }); - it("retains a failed sandbox restore even when persisting its receipt throws", async () => { const { input, adapter, run } = await fixture(); input.workspace.executionTarget = { kind: "remote", transport: "sandbox", remoteCwd: home };