Files
reverse-engineering-anything/tests/fixtures/artifactEvidence.ts
T
morluto cdc4541ef7 refactor: remove redundant seams and preserve cleanup ownership (#10375)
* refactor: remove redundant seams and preserve cleanup ownership

* fix: validate PE resource extents before budget checks
2026-11-13 10:11:06 -05:00

99 lines
2.8 KiB
TypeScript

import {
artifactInventoryResultSchema,
type ArtifactInventoryResult,
} from "../../src/domain/artifactGraph.js";
import {
artifactGraphDigest,
artifactManifestId,
} from "../../src/domain/artifactIdentity.js";
import { createEvidence, type Evidence } from "../../src/domain/evidence.js";
/** Recommit altered inventory occurrences as a historically recorded observation. */
export const historicalInventoryEvidence = (
source: Evidence,
alter: (
occurrence: ArtifactInventoryResult["occurrences"][number],
) => ArtifactInventoryResult["occurrences"][number],
confidence: "observed" | "derived" = "derived",
): Evidence => {
const inventory = artifactInventoryResultSchema.parse(
source.normalized_result,
);
if (source.subject === null)
throw new TypeError("Inventory has no artifact subject");
const occurrences = inventory.occurrences.map(alter);
const graphSha256 = artifactGraphDigest({
nodes: inventory.nodes,
occurrences,
edges: inventory.edges,
contradictions: inventory.integrity_contradictions,
});
return createEvidence(
{
path: source.subject.local_path,
sha256: inventory.manifest.root_sha256,
format: inventory.manifest.root_format,
},
source.provider,
{
operation: "inventory_artifact",
parameters: {},
result: {
...inventory,
occurrences,
manifest: {
...inventory.manifest,
graph_sha256: graphSha256,
manifest_id: artifactManifestId(
inventory.manifest.root_artifact_id,
graphSha256,
),
},
},
confidence,
authority: "shipped-artifact",
},
);
};
/** Partition a real scan into authenticated partial observations for merge tests. */
export const fragmentInventoryEvidence = (
evidence: Evidence,
count: number,
): readonly Evidence[] => {
const inventory = artifactInventoryResultSchema.parse(
evidence.normalized_result,
);
const subject = evidence.subject;
if (subject === null)
throw new TypeError("Inventory has no artifact subject");
return Array.from({ length: count }, (_, index) =>
createEvidence(
{
path: subject.local_path,
sha256: subject.digest.sha256,
format: subject.format,
},
evidence.provider,
{
operation: "inventory_artifact",
parameters: evidence.parameters,
confidence: "derived",
authority: evidence.authority,
result: {
...inventory,
nodes: inventory.nodes.filter(
(_, ordinal) => ordinal % count === index,
),
occurrences: inventory.occurrences.filter(
(_, ordinal) => ordinal % count === index,
),
edges: inventory.edges.filter(
(_, ordinal) => ordinal % count === index,
),
},
},
),
);
};