Files
kvitt/docs/HANDOFF.md
T

7.0 KiB
Raw Blame History

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.