|
1 | 1 | import assert from "node:assert/strict"; |
2 | 2 | import test from "node:test"; |
3 | 3 | import {projectReceiptBoundWait, RECEIPT_BOUND_WAIT_REQUEST_SCHEMA} from "../../loopx/control_plane/quota/blocked_wait.ts"; |
| 4 | +import {evaluateTodoResumeConditions, TODO_RESUME_EVALUATION_REQUEST_SCHEMA_VERSION} from "../../loopx/control_plane/todos/resume_condition.ts"; |
4 | 5 |
|
5 | 6 | function request() { |
6 | 7 | return {schema_version: RECEIPT_BOUND_WAIT_REQUEST_SCHEMA, agent_id: "agent-a", |
@@ -45,3 +46,21 @@ test("a fabricated, missing, or changed dependency cannot qualify blocked closeo |
45 | 46 | input.todos[1]!.material_change_generation = 3; |
46 | 47 | assert.throws(() => projectReceiptBoundWait(input), /registered pending/); |
47 | 48 | }); |
| 49 | + |
| 50 | +for (const resume_when of ["resume_at:2026-01-01T00:10:00Z", "resume_at:2026-01-01T02:00:00Z", |
| 51 | + "pr_merged:example/project#1", "capacity_available:git_push"]) { |
| 52 | + test(`${resume_when} keeps its existing route instead of entering Todo-dependency recovery`, () => { |
| 53 | + const input = request(); |
| 54 | + const waiting = {...input.todos[0]!, resume_when}; |
| 55 | + const projection = evaluateTodoResumeConditions({ |
| 56 | + schema_version: TODO_RESUME_EVALUATION_REQUEST_SCHEMA_VERSION, |
| 57 | + items: [waiting], source_items: [waiting], evaluated_at: input.observed_at, |
| 58 | + available_capabilities: [], |
| 59 | + }); |
| 60 | + const condition = (projection.conditions as {condition: Record<string, unknown>}[])[0]!.condition; |
| 61 | + assert.equal(condition.satisfied, false); |
| 62 | + assert.deepEqual(projectReceiptBoundWait({...input, todos: [ |
| 63 | + {...waiting, resume_condition: condition, resume_ready: false}, |
| 64 | + ]}), {status: "none"}); |
| 65 | + }); |
| 66 | +} |
0 commit comments