mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-25 09:41:04 +01:00
68 lines
2.2 KiB
TypeScript
68 lines
2.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { validatePrpStructuredRunResult } from "../../packages/paperclip-runner/src/protocol/replay-contract.js";
|
|
import { normalizePrpResultSignals } from "../../packages/paperclip-runner/src/protocol/result-normalization.js";
|
|
import { narratives } from "./narratives.js";
|
|
import { observe } from "./observe.js";
|
|
const result = {
|
|
schema: "paperclip.run_result.v1",
|
|
reportedWorkDisposition: "done",
|
|
summary: "Completed work",
|
|
completionClaim: {
|
|
contractRevision: "1",
|
|
objectiveSatisfied: true,
|
|
criteria: [
|
|
{ criterionId: "objective", status: "satisfied", evidenceRefs: [] },
|
|
],
|
|
remainingWork: [],
|
|
},
|
|
evidence: [],
|
|
verification: [],
|
|
};
|
|
describe("LCA runner protocol narrative pairs", () => {
|
|
it.each(narratives.filter(([, text]) => text.length > 0))(
|
|
"LCA-01 structured completion / %s",
|
|
(variant, summary) => {
|
|
const actual = validatePrpStructuredRunResult({ ...result, summary });
|
|
observe("LCA-01", `runner:${variant}`, actual);
|
|
expect(actual).toMatchObject({
|
|
ok: true,
|
|
result: { reportedWorkDisposition: "done" },
|
|
});
|
|
},
|
|
);
|
|
it.each(narratives)(
|
|
"LCA-09 summary cannot replace missing disposition / %s",
|
|
(variant, summary) => {
|
|
const { reportedWorkDisposition, ...withoutDisposition } = result;
|
|
const actual = validatePrpStructuredRunResult({
|
|
...withoutDisposition,
|
|
summary,
|
|
});
|
|
observe("LCA-09", `runner:missing:${variant}`, actual);
|
|
expect(actual.ok).toBe(false);
|
|
},
|
|
);
|
|
it.each(narratives)(
|
|
"LCA-11 explicit verification reason survives detail / %s",
|
|
(variant, detail) => {
|
|
const actual = normalizePrpResultSignals({
|
|
...result,
|
|
verification: [
|
|
{
|
|
commandOrCheck: "tests",
|
|
status: "not_run",
|
|
reasonCode: "tool_unavailable",
|
|
detail,
|
|
},
|
|
],
|
|
});
|
|
observe("LCA-11", `runner:verification:${variant}`, actual);
|
|
expect(actual.verification[0]).toMatchObject({
|
|
status: "not_run",
|
|
reasonCode: "tool_unavailable",
|
|
});
|
|
expect(actual.actionableAttentionRequests).toEqual([]);
|
|
},
|
|
);
|
|
});
|