spec(cycle-dates): real lunar dates + editable cycle window (OpenSpec change) #38

Merged
forgejo-admin merged 1 commit from cycle-dates-spec into main 2026-08-02 22:52:03 +00:00

Design docs only — no implementation. The OpenSpec change for giving lunacycle a real notion of when a cycle is:

  • Lunar date helpers in @lunacycle/shared (lunar-age projection from lunarphase-js, ±1 day, zero new deps)
  • Real ISO dates in month.newMoonDate/fullMoonDate instead of "TODO" (columns exist — no migration)
  • Editable cycle window at commit: default start = today, end = next new moon (self-corrects drift); native date inputs on the Goals page
  • Editable active-cycle window (plain month-row update; tasks belong by id, so boundary moves are safe)
  • Visible boundaries: Home header shows "Buck Moon · Jul 8 – Aug 7"
  • Month named from the window's full moon, not the calendar month at button-press time

Motivated by the 2026-08-02 incident: the operator read July's still-running cycle as data corruption because no surface showed when the cycle ends.

Out of scope: backfilling old "TODO" rows; automatic rollover (Start Cycle stays a human act).

Implementation follows in a separate PR from openspec/changes/cycle-dates/tasks.md.

🤖 Generated with Claude Code

Design docs only — no implementation. The OpenSpec change for giving lunacycle a real notion of when a cycle is: - **Lunar date helpers** in `@lunacycle/shared` (lunar-age projection from `lunarphase-js`, ±1 day, zero new deps) - **Real ISO dates** in `month.newMoonDate`/`fullMoonDate` instead of `"TODO"` (columns exist — no migration) - **Editable cycle window at commit**: default start = today, end = next new moon (self-corrects drift); native date inputs on the Goals page - **Editable active-cycle window** (plain month-row update; tasks belong by id, so boundary moves are safe) - **Visible boundaries**: Home header shows "Buck Moon · Jul 8 – Aug 7" - **Month named from the window's full moon**, not the calendar month at button-press time Motivated by the 2026-08-02 incident: the operator read July's still-running cycle as data corruption because no surface showed when the cycle ends. Out of scope: backfilling old `"TODO"` rows; automatic rollover (Start Cycle stays a human act). Implementation follows in a separate PR from `openspec/changes/cycle-dates/tasks.md`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
spec(cycle-dates): real lunar dates + editable cycle window (OpenSpec change)
All checks were successful
pr-validate / validate (pull_request) Successful in 17s
0ab0b346a6
Proposal, spec, design, and tasks for computing real new/full-moon dates
(lunar-age projection from lunarphase-js), an editable cycle window at
commit (default today -> next new moon) and on the active cycle, visible
cycle boundaries in the Home header, and window-derived month naming.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign in to join this conversation.
No description provided.