49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { validateUpstreamCapability } from "../src/provenance/registry";
|
|
|
|
const base = {
|
|
id: "visual-css-root-cause",
|
|
capability: "visual-css-root-cause",
|
|
disposition: "CHERRY_PICK" as const,
|
|
source: {
|
|
repository: "example/upstream",
|
|
commit: "0123456789abcdef",
|
|
sourcePaths: ["scripts/compare.mjs"],
|
|
license: "MIT",
|
|
},
|
|
targetModule: "verification",
|
|
rationale: "Adds deterministic style-root-cause diagnostics",
|
|
tests: ["geometry-diff"],
|
|
};
|
|
|
|
describe("upstream provenance policy", () => {
|
|
it("accepts traceable permissive cherry-picks", () => {
|
|
expect(validateUpstreamCapability(base)).toEqual({
|
|
valid: true,
|
|
errors: [],
|
|
warnings: [],
|
|
});
|
|
});
|
|
|
|
it("rejects AGPL code cherry-picked into core", () => {
|
|
const result = validateUpstreamCapability({
|
|
...base,
|
|
source: { ...base.source, license: "AGPL-3.0" },
|
|
});
|
|
|
|
expect(result.valid).toBe(false);
|
|
expect(result.errors.join(" ")).toMatch(/adapter\/service boundary/i);
|
|
});
|
|
|
|
it("requires exact provenance for source-derived implementations", () => {
|
|
const result = validateUpstreamCapability({
|
|
...base,
|
|
source: { license: "MIT", sourcePaths: ["compare.mjs"] },
|
|
});
|
|
|
|
expect(result.valid).toBe(false);
|
|
expect(result.errors).toContain("source.repository is required");
|
|
expect(result.errors).toContain("source.commit is required");
|
|
});
|
|
});
|