Recurrence Edge Cases
Basic recurrence is easy. Production recurrence is hard. rrule.net is battle-tested against DST boundaries, leap years, bounded rules, timezone shifts, and long-running schedules.
What breaks simple schedulers
- Daylight Saving Time transitions (UTC offset changes)
- Leap years and variable month lengths
- Finite recurrences (
COUNT/UNTIL) - Old high-frequency schedules resumed long after creation
- Wall-clock invariants across timezones
Challenge scenarios
Pick a scenario, run it in your own scheduler, and compare behavior. All examples below are generated relative to the current date to avoid stale test data.
dst
Weekly at 09:00 America/New_York across DST
Wall-clock time should stay at 09:00 local while UTC timestamps shift at DST boundaries.
Input
{
"endpoint": "POST /v1/schedules/simulate",
"payload": {
"rrule": {
"dtstart": "2026-03-31T19:00:00.000Z",
"rule": "FREQ=WEEKLY;BYDAY=SU;BYHOUR=9;BYMINUTE=0;BYSECOND=0"
},
"timezone": "America/New_York",
"count": 6
}
}Expected behavior
{
"expectation": "Occurrences stay on Sunday 09:00 local time, with UTC offsets changing when DST changes."
}How to use this guide
- Use
validateandsimulateto confirm recurrence logic. - Create a real schedule with a test endpoint (webhook.site or ntfy.sh).
- Verify execution history and payload shape.
- Ensure your consumer is idempotent for at-least-once delivery.
If your system passes these scenarios consistently, you are much closer to production-grade recurrence handling.