Files
openwork/apps/app/scripts/session-error-recovery.ts

96 lines
1.9 KiB
TypeScript

import assert from "node:assert/strict";
import {
latestSessionErrorTurnTime,
shouldResetRunState,
} from "../src/react-app/domains/session/sync/run-state";
assert.equal(latestSessionErrorTurnTime([]), null);
assert.equal(
latestSessionErrorTurnTime([
{ id: "session-error:test:0", text: "older", afterMessageID: null, time: 10 },
{ id: "session-error:test:1", text: "latest", afterMessageID: "message-1", time: 25 },
]),
25,
);
assert.equal(
shouldResetRunState({
hasError: false,
sessionStatus: "idle",
runHasBegun: true,
runStartedAt: 100,
latestErrorTurnTime: null,
}),
true,
);
assert.equal(
shouldResetRunState({
hasError: false,
sessionStatus: "idle",
runHasBegun: false,
runStartedAt: 100,
latestErrorTurnTime: 120,
}),
true,
);
assert.equal(
shouldResetRunState({
hasError: false,
sessionStatus: "idle",
runHasBegun: false,
runStartedAt: 100,
latestErrorTurnTime: 80,
}),
false,
);
assert.equal(
shouldResetRunState({
hasError: false,
sessionStatus: "running",
runHasBegun: false,
runStartedAt: 100,
latestErrorTurnTime: 120,
}),
false,
);
assert.equal(
shouldResetRunState({
hasError: false,
sessionStatus: "idle",
runHasBegun: false,
runStartedAt: null,
latestErrorTurnTime: 120,
}),
false,
);
assert.equal(
shouldResetRunState({
hasError: true,
sessionStatus: "idle",
runHasBegun: false,
runStartedAt: 100,
latestErrorTurnTime: null,
}),
true,
);
console.log(
JSON.stringify({
ok: true,
cases: [
"picks latest session error turn",
"resets completed runs when the session returns idle",
"resets immediate failed sends after a synthetic session error turn",
"resets immediate failures that only surface a session-level error banner",
"ignores stale prior errors",
"does not reset while the session is still active",
],
}),
);