The cursor seam a duty resumes from and advances. Each field is optional
because the deadline duty and the retention purge own one pair each, and a
caller driving one duty has nothing to say about the other's cursor. The
purge takes MaintenancePurgeDutyContext instead, which requires its half.
The deadline duty reads deadlineCursor only alongside
advanceDeadlineCursor: a cursor supplied without the callback that
advances it is ignored.
The cursor seam a duty resumes from and advances. Each field is optional because the deadline duty and the retention purge own one pair each, and a caller driving one duty has nothing to say about the other's cursor. The purge takes
MaintenancePurgeDutyContextinstead, which requires its half. The deadline duty readsdeadlineCursoronly alongsideadvanceDeadlineCursor: a cursor supplied without the callback that advances it is ignored.