mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-11-10 12:37:55 +01:00
fix(evals): bind SDK public proof to reviewed runtime lock
Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
1 parent
fd69dde707
commit
80d7992590
2 files changed
+22
-2
No files matched your search
@@ -507,7 +507,7 @@
|
||||
"tsconfig.base.json": "2d0e41f723add0c678936eb9ae1c60eab710f8e0",
|
||||
"tsconfig.json": "994ee490fb97be7cc0954f4dfd88cf0723290e6c"
|
||||
},
|
||||
"lockSha256": "c7f23021335b60da0cff1dd4c75cf8b948333ef3165d7d1703eb79a589edb798",
|
||||
"lockSha256": "54a81b2ed3f1f85eaa085c034560ac248e384db34fbc7aba8c5a3846c29b3ce8",
|
||||
"compilerPackageSha256": "3722b30210616a13a3213ded11575ba6b2dbab10c32a5ef67afca8513e27017e",
|
||||
"parserPackageSha256": "6d6a65b879cd7cd249a4367c0b57cce00e78c728de45056ac2a5ca1d1f528d1a",
|
||||
"parserEntrySha256": "6969920ae0610df927b6b3e675d1309372c268e36d391652af8e3e0183cbe8f8",
|
||||
|
||||
@@ -4,7 +4,7 @@ import path from "node:path";
|
||||
import os from "node:os";
|
||||
import { beforeAll, afterAll, expect, it } from "vitest";
|
||||
import pins from "./source-sdk-public-inputs.json" with { type: "json" };
|
||||
import { createSdkArtifactScanner, sdkPublicTypeSyntax } from "./source-sdk-public-type.js";
|
||||
import { createSdkArtifactScanner, sdkPublicTypeSyntax, verifySdkPublicSource } from "./source-sdk-public-type.js";
|
||||
import { findSecretLeakMatch, normalizedSecrets } from "./redaction.js";
|
||||
import { diagnosticSecrets } from "./private-diagnostics.js";
|
||||
const hash = (v: string | Buffer) => createHash("sha256").update(v).digest("hex");
|
||||
@@ -26,6 +26,26 @@ async function fixture(sourceText = source) {
|
||||
await mkdir(path.dirname(path.join(root, inputFile)), { recursive: true }); await writeFile(path.join(root, inputFile), sourceText);
|
||||
return { ...pins, lockSha256: fixtureLockSha256, inputs: { ...fixtureInputs, [inputFile]: blob(sourceText) } };
|
||||
}
|
||||
it("default public proof accepts the reviewed build lock and still rejects a changed lock", async () => {
|
||||
const directory = await realpath(await mkdtemp(path.join(os.tmpdir(), "sdk-reviewed-runtime-")));
|
||||
try {
|
||||
for (const relative of Object.keys(pins.inputs)) {
|
||||
const destination = path.join(directory, relative);
|
||||
await mkdir(path.dirname(destination), { recursive: true });
|
||||
await copyFile(path.join(originalRoot, relative), destination);
|
||||
}
|
||||
await symlink(await realpath(path.join(originalRoot, "node_modules")), path.join(directory, "node_modules"));
|
||||
await symlink(await realpath(path.join(originalRoot, "packages/shared/node_modules")), path.join(directory, "packages/shared/node_modules"));
|
||||
const reviewed = JSON.parse(await readFile(path.join(originalRoot, "tests/runner-e2e/report-lock.json"), "utf8"));
|
||||
const lock = await readFile(path.join(directory, "pnpm-lock.yaml"));
|
||||
expect(hash(lock)).toBe(reviewed.outputSha256);
|
||||
// Use the real default registry, without injecting alternate expected pins.
|
||||
const proof = await verifySdkPublicSource(directory);
|
||||
expect(proof.identity.lockSha256).toBe(hash(lock));
|
||||
await writeFile(path.join(directory, "pnpm-lock.yaml"), Buffer.concat([lock, Buffer.from("\n# changed owning runtime input\n")]));
|
||||
await expect(verifySdkPublicSource(directory)).rejects.toThrow("SDK public source proof unavailable");
|
||||
} finally { await rm(directory, { recursive: true, force: true }); }
|
||||
});
|
||||
it("classifies varied genuinely public schema types while retaining the raw observation", async () => {
|
||||
for (const text of [declaration, declaration.replaceAll("z.", "schemaLibrary.").replace("{z}", "{z as schemaLibrary}"), declaration.replace("ZodString", "ZodNumber")]) {
|
||||
const scanner = createSdkArtifactScanner(root, [], await fixture()); expect(await scanner.scan(file, Buffer.from(text))).toBe(true);
|
||||
|
||||
Reference in new issue
Block a user