Files
reverse-engineering-anything/tests/boundary/cli/reconstructionCoverageCli.test.ts
T
morluto a35b9335a0 fix(reconstruction): evaluate one effective completion scope
Include required-claim surfaces and reachable dependencies in ownership, verifier commitments, contradiction, package proof and summary checks. Preserve all applicable package outcomes instead of accepting any passing proof.

Adds authenticated synthetic scope cases and a shared public CLI/MCP regression workflow. Validation is pending the centrally coordinated lane; single-file formatting and lint completed.
2026-10-24 02:35:22 +08:00

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),
);
}
}
},
);