Skipping days

  • SKIP-001 The "Today" heading row on the home screen has a "Skip today" text button at its right end (HOME-002). Pressing it suppresses every remaining reminder for today across all schedules. It is shown but disabled when no reminders are left today, and once today is skipped the same spot shows a "Resume today" text button that undoes the skip.
  • SKIP-002 The user can skip any future date, picked with a date picker, from the "Skipped days" screen. That screen lists today and future skipped dates, each removable.
  • SKIP-003 Invariant — A skipped date never produces a notification, even if an alarm for it was already scheduled. The alarm receiver checks the skip list for the occurrence's date before notifying; it does not rely on the alarm having been rescheduled.
  • SKIP-004 When computing a reminder's next occurrence, skipped dates are passed over.
  • SKIP-005 Retired. It described a "Skip today" action on every reminder notification, which was removed (NOTIF-004 retired, NOTIF-009). Today is skipped from the home screen (SKIP-001) or the "Skipped days" screen (SKIP-002).
  • SKIP-006 Invariant — Skipping a date never modifies, disables or deletes a schedule. Skips are stored separately, per date, and apply to all schedules; the next scheduled day reminds as normal.
  • SKIP-007 Past skipped dates are kept (they were pruned before version 3), because trends leave skipped days out (TREND-003). The skipped-days screen still lists only today and future dates.

Build checklist

  • [x] Skipped dates live in their own Room table keyed by epoch day (SKIP-006).
  • [x] AlarmReceiver checks isSkipped(date) before notifying, for scheduled and snoozed deliveries alike (SKIP-003).
  • [x] Unit tests: skipped today, several skipped days, skipped non-scheduled day, single-day schedule rolling a week (SKIP-001, SKIP-002, SKIP-004, SKIP-006).
  • [x] The Today row's skip/resume button state is a pure function of "today skipped" and "reminders left today", unit-tested (SKIP-001, HOME-002).
  • [x] Store listing reviewed: this page is store: omit, and any claim in docs/store/listing.md that cites it is still true (STORE-LIST-002, STORE-LIST-003).