mirror of
https://github.com/morluto/rea
synced 2026-10-25 22:08:11 -04:00
156 lines
5.0 KiB
TypeScript
156 lines
5.0 KiB
TypeScript
import { reconstructionClosureResultSchema } from "../../../src/domain/reconstructionCoverage.js";
|
|
import { reconstructionCoverageScopeCases } from "../../../src/domain/reconstructionCoverageScope.fixture.js";
|
|
import { writeFile } from "node:fs/promises";
|
|
import { join } from "node:path";
|
|
import { expect } from "vitest";
|
|
|
|
import { completeReconstructionCoverageData } from "../../../src/domain/reconstructionCoverage.fixture.js";
|
|
import { parseMcpToolError } from "../../fixtures/mcpToolError.js";
|
|
import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js";
|
|
import { cliTest, type TestCli } from "../../support/cli/cliFixture.js";
|
|
|
|
const currentCoverage = () => {
|
|
const coverage = completeReconstructionCoverageData();
|
|
return {
|
|
...coverage,
|
|
verifier_results: coverage.verifier_results.map((result) => ({
|
|
...result,
|
|
observed_at: new Date().toISOString(),
|
|
})),
|
|
};
|
|
};
|
|
|
|
const evaluate = async (cli: TestCli, coverage: unknown) => {
|
|
const root = await createTestTempDirectory("rea-coverage-cli-");
|
|
const input = join(root, "request.json");
|
|
await writeFile(
|
|
input,
|
|
JSON.stringify({ coverage, boundary_id: "replacement.cli" }),
|
|
);
|
|
return cli.run({
|
|
arguments: ["evaluate-reconstruction-coverage", input, "--json"],
|
|
cwd: root,
|
|
});
|
|
};
|
|
|
|
cliTest(
|
|
"evaluates complete inline coverage through the compiled CLI",
|
|
async ({ cli }) => {
|
|
const result = await evaluate(cli, currentCoverage());
|
|
expect(result.exitCode).toBe(0);
|
|
expect(result.json).toMatchObject({
|
|
boundary_id: "replacement.cli",
|
|
status: "ready",
|
|
summary: { reasons: 0 },
|
|
});
|
|
},
|
|
);
|
|
|
|
cliTest(
|
|
"reports a tampered coverage record as an integrity failure",
|
|
async ({ cli }) => {
|
|
const coverage = currentCoverage();
|
|
const result = await evaluate(cli, {
|
|
...coverage,
|
|
evidence_bundle: {
|
|
...coverage.evidence_bundle,
|
|
records: coverage.evidence_bundle.records.map((record, index) =>
|
|
index === 0
|
|
? { ...record, normalized_result: { tampered: true } }
|
|
: record,
|
|
),
|
|
},
|
|
});
|
|
expect(result.exitCode).toBe(1);
|
|
expect(result.json).toMatchObject({
|
|
code: "evidence_integrity_mismatch",
|
|
category: "integrity_mismatch",
|
|
});
|
|
},
|
|
);
|
|
|
|
cliTest(
|
|
"preserves shared integrity diagnostics for malformed source Evidence",
|
|
async ({ cli }) => {
|
|
const coverage = currentCoverage();
|
|
const malformed = {
|
|
...coverage,
|
|
evidence_bundle: {
|
|
...coverage.evidence_bundle,
|
|
records: coverage.evidence_bundle.records.map((record, index) =>
|
|
index === 0
|
|
? { ...record, provider: { ...record.provider, name: 3 } }
|
|
: record,
|
|
),
|
|
},
|
|
};
|
|
const call = await cli.sharedMcpCall?.();
|
|
if (call === undefined) throw new Error("Expected file MCP session");
|
|
const mcp = await call("evaluate_reconstruction_coverage", {
|
|
coverage: malformed,
|
|
boundary_id: "replacement.cli",
|
|
});
|
|
expect(mcp.isError).toBe(true);
|
|
expect(parseMcpToolError(mcp)).toMatchObject({
|
|
error: { code: "evidence_integrity_mismatch" },
|
|
});
|
|
const result = await evaluate(cli, malformed);
|
|
expect(result.exitCode).toBe(1);
|
|
expect(result.json).toMatchObject({
|
|
code: "evidence_integrity_mismatch",
|
|
category: "integrity_mismatch",
|
|
});
|
|
},
|
|
);
|
|
|
|
cliTest(
|
|
"locates malformed coverage through its shared workflow owner",
|
|
async ({ cli }) => {
|
|
const result = await evaluate(cli, { ...currentCoverage(), owners: 3 });
|
|
expect(result.exitCode).toBe(1);
|
|
expect(result.json).toMatchObject({
|
|
code: "invalid_request",
|
|
details: {
|
|
operation: "evaluate_reconstruction_coverage",
|
|
issues: [{ path: ["coverage", "owners"], reason: "invalid_type" }],
|
|
},
|
|
});
|
|
},
|
|
);
|
|
|
|
cliTest(
|
|
"accounts for effective scope and conflicting proofs through CLI and MCP",
|
|
async ({ cli }) => {
|
|
const call = await cli.sharedMcpCall?.();
|
|
if (call === undefined) throw new Error("Expected shared file MCP session");
|
|
for (const {
|
|
label,
|
|
coverage,
|
|
status,
|
|
codes,
|
|
surfaces,
|
|
evidenceIds,
|
|
} of reconstructionCoverageScopeCases()) {
|
|
coverage.verifier_results[0]!.observed_at = new Date().toISOString();
|
|
const cliResult = await evaluate(cli, coverage);
|
|
expect(cliResult.exitCode, label).toBe(0);
|
|
const mcpResult = await call("evaluate_reconstruction_coverage", {
|
|
coverage,
|
|
boundary_id: "replacement.cli",
|
|
});
|
|
expect(mcpResult.isError, label).not.toBe(true);
|
|
for (const output of [cliResult.json, mcpResult.structuredContent]) {
|
|
const result = reconstructionClosureResultSchema.parse(output);
|
|
expect(result.status, label).toBe(status);
|
|
expect(result.summary.required_surfaces, label).toBe(surfaces);
|
|
expect(result.reasons.map(({ code }) => code).sort(), label).toEqual(
|
|
[...codes].sort(),
|
|
);
|
|
expect(result.evidence_ids, label).toEqual(
|
|
expect.arrayContaining([...evidenceIds]),
|
|
);
|
|
}
|
|
}
|
|
},
|
|
);
|