Files
kvitt/PLAN-W3.md
T
jacobh2 7bddc50a53 SPEC v0.28: web client programme (D-129 to D-134), plans W0 to W7
New SPEC §15 Web client and FR-21; §1, §2, G-5, AC-14.1 revised; §8.5 and
§10.5.2 gate lines for /app/, the invite accept and bearer requests (except
/health, /setup/, /i/, /apk/) plus the /app/ CSP via $kvitt_csp, identical in
infra/npm/kvitt.conf and infra/README.md step 4 (checked with nginx 1.31.7);
§10.3, §10.6, §11.1 to §11.3 (rows W0 to W7), §14.7 ownership; change log is
now §16. PLAN-W0..W7 and prompts/W0..W7; HANDOFF numbering D-139 / v0.30.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
2026-10-21 20:49:00 +02:00

50 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PLAN-W3: Web settle up
## 1. Goal
Build the web client's settle-up page (W-7) and settlement detail (W-8) in `web/src/features/settle/`, on W0's foundation, mirroring S-9 and S-10 (SPEC §15.6), with tests.
## 2. Read first
1. SPEC §15 (all), FR-21, FR-11 (AC-11.1 to AC-11.8), FR-12 (AC-12.4), §9.3, §9.4 (allocation proposal), §9.6, §9.8, §14.5.2 (`proposeAllocation`, `validateSettlement`, `overSettledAccounts`), §14.4.3 to §14.4.6, §13.3 rows S-9 and S-10, D-052, D-074, D-080, D-093.
2. `docs/ux/design-spec.md` S-9 and S-10 sections and the components they use; `docs/ux/strings.csv` keys `settle_*` and shared ones.
3. `web/README.md` and W0's report (module map).
4. Files: `web/src/{app,api,lib,components,i18n}/**` (read only), `web/src/features/settle/**` (W0's placeholder).
5. `CLAUDE.md`.
## 3. Already established
- W0 owns everything shared; this plan edits only `web/src/features/settle/`. Missing shared pieces are requests to the orchestrator.
- Settle up (W-7, mirrors S-9): global from Home (`/app/settle`) or per account (`/app/settle` with the account; one fixed row, direction swap kept, editable amount, D-052); the direction defaults to "the user who owes pays" with a swap control; the amount defaults per AC-11.3; the proposal from W0's `proposeAllocation` over all non-deleted accounts in `created_at` order with nets from `computeBalances` (excluding the settlement being edited); allocation rows with account debt, editable amount and the over-settle warning (`overSettledAccounts`, AC-11.5); the remaining-to-allocate indicator; "Add account"; date; note; when editing, the saved rows count as edited and "Föreslå igen" re-proposes; the info line on untouched accounts per `SettleState.untouched`'s rule (D-093). Confirm validates with `validateSettlement` and writes one `POST /sync` mutation (§15.5); Cancel with the discard dialog (no body, D-080). Computed in the browser as the phone does; E-33 is not needed.
- Settlement detail (W-8, mirrors S-10): payer, recipient, amount, date, note, allocations per account, the timeline (AC-12.4); Edit (W-7 with the settlement) and Delete (soft delete, confirmation).
- A rejection from `POST /sync` shows its §14.4.6 reason and reloads; nothing is queued.
## 4. Owned paths
From SPEC §14.7: `web/src/features/settle/**`. `web/package.json` only for a dependency line. Nothing else.
## 5. Deliverables
- W-7 (global, per account, edit) and W-8 (loaded, deleted, missing) with every state of §15.6.
- Tests: proposal defaults in both directions, per-account variant, over-settle warning, remaining indicator, "Föreslå igen", untouched info line, validation errors (§14.5.3 tokens mapped to text), write success and rejection, delete.
## 6. Steps
1. Worktree: from `/Users/jhag/projects/kvitt`, `git worktree add .claude/worktrees/agent-w3 -b agent-w3 main`; in it `git reset --hard main`, `tools/install-git-hooks.sh`, `cd web && npm ci`.
2. Read §2. Confirm W0 has landed; if not, stop and report.
3. `npm outdated`; record it. No new library is expected.
4. W-7, then W-8, with tests.
5. Manual check (optional): a throwaway server, `npm run dev`, record and delete a settlement. Never the owner's development stack or the Pi.
6. Gate (§7). Commit on `agent-w3`, `git rebase main`, rerun the gate. Never merge, push or remove the worktree.
## 7. Gate
The web gate, from `web/`: `npm run check`. Green: every step passed in this session; Vitest summary quoted.
## 8. HUMAN steps
From SPEC §11.2: record and delete a settlement in a browser (yes/no), relayed after landing.
## 9. Out of scope
- Home, accounts (W1); expenses, search (W2); analytics (W4); settings (W5); edits outside `web/src/features/settle/`.
## 10. Report
- Branch `agent-w3`, head commit after rebasing; gate lines; Vitest counts.
- Pages × states covered; `web_` keys added (en, sv); strings missing from `strings.csv`; design-spec mismatches.
- Requests for W0's modules; proposed decision entries (numbered from the brief); open questions with SPEC section numbers.
## 11. Numbering
Assigned in the start prompt; use `TODO(spec)` if none was given.