Gregorian date-only series. Dates identify occurrences within this series;
applications pair them with their own series ID. They are not POSIX instants.
Native CalendarPattern defaults apply; this is not an RFC text adapter.
Example
A monthly rule anchored on the 31st skips months without that day.
Collect with explicit work and output limits. Limited carries the cursor
to resume; even reaching the exact output capacity does not prove completion.
O(366*s + n log n) construction, where s is selector count and n is the
number of explicit dates. Each supplied list is limited to 4096 entries.
Validate DTSTART against the whole first period, including BYSETPOS.
Invalid generated dates are skipped; UNTIL is inclusive. COUNT applies
before exclusions; explicit inclusions do not consume or replenish COUNT.
One step examines one date, buffered candidate, explicit date, or
period/state boundary. Each step has bounded selector/calendar work.
Buffer capacity counts retained candidates (at most 366); it is not
an allocation-byte claim. Output and immutable input lists are separate.
A zero budget is valid and can return Limited without advancing.
Reducing capacity below an already retained buffer returns BufferLimit
without advancing; Batch.buffered reports that existing retained count.
Shared cursors may copy a period buffer; no scan hides inside one step.
Fold visits ordered, deduplicated dates after exclusions and query
filtering. Stop(value) consumes that date and returns its exact next
cursor, without searching ahead. Stopped never claims completeness.
max_occurrences limits visitor calls; steps account for engine work,
not the caller's visitor. No intermediate output list is constructed.
Resume with the returned cursor and value to preserve the accumulator.
Lazy Roc iterator of bounded batches. Each advance performs one collect;
no series expansion happens while constructing this iterator.
Complete, Limited and errors remain visible items. Iter exhaustion is
transport exhaustion, not proof that the temporal query completed.
Positive work/output limits continue automatically. BufferLimit or a
zero work/output budget emits one terminal Limited item; its cursor can
be resumed explicitly with larger limits. Errors are emitted once.
Retaining chunks/rest iterators can retain their captured buffers.