Files
kvitt/docs/HANDOFF.md
T

44 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Handoff: state of the work
Living document, rewritten in place (never a second copy). A new orchestrator session reads CLAUDE.md, then this.
## 1. Where things stand
- `main` at `3080804` (M6 design system, on top of `bdba9d3` M12d) plus the SPEC v0.10 docs commit from `agent-spec10` once it lands. History: `5e1be38` plans and prompts, `c885aba` M2c-dev, `76ee957` SPEC v0.3, `fad6fc9` M2b, `fdf2093` M2a, `040bf41` SPEC v0.4, `503cee5` M3, `c28c52b` M5, `982451d` SPEC v0.5, `bd6f10a` M4, `23a2f1e` SPEC v0.6, `ab298ab` M9, `e8ee518` SPEC v0.7, `6b60ef7` M12a, `7fb9f6f` SPEC v0.8, `e499107` M12c, `2e2ebe7` M12b, `d452fa6` UX Kalas categories and tokens, `16c4d01` UX sprint U2, `45eecd1` SPEC v0.9, `bdba9d3` M12d, `3080804` M6.
- Landed: M0 spec, M1 contracts and vectors (`c6df2ab`), M2a server skeleton and `kvitt-domain` (`fdf2093`), M2b Android skeleton and `:domain` (`fad6fc9`), M2c-dev infra for development (`c885aba`), M3 server core API (`503cee5`), M4 server sync, audit, push, scheduler (`bd6f10a`), M5 Android data layer (`c28c52b`), M9 Splitwise importer (`ab298ab`), M12a (`6b60ef7`), M12b (`2e2ebe7`), M12c (`e499107`), U1 and U2 (`16c4d01`, owner approved), SPEC v0.9 (`45eecd1`, D-055 to D-059), M12d UI contract additions (`bdba9d3`, D-060 to D-062), M6 design system (`3080804`, D-063 to D-066).
- With `agent-spec10`: SPEC v0.10. D-060 `frequentCategoryIds` holds only used categories, the editor fills to five; D-061 a key per active account, none for archived, ties by count, `sort_order`, category id; D-062 `deletable` false for unknown or deleted ids, archived follow AC-7.6, fake `delete` and `deletable` share one rule; D-063 charts on Compose `Canvas`, Vico unused in the catalog (removable later); D-064 Expressive fallbacks against material3 1.4.0 (only `ShortNavigationBar` used); D-065 month and weekday tables in `DateFormatter`, chart labels without dots, SI megabytes with one decimal (§9.8); D-066 golden layout (sheet × light/dark × sv/en, +200 %), M7a–M7f follow it; D-067 English "Dining" for `category_default_restaurants` (`strings.csv`, `:core:design`, AC-7.2); D-068 shared `ledger_settlement_label` ("Payment" / "Betalning"), settlement titles wrap to 2 lines (3 at 200 %), an empty chart shows only the 0 baseline (§13.3).
- Both gates exist: Android `tools/gradle-serial.sh check` (from `android/`), server `cargo fmt --check && cargo clippy --all-targets -- -D warnings && cargo test` (from `server/`). Both are green on `main` as far as reported.
- Worktrees in flight under `.claude/worktrees/`: `agent-m7a` to `agent-m7f` (M7a to M7f, started 2026-10-18, in parallel, disjoint paths `android/feature/<x>/**` and `android/core/fakes/**/fakes/<x>/`), `agent-spec10` (this docs change: SPEC v0.10).
- The UX sprint (owner's session in `~/orca/workspaces/kvitt/UX-sprint`, branch `UX-sprint`) has landed; nothing is in flight there.
- Importer: the dry run of 2026-10-18 with M12b's mapping reconciled on both real files (Vardag 1746 rows, 0 unmapped; Hemma 37 rows, 0 unmapped). The CSV files stay in `export/` (git-ignored).
- Development stack (M2c-dev): running on the Mac, reachable at `http://192.168.1.210:8080`; its database was migrated to schema 2 on 2026-10-18 after a backup. Firebase project `kvitt-1337` with apps `se.hagstedt.kvitt` and `se.hagstedt.kvitt.debug`; service account `kvitt-fcm`; `infra/secrets/fcm-service-account.json` and `infra/secrets/google-services.json` in the main checkout (git-ignored).
- Installed on the owner's phone (SM-S942B): the debug app `se.hagstedt.kvitt.debug` built from `c28c52b` (older than `main`), as of 2026-10-18.
## 2. Open work (one line each, with who owns it: agent or owner)
- Land `agent-spec10` (orchestrator): SPEC v0.10, D-060 to D-068, the "Dining" label and `ledger_settlement_label` in `docs/ux/strings.csv` and `:core:design`, HANDOFF, `prompts/README.md`, `android/README.md`.
- M7a to M7f (`agent-m7a` to `agent-m7f`, in flight, parallel). Decision ranges: M7a D-070–D-074, M7b D-075–D-079, M7c D-080–D-084, M7d D-085–D-089, M7e D-090–D-094, M7f D-095–D-099; spec version v0.11 for all; the second and later to land renumber to be contiguous.
- M8 App integration after M7 (orchestrator brief), carrying: M5's contract requests (§11.3); M6's (`LocalAvatarPictures`/`AvatarPictures` with the authenticated E-11 Coil request from user id and `pictureVersion`, `ProvideHousehold(me, partner)` around screens, `LocalKvittClock`); the `SyncSummary` "last attempt failed" field so `SyncStatusPill` drops its `failed` flag; the D-027 re-stamp (on the first sync attempt after a `clock_skew` rejection the phone re-stamps `updated_at` of each such pending row before pushing; not in `:data` yet); the picture size question (`:data` always fetches E-11 at 512; a 128 variant needs a size parameter on `:core:model` and `:data`); the design-spec §2.7 check on the S26 that `FontFamily.Default` keeps tabular figures and distinct weights 500/600/700 under One UI fonts.
- Image build for the Pi (M2c-pi or M10): since M4 the arm64 server image needs a C toolchain in the build stage (aws-lc-rs) and CA roots in the distroless image (§10.3); confirm both and one FCM send from the shipped image.
- Later cleanup (any Android plan that owns `android/gradle/**`): remove the unused Vico entries from `libs.versions.toml` (D-063).
- Plans (SPEC §11.2 v0.10), in dependency order; prompt `prompts/<id>.md`:
- M1, M2a, M2b, M2c-dev, M3, M4, M5, M6, M9, M12a, M12b, M12c, M12d, U1, U2: landed.
- Now: M7a to M7f in parallel.
- Next: M8 App integration after M7; M2c-pi Infra on the Pi after M8 (owner: answer OQ-3, grant the Pi, Home Assistant Pi, Gitea and Drive allowances at the start, D-023); M10 First release after M2c-pi (owner: keystore per §10.6, D-024); M11 Import history after M9 and M10 (procedure §10.8 "Production run", D-025; each run must reconcile, D-045).
## 3. HUMAN steps pending (relay in chat)
- Later, at the owner's convenience: look through M6's component screenshots (`android/core/design/src/test/screenshots/`); approved in advance ("go with your recommendations"), so nothing blocks on it.
## 4. Owner questions (asked, unanswered)
- OQ-3 LAN addresses and SSH users of the Kvitt Pi and the Home Assistant Pi; SSH port of the HA Pi; certificate directory there; which SSH add-on (SPEC §12). Needed by M2c-pi only. The only open question (OQ-1, OQ-2, OQ-4 answered: D-001, D-003, §10.9).
## 5. Paused (waiting on something outside the repo)
- Nothing.
## 6. Numbering
- Decisions: D-001 to D-068 used (D-008 and D-009 unused). Next free: **D-069**; D-070 to D-099 are handed to M7a to M7f (§2).
- Spec version: v0.10 written; next **v0.11** (shared by the M7 landings).
- Server schema version **2** (migration 0002, landed with M12b); next **3**. Room schema version **1** (`android/data/schemas/se.hagstedt.kvitt.data.db.KvittDatabase/1.json`, unchanged by M12, M12d and M6); next **2**.
- Sync protocol **1**, push payload **1**.
## 7. How the work is run
See CLAUDE.md › Orchestration. HUMAN steps in reports are relayed in chat by the orchestrator; the owner does not read them in files.