whatever storage returned. undefined is a real input, not a defensive
allowance: an evicted Durable Object comes back with nothing, and that case is tested
the transport and clock, injected so the chain owns neither
passed through to cronUnits() and the GC passes
Does ONE unit of cron work and hands back the next cursor.
Shaped as a pure-ish function of (cursor, deps) so the caller keeps ownership of persistence: the cursor goes to
cfw_metaorctx.storage.put(), whichever the Durable Object already uses, and neither choice leaks in here. That is also what makes the chain testable without a Durable Object at all.mayContinueis the CPU constraint expressed as data. Asqlunit costs microseconds, so the caller may run another in the same invocation; aphpunit enters the interpreter and must be the last thing that invocation does. This is the same trade fillBatchSize()/fillBatchWallMs() make in src/site-do.js -- batch to amortise the setAlarm() row write, but never batch across a render.resultis the unit's own ledger or reply and its shape depends on the unit, so it is declared as an index signature rather thanobject-- a bareobjectmakes every field unreadable to a typed caller, which is what the ported specs hit.