Catch-up handled only each schedule's most recent fire time, so an earlier unclaimed period still within CatchUpWindow was skipped for good. Across the Chicago spring-forward change, 01:30 on 8 March and 01:30 on 9 March 2026 are 23 hours apart; booting at 9 March 01:35 ran only 9 March. The scheduler now handles, in time order, every fire time after done that passed within CatchUpWindow, plus the most recent one even when it is older (recorded as missed, as before). Each period keeps its own claim; a failed claim stops that schedule's queue and is retried in order. Older fire times are still never looked at. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>