From ce96e01ebbbbcd480cc46e661921b2254e1e9271 Mon Sep 17 00:00:00 2001 From: HollyChou <128659251+Hollychou924@users.noreply.github.com> Date: Fri, 20 Mar 2026 08:46:10 +0800 Subject: [PATCH] test(cron): add coverage for systemEvent+wakeMode=now timeout policy --- src/cron/service/timeout-policy.test.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/cron/service/timeout-policy.test.ts b/src/cron/service/timeout-policy.test.ts index 69ca6aa46c3..8aae440f505 100644 --- a/src/cron/service/timeout-policy.test.ts +++ b/src/cron/service/timeout-policy.test.ts @@ -23,11 +23,30 @@ function makeJob(payload: CronJob["payload"]): CronJob { } describe("timeout-policy", () => { - it("uses default timeout for non-agent jobs", () => { + it("uses default timeout for systemEvent jobs with wakeMode=next-heartbeat", () => { const timeout = resolveCronJobTimeoutMs(makeJob({ kind: "systemEvent", text: "hello" })); expect(timeout).toBe(DEFAULT_JOB_TIMEOUT_MS); }); + it("uses expanded safety timeout for systemEvent jobs targeting main with wakeMode=now", () => { + // wakeMode="now" + sessionTarget="main" blocks until the full agent turn completes + // via runHeartbeatOnce(), so it needs the same generous ceiling as agentTurn jobs. + const job: CronJob = { + id: "job-1", + name: "job", + createdAtMs: 0, + updatedAtMs: 0, + enabled: true, + schedule: { kind: "every", everyMs: 60_000 }, + sessionTarget: "main", + wakeMode: "now", + payload: { kind: "systemEvent", text: "check in" }, + state: {}, + }; + const timeout = resolveCronJobTimeoutMs(job); + expect(timeout).toBe(AGENT_TURN_SAFETY_TIMEOUT_MS); + }); + it("uses expanded safety timeout for agentTurn jobs without explicit timeout", () => { const timeout = resolveCronJobTimeoutMs(makeJob({ kind: "agentTurn", message: "hi" })); expect(timeout).toBe(AGENT_TURN_SAFETY_TIMEOUT_MS);