Maestro task f7024755-c3d3-46f3-b798-e242ad676c1e. internal/scheduler: registered schedules with household settings, exactly-once period claims via schedule_runs, boot catch-up within 24 h, DST/ISO-week-53 correctness and a settings subscription. No concrete schedules yet. See the developer report on the PR.
Maestro task f7024755-c3d3-46f3-b798-e242ad676c1e. internal/scheduler: registered schedules with household settings, exactly-once period claims via schedule_runs, boot catch-up within 24 h, DST/ISO-week-53 correctness and a settings subscription. No concrete schedules yet. See the developer report on the PR.
internal/scheduler runs registered schedules (a name, a daily or weekly
rule read from the household settings, and a run function) in the
household zone with an injectable clock. Each fire time's period is
claimed by inserting schedule_runs(schedule, period_key) with ON
CONFLICT DO NOTHING, so a period runs at most once across restarts and
instances. At boot only each schedule's most recent fire time is
considered: within 24 h it runs once, older it is claimed as missed so
it never runs later. Settings changes move the next fire time through
SettingsService.Subscribe. DST follows household.LocalTime. The server
starts it with the worker context and waits for it before closing the
database; the concrete schedules come in later Feature 20 tasks.
Maestro task f7024755-c3d3-46f3-b798-e242ad676c1e.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A settings change is now queued with the instant it was saved, and the
loop handles fire times up to that instant under the old rule and later
ones under the new, so a fire time the change made due is not skipped
when the scheduler gets to the change late (SCHED-01).
A failed claim no longer advances the loop past its period: the pass is
repeated every ClaimRetry until the claim succeeds, and periods already
claimed in that pass are skipped by the claim, so each runs once
(SCHED-02).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A failed claim was retried by recomputing the most recent fire time from
the new now, so a daily claim that failed on 7 October and recovered after
the 8 October fire claimed only 8 October: the 7 October period was never
claimed nor recorded as missed. The scheduler now keeps each failed
claim's fire time and claims that same period every ClaimRetry until it
succeeds, applies the catch-up rule to it then, and only afterwards
handles later fire times and settings changes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Maestro task f7024755-c3d3-46f3-b798-e242ad676c1e. internal/scheduler: registered schedules with household settings, exactly-once period claims via schedule_runs, boot catch-up within 24 h, DST/ISO-week-53 correctness and a settings subscription. No concrete schedules yet. See the developer report on the PR.
Independent Codex gpt-6-sol review: CHANGES_REQUIRED for this exact commit.
Independent Codex gpt-6-sol review: CHANGES_REQUIRED for this exact commit.
Independent Codex gpt-6-sol review: APPROVED for this exact commit.