The retention purge's own context. advanceRetentionCursor is required here
because the layer it feeds requires it: purgeExpiredWorkflowRuns declares
advanceCursor non-optional (do-runner/d1-storage.ts), and a purge with
nowhere to record its progress rescans the same terminal rows on every
alarm. The type keeps a typed host from omitting it; hasRetentionCursorSeam
refuses an untyped one under config-error before any purge surface runs,
rather than letting the purge report a retention-purge failure.
The retention purge's own context.
advanceRetentionCursoris required here because the layer it feeds requires it:purgeExpiredWorkflowRunsdeclaresadvanceCursornon-optional (do-runner/d1-storage.ts), and a purge with nowhere to record its progress rescans the same terminal rows on every alarm. The type keeps a typed host from omitting it;hasRetentionCursorSeamrefuses an untyped one underconfig-errorbefore any purge surface runs, rather than letting the purge report aretention-purgefailure.