fix: keep terminal workbench timing monotonic
This commit is contained in:
@@ -157,6 +157,51 @@ test("Workbench session messages keep sealed terminal timing on bulk refresh", (
|
||||
assert.equal(agent?.finishedAt, "2026-06-24T00:00:12.000Z");
|
||||
});
|
||||
|
||||
test("Workbench session messages repair terminal zero timing from running projection", () => {
|
||||
let state = createWorkbenchServerState();
|
||||
state = reduceWorkbenchServerState(state, {
|
||||
type: "session.messages",
|
||||
sessionId: "ses_terminal_zero_repair",
|
||||
messages: [
|
||||
{ id: "msg_agent", messageId: "msg_agent", role: "agent", title: "Code Agent", text: "", status: "running", createdAt: "2026-06-24T00:00:00.000Z", sessionId: "ses_terminal_zero_repair", traceId: "trc_terminal_zero_repair", timing: { startedAt: "2026-06-24T00:00:00.000Z", lastEventAt: "2026-06-24T00:00:05.000Z", durationMs: null, valuesRedacted: true }, startedAt: "2026-06-24T00:00:00.000Z", lastEventAt: "2026-06-24T00:00:05.000Z", durationMs: null }
|
||||
]
|
||||
});
|
||||
|
||||
state = reduceWorkbenchServerState(state, {
|
||||
type: "message.snapshot",
|
||||
sessionId: "ses_terminal_zero_repair",
|
||||
message: { id: "msg_agent", messageId: "msg_agent", role: "agent", title: "Code Agent", text: "OK", status: "completed", createdAt: "2026-06-24T00:00:00.000Z", updatedAt: "2026-06-24T00:00:06.000Z", sessionId: "ses_terminal_zero_repair", traceId: "trc_terminal_zero_repair", timing: { startedAt: "2026-06-24T00:00:00.000Z", finishedAt: "2026-06-24T00:00:00.000Z", durationMs: 0, valuesRedacted: true }, startedAt: "2026-06-24T00:00:00.000Z", finishedAt: "2026-06-24T00:00:00.000Z", durationMs: 0 }
|
||||
});
|
||||
|
||||
const agent = selectActiveMessages(state, "ses_terminal_zero_repair").find((message) => message.role === "agent");
|
||||
assert.equal(agent?.status, "completed");
|
||||
assert.equal(agent?.durationMs, 6_000);
|
||||
assert.equal(agent?.timing?.durationMs, 6_000);
|
||||
});
|
||||
|
||||
test("Workbench session messages can replace sealed terminal zero with positive timing", () => {
|
||||
let state = createWorkbenchServerState();
|
||||
state = reduceWorkbenchServerState(state, {
|
||||
type: "session.messages",
|
||||
sessionId: "ses_terminal_zero_positive",
|
||||
messages: [
|
||||
{ id: "msg_agent", messageId: "msg_agent", role: "agent", title: "Code Agent", text: "OK", status: "completed", createdAt: "2026-06-24T00:00:00.000Z", sessionId: "ses_terminal_zero_positive", traceId: "trc_terminal_zero_positive", timing: { startedAt: "2026-06-24T00:00:00.000Z", finishedAt: "2026-06-24T00:00:00.000Z", durationMs: 0, valuesRedacted: true }, startedAt: "2026-06-24T00:00:00.000Z", finishedAt: "2026-06-24T00:00:00.000Z", durationMs: 0 }
|
||||
]
|
||||
});
|
||||
|
||||
state = reduceWorkbenchServerState(state, {
|
||||
type: "session.messages",
|
||||
sessionId: "ses_terminal_zero_positive",
|
||||
messages: [
|
||||
{ id: "msg_agent", messageId: "msg_agent", role: "agent", title: "Code Agent", text: "OK", status: "completed", createdAt: "2026-06-24T00:00:00.000Z", sessionId: "ses_terminal_zero_positive", traceId: "trc_terminal_zero_positive", timing: { startedAt: "2026-06-24T00:00:00.000Z", finishedAt: "2026-06-24T00:00:06.000Z", durationMs: 6_000, valuesRedacted: true }, startedAt: "2026-06-24T00:00:00.000Z", finishedAt: "2026-06-24T00:00:06.000Z", durationMs: 6_000 }
|
||||
]
|
||||
});
|
||||
|
||||
const agent = selectActiveMessages(state, "ses_terminal_zero_positive").find((message) => message.role === "agent");
|
||||
assert.equal(agent?.durationMs, 6_000);
|
||||
assert.equal(agent?.timing?.durationMs, 6_000);
|
||||
});
|
||||
|
||||
test("Workbench server-state keeps running card startedAt stable across early snapshots", () => {
|
||||
let state = createWorkbenchServerState();
|
||||
state = reduceWorkbenchServerState(state, {
|
||||
|
||||
Reference in New Issue
Block a user