test: detect done but not forwarded state

This commit is contained in:
Eve
2026-04-24 11:23:02 +08:00
parent 7d6e0716aa
commit 2647ff579e

View File

@@ -114,6 +114,94 @@ ${result.stderr}`);
}
});
test('watchdog reports suspect delivery failure after SLA when dispatch exists and no completion receipt has arrived yet', () => {
const runner = createFixtureRunner();
try {
const inputPath = runner.writeFixture('dispatch-beyond-sla.json', {
runId: 'fixture-run-suspect-delivery-failure',
childSessionKey: 'session:suspect-delivery-failure',
dispatchAt: '2026-04-24T10:00:00.000Z',
expectedBy: '2026-04-24T10:10:00.000Z',
currentTime: '2026-04-24T10:15:00.000Z',
});
const result = runner.runWatchdog(['--compact', '--input', inputPath]);
assert.equal(result.status, 0, `expected zero exit status, got ${result.status}
${result.stderr}`);
assert.equal(result.stderr, '');
const payload = JSON.parse(result.stdout);
assert.equal(payload.ok, true);
assert.equal(payload.input.path, inputPath);
assert.equal(payload.input.exists, true);
assert.equal(payload.result.status, 'suspect_delivery_failure');
} finally {
runner.cleanup();
}
});
test('watchdog reports completed when dispatch exists and completion receipt has arrived', () => {
const runner = createFixtureRunner();
try {
const inputPath = runner.writeFixture('dispatch-completed.json', {
runId: 'fixture-run-completed',
childSessionKey: 'session:completed',
dispatchAt: '2026-04-24T10:00:00.000Z',
expectedBy: '2026-04-24T10:10:00.000Z',
currentTime: '2026-04-24T10:05:00.000Z',
completionReceiptAt: '2026-04-24T10:04:00.000Z',
});
const result = runner.runWatchdog(['--compact', '--input', inputPath]);
assert.equal(result.status, 0, `expected zero exit status, got ${result.status}
${result.stderr}`);
assert.equal(result.stderr, '');
const payload = JSON.parse(result.stdout);
assert.equal(payload.ok, true);
assert.equal(payload.input.path, inputPath);
assert.equal(payload.input.exists, true);
assert.equal(payload.result.status, 'completed');
} finally {
runner.cleanup();
}
});
test('watchdog reports done but not forwarded when child run is marked done without a main-thread completion receipt', () => {
const runner = createFixtureRunner();
try {
const inputPath = runner.writeFixture('dispatch-done-not-forwarded.json', {
runId: 'fixture-run-done-not-forwarded',
childSessionKey: 'session:done-not-forwarded',
dispatchAt: '2026-04-24T10:00:00.000Z',
expectedBy: '2026-04-24T10:10:00.000Z',
currentTime: '2026-04-24T10:05:00.000Z',
childRunStatus: 'done',
});
const result = runner.runWatchdog(['--compact', '--input', inputPath]);
assert.equal(result.status, 0, `expected zero exit status, got ${result.status}
${result.stderr}`);
assert.equal(result.stderr, '');
const payload = JSON.parse(result.stdout);
assert.equal(payload.ok, true);
assert.equal(payload.input.path, inputPath);
assert.equal(payload.input.exists, true);
assert.equal(payload.result.status, 'done_but_not_forwarded');
} finally {
runner.cleanup();
}
});
test('fixture runner exposes missing-input behavior for future fail-first cases', () => {
const runner = createFixtureRunner();