Files
kvitt/docs/HANDOFF.md
T
jacobh2 e6768121d6 SPEC v0.9: M12b and M12c outcomes (D-055 to D-058), U2 values, UX-9 (D-059, M12d)
- D-055 build-time copy of the keyword table, D-056 parseCategoryKeywords,
  D-057 enum declaration orders, D-058 E-7 example shows server_version
  15 and 16 and its test compares them again.
- D-051 fulfilled: §9.7 hex values from docs/ux/design-spec.md §2.3;
  design-spec.md binding, strings.csv the source of string resources.
- D-059: ExpenseEditorOptions.frequentCategoryIds and
  CategoryRepository.deletable; new milestone M12d with PLAN-M12d and
  prompts/M12d.md; M7a-f depend on M6 and M12d.
- suggestCategory readings (null when other is archived), §11.2 landed
  marks and the 2026-10-18 dry run, dev stack on schema 2, PLAN-M12b
  SQLite 3.51.x, design-spec §6 notes in PLAN-M6/M7c/M7f; HANDOFF rewritten.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
2026-10-18 08:34:45 +02:00

6.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 16c4d01 (UX sprint U2, on top of 2e2ebe7 M12b) plus the SPEC v0.9 docs commit from agent-spec9 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, 16c4d01 UX sprint U2.
  • 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 category contract v2 contracts (6b60ef7), SPEC v0.8 (7fb9f6f), M12c category contract v2 Android (e499107), M12b category contract v2 server (2e2ebe7; the importer test category_table_matches_the_spec is green again), U1 and U2 (16c4d01, docs/ux/** only; the owner approved U2).
  • With agent-spec9: SPEC v0.9. D-055 build-time copy of the keyword table (:data:copyCategoryKeywords, :core:fakes:copyCategoryKeywords), D-056 parseCategoryKeywords in :domain, D-057 enum declaration orders, D-058 E-7 example shows server_version 15 and 16 (example and tests/core_api/me.rs changed in that commit), D-059 UX-9 accepted (ExpenseEditorOptions.frequentCategoryIds, CategoryRepository.deletable) with the new milestone M12d (PLAN-M12d, prompts/M12d.md); D-051 fulfilled: §9.7 hex values from docs/ux/design-spec.md §2.3; design-spec.md binding for :core:design and the screens, strings.csv (558 rows) the source of string resources (§13.4); the suggestCategory readings (null when other is archived and no active last-used category, AC-8.6); PLAN-M6, PLAN-M7c, PLAN-M7f carry design-spec §6 notes.
  • 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-spec9 (this docs change: SPEC v0.9), agent-m6 (M6 design system, started 2026-10-18 from design-spec §2 and §3 and strings.csv), agent-m12d (M12d UI contract additions).
  • 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-spec9 (orchestrator): SPEC v0.9, D-055 to D-059, PLAN-M12d and its prompt, plan touch-ups (M6, M7c, M7f, M12b, M12c), the E-7 example and its test.
  • M6 Design system (agent-m6, in flight) and M12d UI contract additions (agent-m12d, in flight), in parallel; disjoint paths.
  • 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.
  • D-027 re-stamp (orchestrator assigns: M8 as a contract request on :data, or a small :data agent): on the first sync attempt after a clock_skew rejection the phone re-stamps updated_at of each such pending row to its current clock before pushing. Not in :data yet.
  • Picture size (M6, if needed): :data always fetches E-11 at 512; a size parameter for the 128 variant is a contract request on :core:model and :data.
  • Plans (SPEC §11.2 v0.9), in dependency order; prompt prompts/<id>.md:
    • M1, M2a, M2b, M2c-dev, M3, M4, M5, M9, M12a, M12b, M12c, U1, U2: landed.
    • Now: M6 and M12d in parallel.
    • Next waves: M7a to M7f in parallel after M6 and M12d (M7c and M7f consume M12d); 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)

  • When M6 reports: look at M6's component screenshots and answer yes/no (SPEC §11.2 row M6).

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-059 used (D-008 and D-009 unused). Next free: D-060.
  • Spec version: v0.9 written; next v0.10.
  • 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 and M12d); 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.