refactor(process): unify trace outcome comparison

This commit is contained in:
morluto
2026-10-27 10:03:18 +08:00
parent c81b7ecebc
commit 9aee546aba
2 changed files with 20 additions and 13 deletions
@@ -14,7 +14,10 @@ import {
} from "./processTraceComparison.fixture.js";
import { compareProcessCaptures } from "./processComparison.js";
import { compareProcessTraces } from "./processTraceComparison.js";
import {
compareProcessTraces,
processTraceOutcomesDiffer,
} from "./processTraceComparison.js";
const traced = (
left: ReturnType<typeof capture>,
@@ -65,9 +68,14 @@ describe("generic capture trace comparison", () => {
suffix: [],
},
};
expect(compareProcessTraces(left, right, concurrent)).toMatchObject({
const concurrentComparison = compareProcessTraces(left, right, concurrent);
expect(concurrentComparison).toMatchObject({
verdict: "equivalent",
});
expect(processTraceOutcomesDiffer(concurrentComparison)).toBe(true);
expect(
processTraceOutcomesDiffer(compareProcessTraces(left, left, concurrent)),
).toBe(false);
});
it("rejects malformed result contracts", () => {
+10 -11
View File
@@ -25,14 +25,10 @@ export const compareProcessTraces = (
? null
: { side: "right" as const, ...rightEvaluation.diagnostic }
: { side: "left" as const, ...leftEvaluation.diagnostic };
const outcomesDiffer =
leftEvaluation.result.status !== rightEvaluation.result.status ||
JSON.stringify(
leftEvaluation.result.raw_trace.map(({ event_id }) => event_id),
) !==
JSON.stringify(
rightEvaluation.result.raw_trace.map(({ event_id }) => event_id),
);
const outcomesDiffer = processTraceOutcomesDiffer({
left: leftEvaluation.result,
right: rightEvaluation.result,
});
return processTraceComparisonResultSchema.parse({
verdict:
leftEvaluation.result.status === "unknown" ||
@@ -52,8 +48,11 @@ export const compareProcessTraces = (
/** Whether trace conformance or raw declared order differs across captures. */
export const processTraceOutcomesDiffer = (
comparison: ProcessTraceComparisonResult,
comparison: Pick<ProcessTraceComparisonResult, "left" | "right">,
): boolean =>
comparison.left.status !== comparison.right.status ||
JSON.stringify(comparison.left.raw_trace.map(({ event_id }) => event_id)) !==
JSON.stringify(comparison.right.raw_trace.map(({ event_id }) => event_id));
comparison.left.raw_trace.length !== comparison.right.raw_trace.length ||
comparison.left.raw_trace.some(
({ event_id }, index) =>
event_id !== comparison.right.raw_trace[index]?.event_id,
);