Goal
Make Reminders match the public product contract and report periodic tick data.
Current evidence
- schedule.go:20-117 still defines Schedule, ScheduleTime, and NewSchedule.
- schedule.go:60 accepts a method with no TickStatus.
- timer/timer.go:17-66 delivers only a method name.
- store/schedule.go and store/schedule_sqlite.go persist due_at and interval, but no first tick value.
- docs/release-0.1.0.md:84-93 requires FirstTickTime, Period, and CurrentTickTime.
Design work
Before implementation, update design/timers.md and the storage design to define how FirstTickTime survives a process restart and a periodic claim. The design must keep no catch-up behavior and at-most-once delivery.
Scope
- Rename the public API to Reminder, ReminderTime, NewReminder, ReminderStore, and ReminderInvocation.
- Add TickStatus with FirstTickTime, Period, and CurrentTickTime.
- Deliver TickStatus through the generated dispatch path.
- Persist enough data to produce correct tick values after restart.
- Keep claim-before-delivery, no hidden retry, cancel, reset, and ownership checks.
Acceptance
- A Grain can set, replace, cancel, and restart a Reminder through the public API.
- A periodic method receives the correct three TickStatus values.
- Downtime skips missed ticks and does not replay them.
- A claim that succeeds before a crash is not delivered twice.
- Claim failure, method failure, cancellation, restart, and simulation tests pass.
- make test, make sim, make gen, make net, make lint, and make ci pass.
Out of scope
Call Filters, reentrant or interleaved Calls, and cluster administration.
References
docs/release-0.1.0.md
design/timers.md
design/release-0.1.0.md
Goal
Make Reminders match the public product contract and report periodic tick data.
Current evidence
Design work
Before implementation, update design/timers.md and the storage design to define how FirstTickTime survives a process restart and a periodic claim. The design must keep no catch-up behavior and at-most-once delivery.
Scope
Acceptance
Out of scope
Call Filters, reentrant or interleaved Calls, and cluster administration.
References
docs/release-0.1.0.md
design/timers.md
design/release-0.1.0.md