Key Decisions
Summarizes plan.md frozen interpretations and docs/adr/*.md. Where screenshots vs prose conflict, the table below is authoritative.
Reconciliations
| # | Conflict | Decision |
|---|---|---|
| Open vs History overlap | Screenshot 2 shows Accepted under Open; prose says History has every non-Outstanding. | accepted appears on both tabs. Open = outstanding, accepted, contested, History = accepted, contested, resolved, paid. Tests name the intentional overlap. |
| Bottom nav duplicate | Screenshot shows Maintenance twice. | Prose wins: destinations Home, Book, Maintenance, Notifications exactly once; duplicate treated as mock-up defect. |
| Five screens vs routes | Five screenshots described as five states. | They are two Hub variants + Inspection + Charge + Contest — visual states, not route count. /photo, /statement, /report, dev routes don't count. |
| Date format | Booking selector spec MM/DD/YYYY. | Booking selector uses spec; other dates locale-sensitive via intl. Welsh screenshots may legitimately differ. |
| Grammar | Screenshot typo "will be automatically accepted". | Localized ARB uses correct grammar; snapshot typo not copied. |
| Horizontal scroll | "No horizontal scrolling" prose vs PhotoStrip carousel. | Page/root never overflows; KxPhotoStrip is the one intentional horizontal scroller. |
| Statement totals | "Outstanding" wording ambiguous. | Outstanding charges means unpaid (outstanding, accepted, contested); resolved, paid excluded, sums split per-currency. |
| Notification bonus | Background vs foreground. | Foreground local/browser notification triggered by chargeRaised event; FCM/APNs/Web Push explicitly out of scope. |
| Payment | Real provider hinted. | Mock transition accepted to paid; button clearly labelled; no financial settlement. |
ADRs
| ADR | Title | Note |
|---|---|---|
ADR 0001 | Verification evidence boundaries | Five proof kinds (static, build, automated, runtime-automated, runtime-manual) kept distinct; aggregate validator rejects drift. |
Full text under kxinspect_frontend_flutter/docs/adr/*.md and kxinspect_backend_python/docs/contract-v1.md §15 Limitations.
Implications for implementation
- Hub filter functions
appearsInOpen/Historyare defined inapp/domain/charge_state.pyand must be mirrored in Flutterlib/core/database/...policy helper — not re-derived per widget. - History ordering uses last event instant (
acceptedAt ?? contestedAt ?? …); goldens assert it. - Analytics catalog and tone mapping defer to feature code, not design tokens.
See also
plan.md §2 Requirement ambiguityfor the full list.docs/handoffs/*for Part 1–3 shared-file and merge notes.contract-v1.mdfor the frozen enums and lifecycle that underpin these choices.