mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:15:59 +00:00
Declare logical Evidence sources once and resolve exact retained inputs through shared application workflows across 20 composition tools. Preserve domain-owned authentication, source closure, caller choices, coverage and resource admission. Validation includes public CLI/MCP regressions, local Codex terra/high trials and fresh-import real-artifact workflows. Measurements, failed attempts and coverage limits are recorded in docs/verification/evidence-input-composition-2026-10-31.md. Fixes #8293. Fixes #8281. Assisted-by: Suika (gensokyo-skills:suika-scatter-gather-planning)
102 lines
3.4 KiB
TypeScript
102 lines
3.4 KiB
TypeScript
import { readFile, writeFile } from "node:fs/promises";
|
|
import { join } from "node:path";
|
|
import { expect } from "vitest";
|
|
|
|
import {
|
|
MANAGED_APPLICATION_GRAPH_EXAMPLE,
|
|
MANAGED_NATIVE_VERIFICATION_EXAMPLE,
|
|
MANAGED_RECONSTRUCTION_IMPORT_EXAMPLE,
|
|
} from "../../../src/contracts/managed/managedWorkflowExamples.js";
|
|
import { createEvidenceBundle } from "../../../src/domain/evidenceBundle.js";
|
|
import { parseEvidence, type Evidence } from "../../../src/domain/evidence.js";
|
|
import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js";
|
|
import { cliTest } from "../../support/cli/cliFixture.js";
|
|
|
|
const reference = (evidence: Evidence) => ({
|
|
kind: "retained-evidence" as const,
|
|
evidence_id: evidence.evidence_id,
|
|
});
|
|
|
|
cliTest(
|
|
"uses an explicitly selected bundle for managed Evidence workflows without rewriting it",
|
|
async ({ cli }) => {
|
|
const directory = await createTestTempDirectory("rea-managed-ref-cli-");
|
|
const bundleName = " selected evidence.json";
|
|
const members = MANAGED_RECONSTRUCTION_IMPORT_EXAMPLE.static_members;
|
|
const records = [
|
|
members,
|
|
MANAGED_NATIVE_VERIFICATION_EXAMPLE.managed_boundaries,
|
|
...MANAGED_NATIVE_VERIFICATION_EXAMPLE.native_observations,
|
|
];
|
|
const bytes = JSON.stringify(createEvidenceBundle(records));
|
|
await writeFile(join(directory, bundleName), bytes);
|
|
|
|
const scenarios = [
|
|
{
|
|
command: "project-managed-application-graph",
|
|
inline: MANAGED_APPLICATION_GRAPH_EXAMPLE,
|
|
retained: { managed_members: reference(members) },
|
|
},
|
|
{
|
|
command: "import-managed-reconstruction",
|
|
inline: MANAGED_RECONSTRUCTION_IMPORT_EXAMPLE,
|
|
retained: {
|
|
...MANAGED_RECONSTRUCTION_IMPORT_EXAMPLE,
|
|
static_members: reference(members),
|
|
},
|
|
},
|
|
{
|
|
command: "verify-managed-native-boundaries",
|
|
inline: MANAGED_NATIVE_VERIFICATION_EXAMPLE,
|
|
retained: {
|
|
managed_boundaries: reference(
|
|
MANAGED_NATIVE_VERIFICATION_EXAMPLE.managed_boundaries,
|
|
),
|
|
native_observations:
|
|
MANAGED_NATIVE_VERIFICATION_EXAMPLE.native_observations.map(
|
|
reference,
|
|
),
|
|
},
|
|
},
|
|
];
|
|
|
|
for (const scenario of scenarios) {
|
|
const inline = await cli.run({
|
|
arguments: [
|
|
scenario.command,
|
|
JSON.stringify(scenario.inline),
|
|
"--json",
|
|
],
|
|
cwd: directory,
|
|
});
|
|
expect(inline.exitCode, inline.stderr).toBe(0);
|
|
const retained = await cli.run({
|
|
arguments: [
|
|
scenario.command,
|
|
JSON.stringify(scenario.retained),
|
|
"--evidence-bundle",
|
|
bundleName,
|
|
"--json",
|
|
],
|
|
cwd: directory,
|
|
});
|
|
expect(retained.exitCode, retained.stderr).toBe(0);
|
|
expect(parseEvidence(retained.json)).toEqual(parseEvidence(inline.json));
|
|
}
|
|
|
|
const missingContext = await cli.run({
|
|
arguments: [
|
|
"project-managed-application-graph",
|
|
JSON.stringify({ managed_members: reference(members) }),
|
|
"--json",
|
|
],
|
|
cwd: directory,
|
|
});
|
|
expect(missingContext.exitCode, missingContext.stderr).toBe(1);
|
|
expect(missingContext.json).toMatchObject({
|
|
details: { evidence_id: members.evidence_id, reason: "missing" },
|
|
});
|
|
expect(await readFile(join(directory, bundleName), "utf8")).toBe(bytes);
|
|
},
|
|
);
|