Skip to content

Commit 9d1e716

Browse files
committed
fix(task): sort event keys in the divergence key
1 parent d57dd48 commit 9d1e716

2 files changed

Lines changed: 24 additions & 1 deletion

File tree

‎src/core/task/run-state/__tests__/runStateDivergence.spec.ts‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,15 @@ describe("divergenceKey event payload", () => {
240240
it("is the same for a repeated identical event", () => {
241241
expect(divergenceKey(rejectedAsk(1))).toBe(divergenceKey(rejectedAsk(1)))
242242
})
243+
244+
it("is the same when the event properties are built in a different order", () => {
245+
const reordered = {
246+
...rejectedAsk(1),
247+
event: { ask: { askTs: 1, tag: "approval" }, tag: "askStarted" } as const,
248+
}
249+
250+
expect(divergenceKey(reordered)).toBe(divergenceKey(rejectedAsk(1)))
251+
})
243252
})
244253

245254
describe("isDivergenceCheckEnabled", () => {
@@ -305,6 +314,15 @@ describe("reportDivergence", () => {
305314
})
306315
})
307316

317+
it("still logs when telemetry is not created", () => {
318+
vi.spyOn(TelemetryService, "hasInstance").mockReturnValue(false)
319+
320+
reportDivergence("task-1", mismatch)
321+
322+
expect(warn).toHaveBeenCalledTimes(1)
323+
expect(captureEvent).not.toHaveBeenCalled()
324+
})
325+
308326
it("counts a tagged divergence on the known-race metric with its race ID", () => {
309327
reportDivergence("task-1", { ...mismatch, raceId: "R-3" })
310328

‎src/core/task/run-state/runStateDivergence.ts‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,13 @@ export function isDivergenceCheckEnabled(releaseChannel: string, extensionMode:
3535
)
3636
}
3737

38+
const sortKeys = (_key: string, value: unknown): unknown =>
39+
value && typeof value === "object" && !Array.isArray(value)
40+
? Object.fromEntries(Object.entries(value).sort(([a], [b]) => (a < b ? -1 : 1)))
41+
: value
42+
3843
export const divergenceKey = (d: Divergence): string =>
39-
`${d.kind}:${JSON.stringify(d.event)}:${d.mismatched.join(",")}:${d.state.phase}:${d.state.latches.abort}`
44+
`${d.kind}:${JSON.stringify(d.event, sortKeys)}:${d.mismatched.join(",")}:${d.state.phase}:${d.state.latches.abort}`
4045

4146
export function findDivergences(input: {
4247
event: RunEvent

0 commit comments

Comments
 (0)