design(goals): first-class goals — agreed design + add-goals OpenSpec change #34

Merged
forgejo-admin merged 2 commits from lunacycle-batch-aug-1 into main 2026-08-02 05:15:14 +00:00

What

Design work only — no implementation. Adds:

  • designs/goal-rollup/ — agreed design doc (reviewed 2026-08-01) plus three drawio mockups (embedded-XML PNGs): the goal bar UI, the one-off lifecycle state machine, and the three-lane rollover table.
  • openspec/changes/add-goals/ — the OpenSpec change: proposal, two capability specs (goals, goal-items), design decisions (D1–D8), and a 23-task implementation breakdown. Validates clean.
  • scripts/dev.bun.ts fix (separate commit): sets VITE_BACKEND_ORIGIN so dev login works — there's no vite proxy, so the SPA was POSTing /api/test-login to vite and 404ing.

The design in one paragraph

A goal ("do 10 points of garden work per cycle") becomes a first-class entity with per-cycle point targets (goal_month, written by the commit flow). Standing tasks (templateTask.goalId) regenerate every cycle; one-offs (task.goalId) live under the goal as ideas until someone schedules or completes them — that engagement stamps monthId and is the pull-in. Unfinished one-offs silently return to idea at rollover. Progress is a points rollup query; no direct ticks on goals; no per-item count targets. Goal-less tasks and the Backlog page are untouched.

Next

Once this lands, implementation starts from openspec/changes/add-goals/tasks.md (schema → server rollup/rollover → goal bar UI → commit flow → tests).

🤖 Generated with Claude Code

## What Design work only — no implementation. Adds: - **`designs/goal-rollup/`** — agreed design doc (reviewed 2026-08-01) plus three drawio mockups (embedded-XML PNGs): the goal bar UI, the one-off lifecycle state machine, and the three-lane rollover table. - **`openspec/changes/add-goals/`** — the OpenSpec change: proposal, two capability specs (`goals`, `goal-items`), design decisions (D1–D8), and a 23-task implementation breakdown. Validates clean. - **`scripts/dev.bun.ts`** fix (separate commit): sets `VITE_BACKEND_ORIGIN` so dev login works — there's no vite proxy, so the SPA was POSTing `/api/test-login` to vite and 404ing. ## The design in one paragraph A **goal** ("do 10 points of garden work per cycle") becomes a first-class entity with per-cycle point targets (`goal_month`, written by the commit flow). **Standing tasks** (`templateTask.goalId`) regenerate every cycle; **one-offs** (`task.goalId`) live under the goal as **ideas** until someone schedules or completes them — that engagement stamps `monthId` and *is* the pull-in. Unfinished one-offs silently return to idea at rollover. Progress is a points rollup query; no direct ticks on goals; no per-item count targets. Goal-less tasks and the Backlog page are untouched. ## Next Once this lands, implementation starts from `openspec/changes/add-goals/tasks.md` (schema → server rollup/rollover → goal bar UI → commit flow → tests). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Design doc and drawio mockups (goal bar, one-off lifecycle, rollover
lanes) plus the add-goals OpenSpec change: proposal, specs (goals,
goal-items), design decisions, and task breakdown.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fix(dev): point vite at the backend origin in dev.bun.ts
All checks were successful
pr-validate / validate (pull_request) Successful in 15s
54661cba05
The web app has no vite proxy; without VITE_BACKEND_ORIGIN the SPA
POSTed /api/test-login to vite itself and 404'd.

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