Example project — Frond is not real.

Authored demo content for a fictional plant-care app, rendered by the same parsers and held to the same invariants as a real project's dashboard. This is the system in use, three months in.

docs/phases/watering-reminders.mdWorkingactive2026-07-24Read when: When any task is completed or blocked

Watering reminders

Goal: A user receives one daily digest of the plants that need water, can mark them done in a tap, and can see why each schedule says what it says.

Depends on: Room light survey (closed) — schedules are only defensible once the room is measured.

Refs: strategy/Care Model.md, features/watering-reminders.md, implementation/data-layer.md


Open notes (phase-specific only)

Canonical open process: docs/CONTRIBUTING.md → "Opening a Product Phase". Do not copy it here.

  • Serves the vision by: turning a measured room into an action the user takes this week. Without reminders the survey is trivia.
  • Thesis: a schedule the user can see the reasoning for is a schedule they will follow, so the reminder has to carry its own justification.
  • Conflicts surfaced at open: the species baseline and the measured light disagree for two of the seed plants. Resolved by the Care Model's widen-never-average rule rather than by picking a winner.
  • Open Questions in this phase's area: §1 (the light premise) is not blocked by this phase but bounds how confident the copy may sound. §1's second question (manual override) is this phase's to settle in the walkthrough.
  • Scope call at open: digest only, one per day. Per-plant urgency was cut before the build started (see decisions.md 2026-07-18).

Workstream A — Scheduling

TaskDescriptionRefsStatus
A1Compute an interval band from species baseline, light band and pot volume.strategy/Care Model.mddone
A2Widen the band where inputs disagree, never average.strategy/Care Model.mddone
A3Seasonal shift, summer/winter only, northern hemisphere.FC8done
A4Recompute on re-survey, and record why the schedule moved.implementation/data-layer.mddone

Workstream B — The digest

TaskDescriptionRefsStatus
B1Collapse all due plants into one notification at a user-picked time.decisions.md 2026-07-18done
B2Schedule the digest job server-side so it survives an app that never opens.implementation/data-layer.mddone
B3Respect device locale for the digest time.P17done
B4Quiet handling when nothing is due: no notification at all.done
B5Overdue plants lead the digest, without scolding copy.strategy/Vision.mdin_progress

Workstream C — The care screen

TaskDescriptionRefsStatus
C1Mark-watered in one tap from the digest, writing an append-only care event.implementation/data-layer.mdin_progress
C2Show the reasoning behind each schedule as a plain sentence.strategy/Care Model.mdtodo
C3Offline mark-watered, queued and merged on reconnect.decisions.md 2026-06-27todo

Acceptance Criteria

  • A user with six plants receives exactly one notification per day.
  • Nothing due means no notification.
  • Every schedule can explain itself in one sentence, naming the light band.
  • Marking watered works with the network off and survives a restart.
  • No reminder copy implies the user failed.

Close notes (phase-specific only)

  • Settle Open Questions §1's override question in the walkthrough.
  • P17 (locale time) is fixed inside B3 — remove the punch row at close.
  • features/watering-reminders.md moves from staged to built.