Files
kvitt/docs/HANDOFF.md
T
jacobh2 f4dc10c7ae SPEC v0.11: M7 wave and M6b outcomes (D-069 to D-080), HANDOFF, prompts
Records the readings of M7a to M7f (b9b061a, 6ac711d, 082b8dc, 31760f9,
1e42f76, a54eb7c) and the M6b design-system fix pass (3a1bd14): S-11/S-12
captions, titles and states; navigation wiring and result snackbars (§13.2);
new template day default (AC-9.8); manual update check (AC-16.6); FieldError
field names and settlement editing (AC-11.6); quickRowCategories; two-line
category labels; long day ranges (§9.8); amounts open with two decimals
(§9.6); string keys (strings.csv 578 rows); "Synka nu" online only (§9.9).
§11 marks M7a-M7f and M6b landed, M8 and M7g started; §11.3 lists contract
requests for a later contract pass (M12e). Docs only.

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

7.2 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 3a1bd14 (M6b design-system fixes after the M7 wave) plus the SPEC v0.11 docs commit from agent-spec11 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, 7bd0aa1 SPEC v0.10, 72f21b2 app debug fakes bindings (temporary), e6ad858 app release wiring of :data (pre-M8), b9b061a M7a, 6ac711d M7e, 082b8dc M7d, 31760f9 M7b, 1e42f76 M7c, a54eb7c M7f, 3a1bd14 M6b.
  • Landed: M0 spec, M1 contracts and vectors (c6df2ab), M2a (fdf2093), M2b (fad6fc9), M2c-dev (c885aba), M3 (503cee5), M4 (bd6f10a), M5 (c28c52b), M9 (ab298ab), M12a (6b60ef7), M12b (2e2ebe7), M12c (e499107), U1 and U2 (16c4d01, owner approved), SPEC v0.9 (45eecd1), M12d (bdba9d3), M6 (3080804), SPEC v0.10 (7bd0aa1, D-060 to D-068), M7a onboarding (b9b061a), M7e analytics (6ac711d), M7d settle (082b8dc), M7b home and account (31760f9), M7c expense (1e42f76), M7f settings (a54eb7c), M6b :core:design fixes (3a1bd14).
  • With agent-spec11: SPEC v0.11, D-069 to D-080 (owner approved in advance). D-069 S-11 caption, legend order, loading = no successful sync yet; D-070 S-12 titles, no error or loading state; D-071 top-level screens draw their own KvittNavigationBar, feature argument-key constants, result snackbars on the screen returned to (archive with undo); D-072 new template day = today; D-073 "Du har den senaste versionen" when UpdateState stays None; D-074 FieldError.field names, edited settlement keeps its rows, "Föreslå igen"; D-075 quickRowCategories in :core:design; D-076 two-line category labels with "…" for long custom names; D-077 long day ranges with the year; D-078 amounts open with two decimals; D-079 new string keys, strings.csv 578 rows; D-080 "Synka nu" online only, discard dialogs without body. §11.3 has the list of contract requests for a later contract pass (M12e).
  • 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-m8 (M8 app integration, started 2026-10-18; the phone agent; stops at the pairing HUMAN step), agent-m7g (M7g feature cleanups in android/feature/**, started 2026-10-18), agent-spec11 (this docs change: SPEC v0.11).
  • 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; database at schema 2 since 2026-10-18 (migrated 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, as of the last report; M8 installs its build.

2. Open work (one line each, with who owns it: agent or owner)

  • Land agent-spec11 (orchestrator): SPEC v0.11, D-069 to D-080, HANDOFF, prompts/README.md, android/README.md, PLAN-M8 §3 facts.
  • M8 App integration (agent-m8, in flight, phone agent). Decision range D-085 to D-089 reserved; renumbered to D-081 onwards on landing (after agent-spec11). Spec version v0.12. It wires the §13.2 navigation (D-071), deletes android/app/src/debug/.../DebugFakesModule.kt (72f21b2), keeps the :app requests of M6 (LocalAvatarPictures, ProvideHousehold, LocalKvittClock) and the design-spec §2.7 One UI font check on the S26.
  • M7g Feature cleanups (agent-m7g, in flight): feature modules after M6b; no phone.
  • Later contract pass M12e (not started; SPEC §11.3 list): invite kind in the pair() result, admin name in the invite link, SyncSummary "last attempt failed", actor on Rejection, version name on Device, RecurringRepository.create without a caller-made TemplateId, a result for UpdateRepository.check(), untouched accounts in SettleState, the D-027 re-stamp in :data, the 128 px picture size (owner question).
  • 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.11), in dependency order; prompt prompts/<id>.md:
    • M1, M2a, M2b, M2c-dev, M3, M4, M5, M6, M6b, M7a to M7f, M9, M12a, M12b, M12c, M12d, U1, U2: landed.
    • Now: M8 and M7g in parallel.
    • Next: 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); M12e contract pass when scheduled.

3. HUMAN steps pending (relay in chat; the owner does them tonight, 2026-10-18)

  1. M8 pairing and offline test on the phone; relay wording comes from the M8 report.
  2. Look through the M6 component screenshots (android/core/design/src/test/screenshots/); approved in advance, nothing blocks on it.
  3. Answer OQ-3 for M2c-pi (§4).
  4. Release keystore per SPEC §10.6 for M10, or allow an agent to generate one.
  5. Yes/no: the keyword "boende" maps to travel. Yes/no: is the 128 px picture size needed?

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.
  • "boende" keyword → travel (yes/no); 128 px picture size needed (yes/no) (§3 item 5).

5. Paused (waiting on something outside the repo)

  • Nothing.

6. Numbering

  • Decisions: D-001 to D-080 used (D-008 and D-009 unused). D-085 to D-089 reserved by M8 (renumbered to D-081 onwards on landing). Next free: D-081.
  • Spec version: v0.11 written; next v0.12.
  • 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); 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.