Skip to main content

Key Decisions

Summarizes plan.md frozen interpretations and docs/adr/*.md. Where screenshots vs prose conflict, the table below is authoritative.

Reconciliations

#ConflictDecision
Open vs History overlapScreenshot 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 duplicateScreenshot shows Maintenance twice.Prose wins: destinations Home, Book, Maintenance, Notifications exactly once; duplicate treated as mock-up defect.
Five screens vs routesFive 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 formatBooking selector spec MM/DD/YYYY.Booking selector uses spec; other dates locale-sensitive via intl. Welsh screenshots may legitimately differ.
GrammarScreenshot 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 bonusBackground vs foreground.Foreground local/browser notification triggered by chargeRaised event; FCM/APNs/Web Push explicitly out of scope.
PaymentReal provider hinted.Mock transition accepted to paid; button clearly labelled; no financial settlement.

ADRs

ADRTitleNote
ADR 0001Verification evidence boundariesFive 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/History are defined in app/domain/charge_state.py and must be mirrored in Flutter lib/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 ambiguity for the full list.
  • docs/handoffs/* for Part 1–3 shared-file and merge notes.
  • contract-v1.md for the frozen enums and lifecycle that underpin these choices.