SPEC v0.3: orchestrator resolutions of the plans' open points
Records D-004 and D-015 to D-025: shells and ownership, server seams (router middleware, rate_limit layer, tasks::start, AuditWriter and PushQueue traits, next_occurrence_date in kvitt-domain, M3 owns recurring generation, M4 lands after M3), OpenAPI parsed-value equality, feature convention and strings, empty fake scenario and resolveRange exception, shared ledger rows and editor fields in :core:design, no bundled font, pruning at 04:00, development infrastructure as M2c-dev built it, M2c-pi allowances, release keystore, production import procedure. Plans and prompts close their open points; HANDOFF rewritten to the real state; CLAUDE.md: implementation agents never edit SPEC.md or docs/decisions.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+18
-11
@@ -7,21 +7,24 @@ Implement `:core:design` from the approved `docs/ux/design-spec.md`: theme, colo
|
||||
1. `docs/ux/design-spec.md` (tokens, component inventory; the screen sections only to know which components are needed).
|
||||
2. `docs/ux/strings.csv` (shared strings) and `docs/ux/screens/` (reference renders).
|
||||
3. SPEC §6.2 Android app (rows UI, Charts, Tests; `:core:design` row of the module table).
|
||||
4. SPEC §9.7 Icon and colour tokens (with the hex values as updated by the orchestrator's spec change from U2's proposal), §9.8 Formatting, §9.2 and §9.3 (wording the components render).
|
||||
4. SPEC §9.7 Icon and colour tokens, with the hex values as updated by the spec change from U2's proposal; that change lands before M6 starts (§11.1). §9.8 Formatting, §9.2 and §9.3 (wording the components render).
|
||||
5. SPEC §13.1 Context (accessibility, font scale, tabular figures), §13.2 Navigation model.
|
||||
6. SPEC §4 AC-4.5 (initials avatar), FR-14 AC-14.6, AC-14.10 (charts), FR-19 Localisation and formatting.
|
||||
7. SPEC §11.2 (row M6), §11.3, §14.7 (including the Strings paragraph).
|
||||
7. SPEC §11.2 (row M6), §11.3, §14.7 (including the Strings paragraph), §6.2 "Feature convention (D-017)"; `docs/decisions.md` D-017, D-019, D-020.
|
||||
8. Files: `android/core/model/**`, `android/build-logic/**`, `android/gradle/libs.versions.toml`, `docs/decisions.md`, `CLAUDE.md` (BUILD AND VERIFY: Screenshots; ARCHITECTURE RULES; ANTI-PATTERNS).
|
||||
|
||||
## 3. Already established
|
||||
- Compose, Material 3, Material 3 Expressive components where stable; follows system light/dark (§6.2, §13.1).
|
||||
- Charts: Vico; if Vico's current release cannot draw a stacked bar chart with Material 3 theming, hand-roll the three charts with Compose `Canvas` in `:core:design` (§6.2).
|
||||
- Shared components named in §6.2: money text, avatar, category chip, balance header, charts; plus `MoneyFormatter`, `DateFormatter` (§6.2). The full inventory is the design spec's.
|
||||
- Shared components named in §6.2: money text, avatar, category chip, balance header, charts; the ledger rows (expense row per AC-8.10 and settlement row per AC-11.7, used by S-5, S-12 and the pending list of S-16) and the expense editor fields (amount entry, description, account picker, category grid, date, payer toggle, split section with live preview, notes, used by S-7 and S-19) (D-019); plus `MoneyFormatter`, `DateFormatter` (§6.2). The full inventory is the design spec's.
|
||||
- Typography uses the Material 3 default typeface; no font file is bundled and no licence step is needed (D-020).
|
||||
- Shared strings in `:core:design` include the notification copy of §13.3 and the channel name "Activity"/"Aktivitet" of §14.6, which `:app` uses; their keys never start with a feature name (D-017).
|
||||
- Money: sv `1 234,50 kr` (U+00A0 thousands and before `kr`, comma decimal, two decimals); other locales `SEK 1,234.50` (U+00A0 after `SEK`); never a minus sign; dates in lists `3 okt.` / `3 Oct`, with year when not the current year; detail `lördag 3 oktober 2026` / `Saturday, 3 October 2026`; times `14:02`; relative "last synced" per §9.8 (§9.8). Formatting lives in `:core:design`, never in `:domain` (§9.8).
|
||||
- Colour token names are the 12 of §9.7 (`ColorToken`); icon tokens the 30 of §9.7 (`CategoryIcons.ALL`) (§9.7, §14.2.4).
|
||||
- Initials: first letter of the first two words, uppercase, on a colour derived from the user id (AC-4.5).
|
||||
- Accessibility: 48 dp targets, 4.5:1 contrast, TalkBack labels, reflow at 200 % (§13.1).
|
||||
- No hard-coded colours, sizes or strings in features: tokens come from one design file; shared strings live in `:core:design` with keys from `docs/ux/strings.csv` (CLAUDE.md, §14.7 Strings).
|
||||
- No hard-coded colours, sizes or strings in features: tokens come from one design file; shared strings live in `:core:design` with keys from `docs/ux/strings.csv`; lint `MissingTranslation` is an error in this module (CLAUDE.md, §14.7 Strings, D-017).
|
||||
- M2b created the module shell (build file, manifest, empty string files); M6 owns it and fills it in (D-004).
|
||||
- Screenshot goldens are committed; open every changed PNG before committing (CLAUDE.md).
|
||||
- `:core:design` depends only on `:core:model` (§6.2).
|
||||
|
||||
@@ -31,18 +34,22 @@ Also from §14.7: "later plans may add catalog entries and module includes (reba
|
||||
|
||||
Edit nothing outside these paths; a needed change elsewhere is a contract request to the orchestrator.
|
||||
|
||||
Open points the orchestrator must settle in the start prompt's notes: (a) shared UI that several features need but §6.2 does not list: the ledger rows used by S-5, S-12 and S-16 (M7b, M7e), and the expense form fields used by S-7 and S-19 (M7c, M7f), which cannot be shared between feature modules; whether M6 provides them; (b) whether the font of the chosen direction is cleared by the owner for bundling (CLAUDE.md "Licences first"); (c) that the §9.7 hex spec change has landed.
|
||||
Never edit `SPEC.md` or `docs/decisions.md`: put proposed decision entries (for example the chart choice) in the report.
|
||||
|
||||
Resolved open points (SPEC v0.3):
|
||||
- (a) M6 builds the ledger rows and the expense editor fields in `:core:design` (D-019).
|
||||
- (b) No font is bundled; the app uses the Material 3 default typeface (D-020).
|
||||
- (c) The §9.7 colour change lands in the spec before M6 starts (§11.1); confirm it in step 2.
|
||||
|
||||
## 5. Deliverables
|
||||
- `android/core/design/build.gradle.kts`: dependencies (`:core:model`, Compose, Material 3, Vico if used, Coil for avatars).
|
||||
- `.../design/theme/**`: `KvittTheme`, colour schemes light and dark, category colour tokens mapped from `ColorToken`, typography (with tabular figures for amounts), shapes, spacing scale, elevation, motion tokens from the design spec.
|
||||
- `.../design/component/**`: every component of the design spec's inventory (at least money text, avatar with initials, category chip and icon, balance header in three states, sync line, update banner, empty and error blocks, "Needs connection" hint, and what open point (a) assigns).
|
||||
- `.../design/component/**`: every component of the design spec's inventory (at least money text, avatar with initials, category chip and icon, balance header in three states, sync line, update banner, empty and error blocks, "Needs connection" hint, the ledger rows and the expense editor fields of D-019).
|
||||
- `.../design/chart/**`: stacked bars over time, category breakdown bars, account breakdown bars.
|
||||
- `.../design/format/MoneyFormatter.kt`, `DateFormatter.kt`: §9.8, with unit tests for every example in §9.8.
|
||||
- `android/core/design/src/main/res/values/strings.xml`, `values-sv/strings.xml`: shared strings from `docs/ux/strings.csv`.
|
||||
- `android/core/design/src/main/res/font/**`: only if the chosen font is cleared (open point b).
|
||||
- `android/core/design/src/main/res/values/strings.xml`, `values-sv/strings.xml`: shared strings from `docs/ux/strings.csv`, including the notification copy and channel name.
|
||||
- Screenshot tests for every component in light and dark, Swedish and English, plus 200 % font scale for the balance header and money text; committed goldens.
|
||||
- `docs/decisions.md` entry text for the chart choice (Vico or Canvas) in the report (the file is not owned by M6).
|
||||
- The proposed decision text for the chart choice (Vico or Canvas), in the report.
|
||||
|
||||
## 6. Steps
|
||||
1. Worktree. From the main checkout `/Users/jhag/projects/kvitt`: `git worktree add .claude/worktrees/agent-m6 -b agent-m6 main`, then in `.claude/worktrees/agent-m6`: `git reset --hard main`. Copy `android/local.properties` from the main checkout (add `sdk.dir` if missing; never overwrite or commit). Run `tools/install-git-hooks.sh`.
|
||||
@@ -75,8 +82,8 @@ Where in the flow: after step 8, before committing the final goldens; the orches
|
||||
- Gate output: BUILD line, actionable tasks line, screenshot task result, test counts from fresh XML.
|
||||
- Versions chosen with sources; dependency-report lines; chart decision (Vico or Canvas) with the reason, as decisions text.
|
||||
- Component list with screenshot paths (for the owner's look) and the owner's yes/no.
|
||||
- How open points (a) to (c) were resolved.
|
||||
- Numbering used or `TODO(spec)` occurrences.
|
||||
- How resolved points (a) to (c) were applied; the public API of the ledger rows and editor fields (for M7b, M7c, M7e, M7f).
|
||||
- Proposed decision entries (never written to `SPEC.md` or `docs/decisions.md` by this agent) or `TODO(spec)` occurrences.
|
||||
- Contract requests, open questions, spec gaps (with section numbers).
|
||||
|
||||
## 11. Numbering
|
||||
|
||||
Reference in New Issue
Block a user