Specification

Behaviour of the app, one page per area. Every requirement has an ID; code comments and unit tests reference these IDs. Change the spec before the code.

Page IDs Covers
scheduling.md SCHED-001 … SCHED-016 Schedules (set times or repeating), next-occurrence maths, alarms, snooze
skipping.md SKIP-001 … SKIP-007 Skip today, skip future dates
notifications.md NOTIF-001 … NOTIF-010 Reminder notification content, actions, permission
library.md LIB-001 … LIB-007 Stretch library and first-run seed
goals.md GOAL-001 … GOAL-010 Daily goals per stretch, progress, goal history, database upgrades
sessions.md SESS-001 … SESS-005 Stretch session screen and the completion log
trends.md TREND-001 … TREND-010 Daily score, week/month trends, streak, day detail
screens.md HOME-001 … HOME-009 Home screen layout
widgets.md WIDGET-001 … WIDGET-010 Segmented ring home screen widget for today's goals
privacy.md PRIV-001 … PRIV-004 No internet access, on-device data, the permission set, the privacy policy
store-listing.md STORE-SHOT-001 … STORE-SHOT-014, STORE-ICON-001 … STORE-ICON-005, STORE-GRAPHIC-001 … STORE-GRAPHIC-007, STORE-LIST-001 … STORE-LIST-008 Google Play phone screenshots: the shots, their frozen inputs, layout, recording (on a deliberate label) and verifying; the store icon rendered from the launcher icon and the feature graphic's text and two showcase phones; the listing text, its claims' requirement IDs, the drift check and the release's listing zip; the app's launcher label matching the store title

Every page except this one starts with a store marker line, <!-- store: headline --> or <!-- store: omit -->, saying whether the Google Play listing must mention it (STORE-LIST-002).

A bold Invariant — … sentence marks a rule a technically-correct implementation could still break; treat it as a hard constraint on how the behaviour is built, not only what it outputs.