mirror of
https://github.com/morluto/rea
synced 2026-10-26 06:16:17 -04:00
93a384db77
Parse caller selections and authenticated Evidence at their owners, reuse the parsed function and comparison facts, and preserve unexpected implementation failures. Remove downstream error guessing and redundant validation wrappers. Verify with 526 affected tests, source checks, docs conformance, test discovery and duplication checks. Seven public SDK regressions fail on the main baseline. No real-provider execution was performed.
45 lines
1.8 KiB
TypeScript
45 lines
1.8 KiB
TypeScript
import { canonicalJson } from "./comparisonSemantics.js";
|
|
import { compareUnicodeCodePoints } from "./unicodeCodePointOrder.js";
|
|
import type { FunctionSnapshot } from "./functionDossierEvidence.js";
|
|
import { functionMatch } from "./functionComparisonNormalization.js";
|
|
import {
|
|
functionComparisonResultSchema,
|
|
type FunctionComparisonResult,
|
|
} from "./functionComparisonSchemas.js";
|
|
import { overallStatus, summarize } from "./functionComparisonResults.js";
|
|
import { compareDimensions } from "./functionComparisonDimensions.js";
|
|
|
|
/** Compare two authenticated function snapshots without fuzzy matching. */
|
|
export const compareFunctions = (
|
|
left: FunctionSnapshot,
|
|
right: FunctionSnapshot,
|
|
): FunctionComparisonResult => {
|
|
const links = [left.evidence.evidence_id, right.evidence.evidence_id];
|
|
const providersDiffer =
|
|
canonicalJson(left.evidence.provider, "Function comparison") !==
|
|
canonicalJson(right.evidence.provider, "Function comparison");
|
|
const dimensions = compareDimensions(left, right, { links, providersDiffer });
|
|
const match = functionMatch(left, right);
|
|
const changes = dimensions.filter(({ status }) => status !== "unchanged");
|
|
return functionComparisonResultSchema.parse({
|
|
status: overallStatus(dimensions, match.status),
|
|
function_match: match,
|
|
left_subject_sha256: left.subject.digest.sha256,
|
|
right_subject_sha256: right.subject.digest.sha256,
|
|
summary: summarize(dimensions),
|
|
dimensions,
|
|
changes,
|
|
limitations: [
|
|
...new Set([
|
|
...left.limitations.map((item) => `Left: ${item}`),
|
|
...right.limitations.map((item) => `Right: ${item}`),
|
|
...(providersDiffer
|
|
? [
|
|
"Provider-specific pseudocode and assembly representations were not equated.",
|
|
]
|
|
: []),
|
|
]),
|
|
].sort((a, b) => compareUnicodeCodePoints(a, b)),
|
|
});
|
|
};
|