Files
harness-tools/extensions/pi-workflow/continuation.test.ts
T

95 lines
2.2 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import { isValidContextContinuation } from "./continuation.ts";
function state(overrides: Record<string, unknown> = {}) {
return {
revision: 5,
status: "waiting",
planArtifact: { revision: 2 },
openGate: {
id: "gate-1",
kind: "implementation-context",
status: "open",
},
implementationContext: {
gateId: "gate-1",
runRevision: 4,
planRevision: 2,
activeParentSessionId: "session-1",
strategy: "fresh-session",
status: "handoff-pending",
method: "fresh-session",
},
assignments: [],
...overrides,
};
}
test("continuation requires every persisted binding and the active parent", () => {
assert.equal(isValidContextContinuation(state(), "session-1"), true);
assert.equal(isValidContextContinuation(state(), "session-2"), false);
assert.equal(isValidContextContinuation(state({ status: "running" }), "session-1"), false);
assert.equal(
isValidContextContinuation(
state({
assignments: [
{
status: "queued",
executionToken: "active-token",
},
],
}),
"session-1",
),
false,
);
assert.equal(
isValidContextContinuation(
state({
revision: 6,
}),
"session-1",
),
false,
);
assert.equal(
isValidContextContinuation(
state({
implementationContext: {
...state().implementationContext,
strategy: "smart-compact",
},
}),
"session-1",
),
false,
);
});
test("normal compaction continuation requires unavailable smart compaction state", () => {
const context = {
...state().implementationContext,
strategy: "smart-compact",
status: "normal-compact-pending",
method: "smart_compact",
outcome: "unavailable",
};
assert.equal(
isValidContextContinuation(
state({ implementationContext: context }),
"session-1",
),
true,
);
assert.equal(
isValidContextContinuation(
state({
implementationContext: { ...context, outcome: "failed" },
}),
"session-1",
),
false,
);
});