fix(workbench): seal timing to source event time (#2025)
This commit is contained in:
@@ -91,7 +91,8 @@ test("workbench projection writer commits terminal owner evidence as sealed dura
|
||||
|
||||
test("workbench projection event commit writes trace event and checkpoint facts", async () => {
|
||||
const factWrites = [];
|
||||
const baseStore = createCloudRuntimeStore({ now: () => "2026-06-20T11:00:00.000Z" });
|
||||
let now = "2026-06-20T11:01:05.000Z";
|
||||
const baseStore = createCloudRuntimeStore({ now: () => now });
|
||||
const runtimeStore = {
|
||||
allocateWorkbenchProjectedSeq(params, requestMeta) {
|
||||
return baseStore.allocateWorkbenchProjectedSeq(params, requestMeta);
|
||||
@@ -106,6 +107,7 @@ test("workbench projection event commit writes trace event and checkpoint facts"
|
||||
}
|
||||
};
|
||||
|
||||
now = "2026-06-20T11:03:30.000Z";
|
||||
await writeWorkbenchProjectionEvent({
|
||||
runtimeStore,
|
||||
event: {
|
||||
@@ -153,6 +155,7 @@ test("workbench projection event commit writes trace event and checkpoint facts"
|
||||
assert.equal(factWrites[1].params.facts.checkpoints[0].projectionStatus, "caught_up");
|
||||
assert.equal(factWrites[1].params.facts.checkpoints[0].durationMs, 90000);
|
||||
assert.equal(factWrites[1].params.facts.checkpoints[0].finishedAt, "2026-06-20T11:02:00.000Z");
|
||||
assert.equal(factWrites[1].params.facts.checkpoints[0].lastEventAt, "2026-06-20T11:02:00.000Z");
|
||||
});
|
||||
|
||||
test("workbench projection event writer allocates projectedSeq idempotently by source event identity", async () => {
|
||||
|
||||
@@ -110,8 +110,8 @@ export async function writeWorkbenchProjectionEvent({ runtimeStore = null, event
|
||||
const previousTiming = normalizeTimingProjection(previousCheckpoint?.timing) ?? normalizeTimingProjection(previousCheckpoint);
|
||||
const explicitStartedAt = optionalTimestampValue(event.startedAt ?? event.traceStartedAt ?? event.runnerStartedAt);
|
||||
const startedAt = explicitStartedAt ?? previousTiming?.startedAt ?? (sourceSeq <= 1 ? occurredAt : null);
|
||||
const lastEventAt = latestTimestamp(previousTiming?.lastEventAt, occurredAt, projectedAt);
|
||||
const finishedAt = terminal ? latestTimestamp(previousTiming?.lastEventAt, optionalTimestampValue(event.finishedAt), occurredAt, projectedAt) : null;
|
||||
const lastEventAt = latestTimestamp(previousTiming?.lastEventAt, occurredAt);
|
||||
const finishedAt = terminal ? latestTimestamp(previousTiming?.lastEventAt, optionalTimestampValue(event.finishedAt), occurredAt) : null;
|
||||
const timing = eventTimingProjection({ startedAt, lastEventAt, finishedAt, terminal });
|
||||
const sourceEventId = workbenchSourceEventId(event, { traceId, sourceSeq, occurredAt });
|
||||
const allocation = await runtimeStore.allocateWorkbenchProjectedSeq({
|
||||
|
||||
Reference in New Issue
Block a user