Bind Daytona image identity to Cursor isolation patch

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
DottaandPaperclip committed 2026-09-29 09:53:20 -05:00
1 parent 526081b9d6
commit abad2bd0da
2 files changed
+24

No files matched your search

@@ -38,6 +38,7 @@ export const DAYTONA_IMAGE_INPUT_PATHS = [
"packages/paperclip-runner/scripts/build-provider-pack.mjs",
"packages/paperclip-runner/scripts/candidate-provider-pack.mjs",
"packages/paperclip-runner/scripts/materialize-cursor-distribution.mjs",
"packages/paperclip-runner/scripts/cursor-runtime-patch.mjs",
"packages/paperclip-runner/scripts/build-verified-provider-entrypoints.mjs",
"packages/paperclip-runner/scripts/generate-acpx-sidecar-contract.mjs",
"packages/paperclip-runner/scripts/generate-protocol-schema-module.mjs",
+23
View File
@@ -201,6 +201,7 @@ describe("runner E2E Daytona image contract", () => {
"packages/paperclip-runner/package.json",
"packages/paperclip-runner/scripts/candidate-provider-pack.mjs",
"packages/paperclip-runner/scripts/materialize-cursor-distribution.mjs",
"packages/paperclip-runner/scripts/cursor-runtime-patch.mjs",
"packages/paperclip-runner/cursor-distributions.json",
"packages/paperclip-runner/runner/crates",
"packages/paperclip-runner/src",
@@ -331,6 +332,28 @@ describe("runner E2E Daytona image contract", () => {
}
});
it("invalidates the image when the Cursor runtime isolation patch changes", async () => {
const root = await mkdtemp(path.join(tmpdir(), "paperclip-cursor-image-id-"));
const patchPath = "packages/paperclip-runner/scripts/cursor-runtime-patch.mjs";
expect(DAYTONA_IMAGE_INPUT_PATHS).toContain(patchPath);
const options = {
repositoryRoot: root,
inputPaths: [patchPath],
baseImages: [`example.test/base:1@sha256:${"a".repeat(64)}`],
frontendDigest: `sha256:${"c".repeat(64)}`,
candidateProviders: ["cursor"],
} as const;
try {
await mkdir(path.dirname(path.join(root, patchPath)), { recursive: true });
await writeFile(path.join(root, patchPath), "export const policy = 'one';\n");
const baseline = await computeDaytonaImageContentId(options);
await writeFile(path.join(root, patchPath), "export const policy = 'two';\n");
expect(await computeDaytonaImageContentId(options)).not.toBe(baseline);
} finally {
await rm(root, { recursive: true, force: true });
}
});
it("reuses the image for runner-only tests and documentation", async () => {
const root = await mkdtemp(
path.join(tmpdir(), "paperclip-daytona-runner-development-inputs-"),