From 9aee546aba7e84cb63f593f4839f41701c91c7bf Mon Sep 17 00:00:00 2001 From: morluto <76467478+morluto@users.noreply.github.com> Date: Tue, 27 Oct 2026 10:03:18 +0800 Subject: [PATCH] refactor(process): unify trace outcome comparison --- .../process/processTraceComparison.test.ts | 12 +++++++++-- src/domain/process/processTraceComparison.ts | 21 +++++++++---------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/domain/process/processTraceComparison.test.ts b/src/domain/process/processTraceComparison.test.ts index da3767aedf..5f43a3a7ef 100644 --- a/src/domain/process/processTraceComparison.test.ts +++ b/src/domain/process/processTraceComparison.test.ts @@ -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, @@ -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", () => { diff --git a/src/domain/process/processTraceComparison.ts b/src/domain/process/processTraceComparison.ts index 08a36a030b..103b383c79 100644 --- a/src/domain/process/processTraceComparison.ts +++ b/src/domain/process/processTraceComparison.ts @@ -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, ): 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, + );