docs(phase8): mark Phase 8 shipped + refresh HANDOVER

Roadmap: Phase 8 header now carries SHIPPED 2026/04/24 alongside the
REVISED 2026/04/23 marker. Added a shipped note summarising the
landing commits, architectural deltas, and verification state.
Pre-Phase-10 Cargo.lock decision updated to RESOLVED since Jake's
hardening pass (commit b333c62) committed the lockfile.

HANDOVER rewritten for today's state. Covers Phase 8 end-to-end,
counting semantics, three architectural notes worth carrying forward
(serde in kon-storage; no module-scope $derived export; tuple FromRow
pattern), full verification counts, the manual dogfood walkthrough
still owed to Jake when he next opens Corbie, and a Phase 9 polish
backlog surfaced during review (sparkline aria-label summary form,
sparkline toggle placement inside Rituals section).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-24 21:00:37 +01:00
parent fa93033165
commit d8011bbe7c
2 changed files with 94 additions and 70 deletions

View File

@@ -208,7 +208,7 @@ The bus applies suppression rules, then dispatches via Rust commands for platfor
---
## Phase 8 — Forgiving gamification — **REVISED 2026/04/23**
## Phase 8 — Forgiving gamification — **REVISED 2026/04/23** — **SHIPPED 2026/04/24**
**Why here.** Low-risk, closes the spec list.
@@ -221,10 +221,12 @@ The bus applies suppression rules, then dispatches via Rust commands for platfor
**Out of scope.** Leaderboards. Shared challenges. Streak repair purchases. XP systems.
**Acceptance.** Complete 3 tasks today header shows "3 today". Open the app after 4 days off no "you were away" framing; header reads today's count only; sparkline simply shows flat zero bars for the away days.
**Acceptance.** Complete 3 tasks today, header shows "3 today". Open the app after 4 days off, no "you were away" framing; header reads today's count only; sparkline simply shows flat zero bars for the away days.
**Estimated effort.** Half day.
**Shipped note (2026/04/24).** Landed on `main` across commits `729b82c` to `fa93033` (13 feature commits plus one style-fix commit for a comment em-dash). Migration v13 adds `auto_completed` on `tasks`; cascade path in `complete_subtask_and_check_parent` sets it, `uncomplete_task` clears it on both target and reopened parent. New storage fn `list_recent_completions(pool, days)` + Tauri wrapper `list_recent_completions_cmd` expose the fixed-length, oldest-first 7-day series. Frontend has a dedicated `completionStats.svelte.ts` store (listens on `kon:task-completed` / `kon:step-completed` / `kon:task-uncompleted` / `kon:task-deleted` / `focus`), a `CompletionSparkline.svelte` SVG component, and header wiring in `TasksPage.svelte`. Settings toggle `showMomentumSparkline` added (default `true`) in the Rituals section; Phase 9 polish may resection. Acceptance list verified by full suite: 273 Rust tests pass, `cargo clippy --all-targets -D warnings` clean, `cargo fmt --check` clean, `npm run check` 0/0, `npm run build` clean. Manual dogfood walkthrough (Task 12 Step 6) still owes real-app verification when Jake next opens Corbie.
---
## Phase 9 — Polish debt
@@ -247,11 +249,11 @@ The bus applies suppression rules, then dispatches via Rust commands for platfor
Earlier draft rolled QC, a full codebase rename, an app-data migration shim, and the release ceremony into one day. Review flagged this as unrealistic and split it. The rename sweep in particular crosses every surface in the app; rushing it is how you end up with `kon.db` on half the users' machines and `corbie.db` on the rest.
### Pre-Phase-10: Cargo.lock policy decision
### Pre-Phase-10: Cargo.lock policy decision — **RESOLVED 2026/04/24**
- `.gitignore` currently excludes `Cargo.lock`. For a Tauri binary workspace this is the wrong default CI resolves dependencies fresh each run, which is the leading theory for the 2026-04-24 CI red-state noted in `HANDOVER.md`.
- **Decision needed before tagging v0.1.0:** commit `Cargo.lock`. Remove the `.gitignore` line in a dedicated commit, run `cargo generate-lockfile` if needed, commit the lockfile, watch CI for one green cycle.
- Captures the dep set users actually get from the release artefacts rather than whatever crates.io happened to resolve at build time.
- `.gitignore` previously excluded `Cargo.lock`. For a Tauri binary workspace this was the wrong default, since CI resolves dependencies fresh each run (the leading theory for the 2026-04-24 CI red-state noted in earlier `HANDOVER.md` revisions).
- **Resolution (Jake's hardening pass, commit `b333c62`):** `Cargo.lock` now committed. Captures the dep set users actually get from release artefacts rather than whatever crates.io happened to resolve at build time.
- No further action before v0.1.0 tagging.
### Phase 10a — QC (estimated half day)