@@ -80,11 +80,23 @@ describe("cron service timer seam coverage", () => {
8080 expect ( job . state . runningAtMs ) . toBeUndefined ( ) ;
8181 expect ( job . state . nextRunAtMs ) . toBe ( now + 60_000 ) ;
8282 const task = findTaskByRunId ( `cron:main-heartbeat-job:${ now } ` ) ;
83- expect ( task ) . toMatchObject ( {
84- runtime : "cron" ,
85- status : "succeeded" ,
86- endedAt : now ,
87- } ) ;
83+ if ( ! task ) {
84+ throw new Error ( "expected cron task ledger record" ) ;
85+ }
86+ expect ( task . runtime ) . toBe ( "cron" ) ;
87+ expect ( task . sourceId ) . toBe ( "main-heartbeat-job" ) ;
88+ expect ( task . ownerKey ) . toBe ( "" ) ;
89+ expect ( task . scopeKind ) . toBe ( "system" ) ;
90+ expect ( task . childSessionKey ) . toBe ( "agent:main:main" ) ;
91+ expect ( task . runId ) . toBe ( `cron:main-heartbeat-job:${ now } ` ) ;
92+ expect ( task . label ) . toBe ( "main heartbeat job" ) ;
93+ expect ( task . task ) . toBe ( "main heartbeat job" ) ;
94+ expect ( task . status ) . toBe ( "succeeded" ) ;
95+ expect ( task . deliveryStatus ) . toBe ( "not_applicable" ) ;
96+ expect ( task . notifyPolicy ) . toBe ( "silent" ) ;
97+ expect ( task . startedAt ) . toBe ( now ) ;
98+ expect ( task . lastEventAt ) . toBe ( now ) ;
99+ expect ( task . endedAt ) . toBe ( now ) ;
88100 expect ( task ?. cleanupAfter ) . toBe ( now + 7 * 24 * 60 * 60_000 ) ;
89101
90102 const delays = timeoutSpy . mock . calls
@@ -101,6 +113,7 @@ describe("cron service timer seam coverage", () => {
101113 const now = Date . parse ( "2026-03-23T12:00:00.000Z" ) ;
102114 const enqueueSystemEvent = vi . fn ( ) ;
103115 const requestHeartbeat = vi . fn ( ) ;
116+ const ledgerError = new Error ( "disk full" ) ;
104117
105118 await writeCronStoreSnapshot ( {
106119 storePath,
@@ -110,7 +123,7 @@ describe("cron service timer seam coverage", () => {
110123 const createTaskRecordSpy = vi
111124 . spyOn ( detachedTaskRuntime , "createRunningTaskRun" )
112125 . mockImplementation ( ( ) => {
113- throw new Error ( "disk full" ) ;
126+ throw ledgerError ;
114127 } ) ;
115128
116129 const state = createCronServiceState ( {
@@ -126,7 +139,7 @@ describe("cron service timer seam coverage", () => {
126139 await onTimer ( state ) ;
127140
128141 expect ( logger . warn ) . toHaveBeenCalledWith (
129- expect . objectContaining ( { jobId : "main-heartbeat-job" } ) ,
142+ { jobId : "main-heartbeat-job" , error : ledgerError } ,
130143 "cron: failed to create task ledger record" ,
131144 ) ;
132145 expect ( enqueueSystemEvent ) . toHaveBeenCalledWith ( "heartbeat seam tick" , {
0 commit comments