mirror of
https://github.com/morluto/rea.git
synced 2026-11-09 16:26:36 +00:00
188 lines
5.4 KiB
TypeScript
188 lines
5.4 KiB
TypeScript
import { createEvidence } from "./evidence.js";
|
|
import { createEvidenceBundle } from "./evidenceBundle.js";
|
|
import {
|
|
completeReconstructionCoverageData,
|
|
reconstructionCoverageEvidenceId,
|
|
} from "./reconstructionCoverage.fixture.js";
|
|
import type {
|
|
ReconstructionCoverageData,
|
|
ReconstructionClosureResult,
|
|
} from "./reconstructionCoverage.js";
|
|
|
|
const indirectSurface = (coverage: ReconstructionCoverageData): void => {
|
|
coverage.surfaces.push({
|
|
...coverage.surfaces[0]!,
|
|
surface_id: "cli.indirect",
|
|
});
|
|
coverage.owners.push({
|
|
...structuredClone(coverage.owners[0]!),
|
|
surface_id: "cli.indirect",
|
|
});
|
|
};
|
|
|
|
const conflictingPackageProof = (
|
|
coverage: ReconstructionCoverageData,
|
|
status: "fail" | "unknown",
|
|
): string => {
|
|
const evidence = createEvidence(
|
|
undefined,
|
|
{
|
|
id: "package-proof-fixture",
|
|
name: "Package proof fixture",
|
|
version: "1",
|
|
},
|
|
{
|
|
operation: "record_package_proof",
|
|
parameters: {},
|
|
result: { status },
|
|
authority: "controlled-replay",
|
|
confidence: "observed",
|
|
},
|
|
);
|
|
coverage.evidence_bundle = createEvidenceBundle([
|
|
...coverage.evidence_bundle.records,
|
|
evidence,
|
|
]);
|
|
coverage.package_proofs.push({
|
|
...coverage.package_proofs[0]!,
|
|
proof_id: `proof.additional.${status}`,
|
|
status,
|
|
evidence_ids: [evidence.evidence_id],
|
|
});
|
|
return evidence.evidence_id;
|
|
};
|
|
|
|
const cases: {
|
|
label: string;
|
|
status: ReconstructionClosureResult["status"];
|
|
codes: readonly string[];
|
|
surfaces: number;
|
|
change: (coverage: ReconstructionCoverageData) => readonly string[];
|
|
}[] = [
|
|
{
|
|
label: "complete control",
|
|
status: "ready",
|
|
codes: [],
|
|
surfaces: 1,
|
|
change: () => [],
|
|
},
|
|
{
|
|
label: "reachable dependency cycle",
|
|
status: "ready",
|
|
codes: [],
|
|
surfaces: 2,
|
|
change: (coverage) => {
|
|
indirectSurface(coverage);
|
|
coverage.surfaces[0]!.dependency_surface_ids = ["cli.indirect"];
|
|
coverage.surfaces[1]!.dependency_surface_ids = ["cli.help"];
|
|
return [];
|
|
},
|
|
},
|
|
{
|
|
label: "missing transitive dependency",
|
|
status: "partial",
|
|
codes: ["dependency-surface-missing"],
|
|
surfaces: 3,
|
|
change: (coverage) => {
|
|
indirectSurface(coverage);
|
|
coverage.surfaces[0]!.dependency_surface_ids = ["cli.indirect"];
|
|
coverage.surfaces[1]!.dependency_surface_ids = ["cli.absent"];
|
|
return [];
|
|
},
|
|
},
|
|
{
|
|
label: "claim-only authority routing",
|
|
status: "failed",
|
|
codes: ["authority-routing-detected"],
|
|
surfaces: 2,
|
|
change: (coverage) => {
|
|
indirectSurface(coverage);
|
|
coverage.claims[0]!.surface_ids = ["cli.indirect"];
|
|
const owner = coverage.owners[1]!.ownership;
|
|
if (owner.disposition === "implemented")
|
|
owner.authority_route = "detected";
|
|
return [];
|
|
},
|
|
},
|
|
{
|
|
label: "claim-only active contradiction",
|
|
status: "failed",
|
|
codes: ["active-contradiction"],
|
|
surfaces: 2,
|
|
change: (coverage) => {
|
|
indirectSurface(coverage);
|
|
coverage.claims[0]!.surface_ids = ["cli.indirect"];
|
|
const evidenceIds = [
|
|
reconstructionCoverageEvidenceId("1"),
|
|
reconstructionCoverageEvidenceId("5"),
|
|
];
|
|
coverage.contradictions = [
|
|
{
|
|
contradiction_id: "contradiction.indirect",
|
|
status: "active",
|
|
surface_ids: ["cli.indirect"],
|
|
claim_ids: [],
|
|
evidence_ids: evidenceIds,
|
|
},
|
|
];
|
|
return evidenceIds;
|
|
},
|
|
},
|
|
{
|
|
label: "claim-only artifact package coverage",
|
|
status: "unknown",
|
|
codes: ["package-proof-unknown", "package-proof-unknown"],
|
|
surfaces: 2,
|
|
change: (coverage) => {
|
|
indirectSurface(coverage);
|
|
coverage.artifacts.push({
|
|
...coverage.artifacts[0]!,
|
|
artifact_id: "authority.v2",
|
|
artifact_sha256: "9".repeat(64),
|
|
});
|
|
coverage.surfaces[1]!.artifact_id = "authority.v2";
|
|
coverage.claims[0]!.surface_ids = ["cli.indirect"];
|
|
coverage.verifier_results[0]!.artifact_sha256s.push("9".repeat(64));
|
|
return [];
|
|
},
|
|
},
|
|
{
|
|
label: "transitive owner commitment",
|
|
status: "unknown",
|
|
codes: ["verifier-result-incompatible"],
|
|
surfaces: 2,
|
|
change: (coverage) => {
|
|
indirectSurface(coverage);
|
|
coverage.surfaces[0]!.dependency_surface_ids = ["cli.indirect"];
|
|
const owner = coverage.owners[1]!.ownership;
|
|
if (owner.disposition === "implemented")
|
|
owner.owner_sha256 = "9".repeat(64);
|
|
return [];
|
|
},
|
|
},
|
|
...([false, true] as const).map((reverse) => ({
|
|
label: `conflicting package proofs ${reverse ? "reversed" : "forward"}`,
|
|
status: "failed" as const,
|
|
codes: ["package-proof-failed"],
|
|
surfaces: 1,
|
|
change: (coverage: ReconstructionCoverageData) => {
|
|
const evidenceId = conflictingPackageProof(coverage, "fail");
|
|
if (reverse) coverage.package_proofs.reverse();
|
|
return [evidenceId];
|
|
},
|
|
})),
|
|
{
|
|
label: "unresolved applicable package proof",
|
|
status: "unknown",
|
|
codes: ["package-proof-unknown"],
|
|
surfaces: 1,
|
|
change: (coverage) => [conflictingPackageProof(coverage, "unknown")],
|
|
},
|
|
];
|
|
/** Small authenticated synthetic workspaces shared by domain and public workflows. */
|
|
export const reconstructionCoverageScopeCases = () =>
|
|
cases.map(({ change, ...expectation }) => {
|
|
const coverage = completeReconstructionCoverageData();
|
|
return { ...expectation, coverage, evidenceIds: change(coverage) };
|
|
});
|