Trace Diffing
OCPP DebugKit can compare two parsed traces and surface differences at multiple levels: events, failures, and session summaries. This is useful for debugging regression issues, comparing good vs bad sessions, and tracking changes after fixes.
Programmatic API
import { parseTrace, diffTraces } from '@ocpp-debugkit/toolkit/core';
const resultA = parseTrace(traceAJson);
const resultB = parseTrace(traceBJson);
const diff = diffTraces(resultA, resultB);
console.log('Events only in A:', diff.onlyInA.length);
console.log('Events only in B:', diff.onlyInB.length);
console.log('Modified events:', diff.modified.length);
console.log('Failures only in A:', diff.failuresOnlyInA.map(f => f.code));
console.log('Failures only in B:', diff.failuresOnlyInB.map(f => f.code));
TraceDiff Output
onlyInA/onlyInB— Events present in only one trace (by messageId)modified— Field-level differences for events in both (timestamp, direction, action, payload, errorCode)failuresOnlyInA/failuresOnlyInB— Failures detected in one but not the othersummaryDiff— Session summary differences (event count, failure count, duration, status)
CLI Usage
ocpp-debugkit diff trace-a.json trace-b.json
ocpp-debugkit diff trace-a.json trace-b.json --format jsonHow Matching Works
Events are matched by their OCPP messageId (UniqueId). A Call and its CallResult share the same messageId — they are compared positionally within the same messageId group.
Payloads are compared using deep equality. Any difference in nested fields is surfaced as a single payload modification.