Files
kvitt/prompts
jacobh2 d39eb2c79b SPEC v0.8: UX-session decisions (D-047 to D-054), category contract v2, M12 plans
Records the owner's UX-sprint decisions UX-1 to UX-8 of docs/ux/proposed-decisions.md:
D-047 direction Kalas muted, D-048 three tabs, D-049 category suggestion (§9.11,
suggestCategory, contracts/category-keywords.csv, suggest_category.json), D-050 S-1
display-name field, D-051 colour token values from Kalas (slate, amber TODO(U2)),
D-052 smaller UX rules, D-053 finer Splitwise mapping, D-054 fourteen default
categories with server schema 2 (migration 0002, §14.1.1). Adds milestone group M12
(PLAN-M12a/b/c, prompts), the CLAUDE.md UX-sprint note, and rewrites HANDOFF.

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

Start prompts

One ready-to-paste start prompt per plan (PLAN-<id>.md at the repository root), plus ORCHESTRATOR-prompt.md. Before pasting, the orchestrator fills {{NEXT_DECISION}}, {{SPEC_VERSION}}, {{SCHEMA_VERSION}} (disjoint ranges for agents that run in parallel, CLAUDE.md › Numbering) and {{ORCHESTRATOR_NOTES}} (answers to the plan's open points, phone assignment, overrides). U2.md also takes {{OWNER_PICK_AND_COMMENTS}}. U1 and U2 run in the owner's own Claude session in ~/orca/workspaces/kvitt/UX-sprint on branch UX-sprint. The numbers are for proposed entries in agents' reports: implementation agents never edit SPEC.md or docs/decisions.md; a docs agent records what the orchestrator accepts (CLAUDE.md › Orchestration).

Dependencies follow SPEC §11.1 and §11.2 (v0.8). Status as of 2026-10-18: M0 done, M1 landed (c6df2ab), M2c-dev landed (c885aba), M2a landed (fdf2093), M2b landed (fad6fc9), M3 landed (503cee5), M5 landed (c28c52b), M4 landed (bd6f10a), M9 landed (ab298ab); SPEC v0.7 landed (e8ee518); M12a landed (6b60ef7); U1 done on UX-sprint, direction 3 "Kalas" muted picked (D-047), U2 in progress there. The plans' open points are resolved in SPEC v0.3 and recorded in each plan's §4; v0.4 records the M2a and M2b decisions (D-005 to D-014); v0.5 the M3 and M5 decisions (D-026 to D-034, D-040 to D-043); v0.6 the M4 decisions (D-035 to D-039); v0.7 the M9 decisions (D-044 to D-046); v0.8 the owner's UX-session decisions (D-047 to D-054) and the milestone group M12.

Dependency order and waves

Plans in the same wave can run in parallel (they own disjoint paths, SPEC §14.7). Android agents share one Gradle build at a time (tools/gradle-serial.sh) and one agent on the phone at a time.

Wave Plan Prompt Depends on Parallel with
0 M1 Contracts and vectors M1.md M0 done (c6df2ab)
0 U1 UX directions U1.md M0 everything in waves 0 to 2 (owner's session)
1 M2a Server skeleton and kvitt-domain M2a.md M1 done (fdf2093)
1 M2b Android skeleton and :domain M2b.md M1 done (fad6fc9); installDebug on the phone outstanding
1 M2c-dev Infra for development M2c-dev.md M0 (its health check needs M2a's image) done (c885aba)
1 U2 UX design spec U2.md U1 and the owner's pick M2a, M2b, M2c-dev, wave 2
2 M3 Server core API M3.md M2a done (503cee5)
2 M4 Server sync, audit, push, scheduler M4.md M2a; lands after M3 (D-015) done (bd6f10a)
2 M5 Android data layer M5.md M1, M2b done (c28c52b)
2 M12a Category contract v2: contracts M12a.md M1, SPEC v0.8 done (6b60ef7)
2 M12b Category contract v2: server M12b.md M12a (M3, M4, M9 landed) M12c, U2
2 M12c Category contract v2: Android M12c.md M12a (M2b, M5 landed) M12b, U2
2 M6 Design system M6.md U2 approved, M2b, M12c, the §9.7 colour spec change M12b
3 M7a Feature onboarding M7a.md M6 M7b to M7f, M9
3 M7b Feature home and account M7b.md M6 M7a, M7c to M7f, M9
3 M7c Feature expense M7c.md M6, M12c M7a, M7b, M7d to M7f, M9
3 M7d Feature settle M7d.md M6 M7a to M7c, M7e, M7f, M9
3 M7e Feature analytics M7e.md M6 M7a to M7d, M7f, M9
3 M7f Feature settings M7f.md M6 M7a to M7e, M9
3 M9 Splitwise importer M9.md M2a, M4 M5, M6, M7a to M7f
4 M8 App integration M8.md M3, M4, M5, M7a to M7f, M2c-dev M9 if still running
5 M2c-pi Infra on the Pi M2c-pi.md M2c-dev, M8; OQ-3 answered none needed
6 M10 First release M10.md M2c-pi, M3, M4, M8 none
7 M11 Import history M11.md M9, M10 none

Constraints the orchestrator must keep in mind

  • M3 and M4 (D-015): M2a provides next_occurrence_date, the AuditWriter/PushQueue traits with no-op implementations and tasks::start; M3 writes the recurring generation function and calls the traits; M4 replaces the implementations, its scheduler calls M3's function, and M4 lands after M3.
  • M2a and M2b create shell files and modules in later milestones' paths (D-004); ownership passes on when they land.
  • M7a to M7f follow the feature convention of SPEC §6.2 (D-017) and take the ledger rows and expense editor fields from M6's :core:design (D-019).
  • M6 starts only after the §9.7 colour change from U2's proposal (the muted Kalas values, slate and amber included, D-051) has landed in SPEC and M12c has landed (§11.1).
  • M12 (D-054): SPEC v0.8 changes the §10.8 table that the importer test category_table_matches_the_spec parses, so the server gate on main is red from SPEC v0.8 until M12b lands; land M12b soon after (or land SPEC v0.8 together with it).
  • Phone: M2b (one installDebug), M5 (only if instrumented tests), M8 and M10 use the phone; only one at a time, named in the notes.
  • Outside the repository: M2c-dev (D-022, done), M2c-pi (the Kvitt Pi, the Home Assistant Pi, Gitea, Drive: allowances requested at the start of that sprint, D-023), M8 (dev server on the Mac), M10 and M11 (production) need the owner's allowance in the notes.