App requirements coverage — gap analysis + remaining-work backlog
Date: 2026-06-28 · Branch: feat/mvp1-personas-authz @ ceaf6cb (== main) ·
Status: analysis only (no app code changed).
Purpose. Define "the rest of the work for the app" by mapping every MVP-1 requirement (the source of truth for what) against what is actually built in the app (routes / blocs / repositories / SDK facade symbols), so the next slices are picked from requirements rather than guessed. Each
BUILTclaim is verified against the real route/bloc/facade tree, not against a backlog doc's say-so.
Sources reconciled
- Requirements (the what) —
app/test-gallery/authored/developer/requirements/index.md,prioritization.md,decisions-log.md,functional/*.md(13 epics),non-functional/*.md(7 epics). - Gap ledgers (the SDK state) —
docs/decisions/2026-06-22-northstar-poc-domain-gaps.md(all 11 SDK domain gaps BUILT 2026-06-23),docs/decisions/2026-06-25-persona-lens-gap-review.md,docs/superpowers/plans/2026-06-28-p1p2-consolidated-backlog.md(① Personas & Authorization merged: 11 DONE / 4 FIX-NOW / 13 DECIDE / 16 DEFERRED). - App surface (the verified built) —
app/lib/inside/routes/authenticated/**,app/lib/inside/blocs/**,app/lib/outside/repositories/**, and theClientfacade inpackages/client_sdk/lib/src/client/client.dart.
Two reconciliation facts that drive the verdicts
- The requirements docs predate the ① Personas & Authorization sub-project
(
bd99f24..5248f01). EveryNFR-AUTHZ-*and mostFR-ADMIN-*rows are marked🔨 to buildin the requirement docs, but the capability model,isParentalgate, owner overlay, zero-last-admin/owner guards, supervised-action path, child-consent gate,/governanceUI,AdminGuardand the/adminhub shipped (consolidated backlog D-1..D-8, cited symbols). Those areas are scored on code, not the stale doc. - The SDK is much wider than the UI.
createReward/Activity/ActivityGate,requestRewardRedemption/requestActivityRedemption/getRedemptions,createBudgetCategory,hasEntitlementand the whole catalog adapter are on the facade with no bloc, no repository, no screen calling them. A backlog that says "rewards/redemption done" reflects the SDK, not a usable surface. Those areas areUNBUILT(UI) withSDK ready = yes.
Coverage table
| Requirement area | Status | What's missing | SDK ready? |
|---|---|---|---|
| Today (chore surface) | BUILT | Only photo-on-completion (FR-TODAY-7, MVP-2) + recommend AI (stub). 8/10 FRs shipped; 2 open decisions resolved. | yes |
| Catalog (browse/redeem IA) | UNBUILT | The whole child-facing tabbed browse (chores/bounties/activities/rewards) + redeem + activity-lock visibility. Route named catalog/ is actually a parent chore library, not the specced browse. | yes (rewards/activities/gates/redemptions facade + adapter all built) |
| Money & Envelopes | PARTIAL | Foundations only. The actual FR set (envelopes, moveFunds, Unallocated landing envelope, goal-envelope balance, default allocation, Household.address) is unbuilt; core moveFunds/transferTokens verb is absent from the facade. | no (read-only walletOf, append-only ledger, zero-floor, EarningsSplit auto-split shipped; the move/envelope layer needs SDK + schema work) |
| Member Profile | PARTIAL | 6 UI-only gaps: avatar colour, home-room chip, goal "Reached"/dueLabel, edit goal, goal emoji/image. Core (identity, traits, read-only roles+wallet, goals CRUD incl. request/approve) shipped. | yes (all 6 backed by present fields/verbs) |
| Onboarding | PARTIAL | Minimal setup/ wizard exists (name household → add first kid → done). Full FR set unbuilt: terms acceptance, consent-gated child add (VPC), economy config, first-chore, co-parent invite, checklist persistence. | yes (services exist) |
| Admin | PARTIAL | Hub + AdminGuard + Roles&owners (/governance) + Houses&rooms + Household-settings shipped. Unbuilt: Catalog CRUD, Economy config UI, Default buckets, Feature-flags UI, Family budget, Member-management/role-grants UI, Billing (owner-gated). | yes (services exist; updatePlace built) except Billing/owner-billing surface |
| Settings (More hub) | PARTIAL | Only a gated Admin tile + empty state. Unbuilt: persona item list, pending-item badge, Appearance, Accessibility, Account, About/legal, Help, Notifications-prefs entry. | mostly (pending badge needs a watchPendingBadgeCount aggregator) |
| Notifications (local tier) | UNBUILT | Everything: permission, per-member prefs+quiet-hours, chore-due local reminders, approval prompts, tap-routing. Only a coming-soon Admin row. | no (net-new NotificationsService + LocalNotificationsAdapter + prefs table) |
| Account & profile mgmt | PARTIAL | Sign-up/sign-in/forgot-password pages scaffolded + repo signIn/signOut/requestPasswordReset exist; missing error-states, routing, secure SessionStore, sign-out entry, updateEmail. | partial — SDK gap: Client.auth.updateEmail; secure-storage impl pending |
| Print & printables | PARTIAL | Per-kid + per-room PDF lists shipped. Remaining: envelope-column on chore row (FR-PRINT-4, not built), hide button when flag off (FR-PRINT-1), analytics-event rename (FR-PRINT-5). | yes (pure Dart; envelope column soft-deps Money model) |
| Visual timers ⭐ | UNBUILT | DsTimerRing atom, ticker controller, Today integration, reduced-motion variant, analytics. Docs only. | yes / not-needed (estimateMin on chore; model-agnostic atom) |
| Routines ⭐ | UNBUILT | Admin builder, Today first-then strip, step-advance, partial-session persistence, scheduling. Per-member subtasks exist but that is a checklist within one chore, not a routine of chores. | no (net-new Routine/RoutineRun model + service + adapter first) |
| Personas (authz) | BUILT | ① shipped: 40-cap model, isParental/owner/helper overlays, zero-last guards, transfer-ownership, supervised path, authz events, RLS authz tests. Residuals only: FN-1 helper-attribution enum, doc-truthing, HS-1 ratification. | yes |
| Terms & consent | PARTIAL | Adult ToS gate (TermsSessionGate/acceptTerms) + child VPC capture/revoke (/governance, owner-bound, child-only) shipped. Missing: consent versioning + re-consent SLA (NFR-CONSENT-3/4 = HARD-2, deferred-legal), offline consent-hold, VPC method (counsel-gated). | partial (capture built; versioning/currency TODO) |
| Children's privacy (COPPA) | PARTIAL | Profile-PII gate built (assertChildDataAllowed → traits/country/goals). Missing: financial-PII gate (ledger/approvals/spend/redemptions — HARD-1, deferred-legal), data-minimization, no-marketing-to-children, parental review/deletion. | partial — pre-alpha, no real minor data, HARD gates intentionally not yet built |
| Security & data protection | PARTIAL | RLS household-scoping policies built. Missing: local SQLCipher whole-DB encryption, complete zero-floor SQL trigger, service-role-key CI scan, key-rotation process/CI, Storage ACLs, per-table RLS regression suite. | partial (RLS built; trigger partial; local-crypto to build) |
| Offline sync | UNBUILT | The whole substrate: Supabase cloud adapter + hydrate-once watch + Drift pending_writes queue + ledger-ordered-replay/LWW conflict resolution + idempotency + offline zero-floor/consent holds. Decisions resolved; build pending. | no (architectural — SP3 cloud adapter is the build surface) |
| Accessibility ⭐ | PARTIAL | A11y floor is designed into the DS atoms (DsTheme rule). Formal gate unverified: semantic-label audit, 48dp targets, AA contrast both themes, reduced-motion app-wide, focus order, manual SR pass, 200% scale. | n/a (frontend/DS) |
| Analytics & telemetry | UNBUILT | Mixpanel was removed in an earlier pass. Missing: re-introduce behind config+consent gate, minor-safe pre-emit filter, three-bucket separation, KPI-event coverage, release/nightly audit. | no (net-new substrate) |
Tally: 2 BUILT, 12 PARTIAL, 6 UNBUILT, 0 area-level DEFERRED (deferred items are sub-scopes, enumerated in the MVP-2 boundary below).
Per-area detail (every PARTIAL / UNBUILT)
Catalog — UNBUILT (SDK ready) · biggest SDK-ready slice
The catalog/ route is a parent chore library (CatalogPage over ChoresRepository),
not the requirement's "Catalog" epic. None of FR-CATALOG-1..7 exist: no tabbed browse, no
per-member eligibility filtering, no reward redeem, no activity-lock visibility, no redemption
history. Yet the facade is complete — getRewards/createReward, getActivities/createActivity,
createActivityGate/getActivityGates, requestRewardRedemption/requestActivityRedemption/ getRedemptions/watchRedemptions, and SupabaseCatalogAdapter are all built and untouched by
any presentation code. This is the missing "spend" half of the economy loop (earn on Today
→ spend in Catalog → activity-gates re-gate chores). Work = blocs + pages + a
rewards/activities/redemptions repository + flow-tests. No SDK work.
Money & Envelopes — PARTIAL · the core SDK verb is absent
Shipped: read-only wallet (walletOf, spend/save/give on Member Profile), append-only
LedgerService, zero-floor debit guard, EarningsSplit auto-split at approve. Unbuilt and
SDK-not-ready: moveFunds/transferTokens does not exist on the facade (FR-MONEY-1), the
Unallocated earn-landing envelope (FR-MONEY-4), envelope-id ledger-tag generalization
(FR-MONEY-3), goal-envelope balance (FR-MONEY-8), optional household default allocation
(FR-MONEY-5), Household.address migration (FR-MONEY-12). Decisions-log D-MONEY-2 puts the two
🧊 may-stage FRs (5 and 8) in MVP-1. This is a data reshape (service + facade + schema +
migration) before any transfer/allocation UI. Coordinate with HS-4 sign-off
(auto-split vs Unallocated reshapes the earn-credit path).
Member Profile — PARTIAL · 6 UI-only gaps over a ready SDK
Built: identity header+edit, trait chips, read-only roles, read-only wallet, goals CRUD with
request→approve lifecycle. Remaining (all SDK-backed, frontend-only): FR-PROFILE-2 avatar from
colorKey, -3 home-room chip (homePlaceId+getPlaces()), -10 goal "Reached"/dueLabel
(completeGoal), -11 edit goal (updateGoal), -12 goal emoji/image. Closes the "done" milestone.
Onboarding — PARTIAL · minimal wizard exists
setup/ does name-household → first-kid → done. The full FR set is unbuilt: admin profile +
terms acceptance (FR-ONBOARD-2), COPPA-critical consent-gated child add with VPC
(FR-ONBOARD-3), economy config (-5), first chore (-6), co-parent invite (-4), checklist
persistence (-7). All backing services exist (createHousehold, addMember, acceptTerms,
inviteCoParent, updateEconomyConfig, createChore). Depends on the Account auth leg for
adult sign-up.
Admin — PARTIAL · hub shipped, config rows missing
Built (verified): AdminGuard, /admin hub, Roles&owners→/governance, Houses&rooms→/houses,
Household-settings. Coming-soon placeholders / unbuilt: Catalog CRUD (FR-ADMIN-2 — overlaps
the Catalog editor slice), Member-management add/edit/remove + role grants (FR-ADMIN-3; role
grants exist in /governance, full member CRUD does not), Economy config UI (-6), Default buckets
(-7), Feature-flags UI (-8), Family budget (-10, budget service partly stubbed), Billing owner-gated
(-11, billing surface unbuilt → DF-13).
Settings (More hub) — PARTIAL · scaffold only
"More" tab is a single gated Admin tile + empty state (appearance toggle + sign-out live in the
shared header). Unbuilt: persona-correct item list (FR-SETTINGS-1), pending-item badge (-3,
needs watchPendingBadgeCount), Appearance route (-4), Accessibility route (-5), Account route +
sign-out entry (-6), About/legal (-7), Help (-8). D-SETTINGS-4 adds a minimal Notifications-prefs
route. Mostly routing; depends on Account + Notifications for the surfaces it links to.
Account & profile management — PARTIAL · auth half-wired
Blocs (auth, sign_up, forgot_password) + pages scaffolded; SdkAuthRepository.signIn/ signOut/requestPasswordReset + _rethrowSafe exist. Missing: post-auth routing + error-state
UI (FR-ACCOUNT-1/2), sign-out entry point (-3), deep-link reset + new-password screen (-4),
secure SessionStore impl behind gotrueStorage (-5, SQLCipher), error message-mapping (-6),
profile edit + email change (-7, SDK gap Client.auth.updateEmail). Children-are-profiles
(-8) is an enforced invariant, no separate surface.
Print & printables — PARTIAL · core shipped, polish remains
PrintableChoreList.buildMemberList/buildPlaceList + real PDF pipeline shipped (Home tab).
Remaining: envelope-column on the chore row (FR-PRINT-4, not built — soft-deps the Money envelope
model), hide button when printableLists flag off (-1), chore_list_printed analytics rename (-5).
Notifications (local tier) — UNBUILT (SDK not ready)
Net-new end-to-end: NotificationsService (schedule/quiet-hours/cancel) + LocalNotificationsAdapter
(wraps flutter_local_notifications) + NotificationsRepository + notification_preferences table
(household-RLS). FR-NOTIFY-1..5. Adapter interface designed to swap for PushNotificationsAdapter
(MVP-2). Push, milestones, digests all MVP-2.
Visual timers — UNBUILT (no SDK work)
Pure frontend differentiator: DsTimerRing atom (animated arc/fill), reduced-motion+a11y variant,
local ticker controller, app-lifecycle pause, Today integration for estimateMin > 0, analytics.
FR-TIMER-1..6. estimateMin already on the chore model.
Routines — UNBUILT (SDK not ready)
Requires net-new first-class entities Routine(orderedStepRefs, schedule) + RoutineRun(date,
completedStepIndices) + RoutineService + RoutineAdapter (Drift+Supabase) before UI: admin
builder, Today first-then strip, step-advance, partial-session persistence, daily/day-of-week
schedule. FR-ROUTINE-1..5. Composes with the existing chore_completed earn path.
Terms & consent — PARTIAL (legal-gated remainder)
Adult ToS gate + child VPC capture shipped. Remaining: consent versioning + version-gating
(NFR-CONSENT-3), re-consent within SLA (-4) — both = HARD-2 (checkConsentCurrency is
TODO), deferred-legal until a ToS/privacy version bump affects real minors. VPC method
(email-plus / card-on-file) is counsel-confirm (D-COPPA-1/D-CONSENT-1).
Children's privacy (COPPA) — PARTIAL (legal-gated remainder)
Profile-PII consent gate built. Remaining: financial-PII gate over ledger/approvals/ spend_requests/redemptions/token_batches (HARD-1, deferred-legal), data-minimization (NFR-COPPA-3), no-marketing-to-children + analytics scrub (-4, ties to Analytics), parental review/deletion + erasure cascade (-5, DF-5). Pre-alpha with no real minor data, so the two HARD gates are intentionally not yet built — but they are MVP-1 launch blockers for the audience.
Security & data protection — PARTIAL
RLS policies built (NFR-SEC-1). Remaining: service-role-key CI scan (-2), local SQLCipher whole-DB encryption + at-rest/in-transit verify (-3, D-SEC-1), Storage ACLs for photos (-4), key-rotation process+CI (-5), complete zero-floor SQL trigger (-7, "partial"), per-table RLS regression suite (-1).
Offline sync — UNBUILT (architectural gate)
All decisions resolved (D-SYNC-1..5: ledger-ordered replay + LWW, household-level full sync,
optimistic approvals as "pending", reconnect-foreground-only, pending_writes schema locked) but
nothing built. The SP3 Supabase cloud adapter + hydrate-once watch + durable write queue +
idempotent ledger-safe sync (NFR-OFFLINE-1..6) is the build surface. Foundational for the cloud path.
Accessibility — PARTIAL (floor designed-in, gate unverified)
The DS-atom a11y floor is a design rule, but the 7 NFR-A11Y gates are formally unverified: semantic labels, 48dp targets, AA contrast both themes, reduced-motion app-wide, focus order, manual SR pass on core flows, 200% text scale. A11y-preferences panel is MVP-2.
Analytics & telemetry — UNBUILT
Mixpanel removed earlier; the substrate (config+consent-gated emission, minor-safe pre-emit filter, three-bucket separation, opaque ids, KPI-event coverage, release/nightly audit — NFR-ANALYTICS-1..10) is net-new. It is the measurement substrate every other KPI rolls up to.
MVP-1-remaining vs MVP-2 boundary
MVP-1 remaining (still to build for first launch): Catalog browse/redeem + reward/activity/gate editor · Money & Envelopes (move/Unallocated/ goal-envelope) · Member-Profile 6 gaps · Household T7 restructure + Family Goals · Visual timers · Routines · Onboarding full wizard · Admin config rows (Catalog CRUD / economy / buckets / flags / family-budget / member-mgmt) · Settings/More hub · Account auth finish · Notifications (local) · Print polish · Gates: Offline-sync substrate, Security hardening, Analytics substrate, Accessibility formal gate, and the two legal-gated HARD COPPA gates (financial-PII gate, consent re-capture — deferred in build until real minor data, but launch-blocking for the audience).
MVP-2 / deferred-by-design (NOT remaining MVP-1 work):
Chore photo submissions + content moderation (token-economy/RICE MVP-2) · Push + milestone +
digest notifications · Kid-mode PIN / profile-switching (DF-7) · TV/kiosk display identity (DF-8) ·
Subscription tiers + billing surface + non-owner-admin paywall (DF-13) · Allowance automation ·
Dashboards · History/ledger feed UI · Kudos · Step-breakdown as a standalone feature · Activity-gating
advanced (per-kid gates, daily/weekly re-lock — LD-4/LD-5 ratified one-time/per-activity for MVP-1) ·
AI recommender (recommend stub) · Standalone babysitter Helper invite + member_access persistence
(DF-1) · Per-member intra-household RLS visibility (HS-2 fast-follow) · Aging-up 13/18 (DF-9) ·
Therapist persona (DF-12) · Peer/self-governed mode (DF-6) · Privacy & GDPR / erasure / backup-portability
(pre-EU) · Cash-out · Family calendar (build-vs-integrate) · OS widgets · Email digests · Localization ·
Audit-log surface (DF-4) · Search · Token-fading (Phase 2) · Clinical OT framework (Phase 2).
Prioritized "rest of the work" backlog (dependency order, SDK-ready first)
Recommended NEXT:
RW-01— Token-economy Catalog UI (reward/activity editor + child browse/redeem + activity-gate editor + redemption history). It is the single largest SDK-ready slice (rewards/activities/gates/redemptions facade + adapter all built, zero UI), it completes the missing "spend" half of the earn→spend→gate economy loop, and — per the prior steer "reward/activity next as they can block chores" — activities gate chores (ActivityGate.requiredChoreId, already enforced inEconomyService), so it unblocks the gating loop and the Admin Catalog-CRUD row. No data-layer work required.
| ID | Title | Size | Status | SDK ready? | Satisfies | Depends on |
|---|---|---|---|---|---|---|
| RW-01 | Token-economy Catalog UI — parent reward/activity editor + activity-gate editor + child tabbed browse + redeem + redemption history | L | UNBUILT | yes | FR-CATALOG-1..7, FR-ADMIN-2 | — |
| RW-02 | Member-Profile finish — avatar colour, home-room chip, goal Reached/dueLabel, edit goal, goal emoji/image | S–M | PARTIAL | yes | FR-PROFILE-2,3,10,11,12 | — |
| RW-03 | Household T7 people-surface — read-only member tiles (wallet+goal chip) + Family Goals card + read-only budget summary | M | PARTIAL | yes (poll-first; watchGoals deferred) | FR-HOUSEHOLD-1..8 | RW-05 (budget summary), RW-08 (budget figures) |
| RW-04 | Visual timers — DsTimerRing + ticker + Today integration + reduced-motion variant + analytics | M | UNBUILT | yes/n-a | FR-TIMER-1..6 | — |
| RW-05 | Admin config buildout — Catalog CRUD, Economy config, Default buckets, Feature-flags, Family budget, Member-management/role-grants | L | PARTIAL | yes (Billing excepted) | FR-ADMIN-2,3,6,7,8,9,10 | RW-01 (shares editor) |
| RW-06 | Settings/More hub — persona item list + pending badge + Appearance/Accessibility/Account/About/Help routes | M | PARTIAL | mostly (watchPendingBadgeCount) | FR-SETTINGS-1..8 | RW-09, RW-11 |
| RW-07 | Print polish — envelope column + flag-hide + analytics rename | S | PARTIAL | yes | FR-PRINT-1,4,5 | RW-08 (envelope model) |
| RW-08 | Money & Envelopes — moveFunds verb + Unallocated envelope + envelope-id tag + goal-envelope balance + default allocation + Household.address; then transfer/allocation UI | L | PARTIAL | no (data reshape first) | FR-MONEY-1..12 | HS-4 sign-off |
| RW-09 | Account & profile mgmt finish — error/routing, secure SessionStore, sign-out entry, error-mapping, updateEmail verb | M | PARTIAL | partial (updateEmail gap) | FR-ACCOUNT-1..8 | RW-14 (SessionStore crypto) |
| RW-10 | Onboarding full wizard — terms + consent-gated child add (VPC) + economy config + first chore + co-parent invite + checklist | M–L | PARTIAL | yes | FR-ONBOARD-1..7 | RW-09 (adult signup leg) |
| RW-11 | Notifications (local tier) — NotificationsService + LocalNotificationsAdapter + prefs table + permission + reminders + approval prompts + tap-routing | L | UNBUILT | no (net-new) | FR-NOTIFY-1..5 | — |
| RW-12 | Routines — Routine/RoutineRun model + RoutineService + RoutineAdapter, then admin builder + Today first-then strip + persistence + scheduling | L | UNBUILT | no (net-new model first) | FR-ROUTINE-1..5 | — |
| RW-13 | Offline-sync substrate — Supabase cloud adapter + hydrate-once watch + pending_writes queue + ledger-ordered/LWW conflict resolution + offline holds | L | UNBUILT | no (architectural) | NFR-OFFLINE-1..6 | — |
| RW-14 | Security hardening — SQLCipher local encryption + complete zero-floor trigger + service-role CI scan + key-rotation + Storage ACLs + RLS regression suite | M–L | PARTIAL | partial | NFR-SEC-2..7 | — |
| RW-15 | Analytics substrate — Mixpanel behind config+consent gate + minor-safe pre-emit filter + three-bucket + KPI events + audit | M | UNBUILT | no (net-new) | NFR-ANALYTICS-1..10 | — |
| RW-16 | Accessibility formal gate — labels + 48dp + AA contrast + reduced-motion app-wide + focus order + manual SR pass + 200% scale | M | PARTIAL | n-a | NFR-A11Y-1..7 | — |
| RW-L1 | COPPA financial-PII gate (HARD-1) — extend assertChildDataAllowed to ledger/approvals/spend/redemptions/token_batches | M | DEFERRED (legal) | partial | NFR-COPPA-2, NFR-SEC-6 | real minor data |
| RW-L2 | Consent versioning + re-consent (HARD-2) — checkConsentCurrency + re-consent SLA + version-gating | M | DEFERRED (legal) | partial | NFR-CONSENT-3,4 | ToS/privacy version bump |
| RW-L3 | COPPA data-minimization + no-marketing-to-children + parental review/deletion | M | PARTIAL (legal) | partial | NFR-COPPA-3,4,5 | RW-15 (marketing gate) |
Notes. RW-01..RW-07 are frontend-only on a ready SDK (cheapest, parallelizable). RW-08/RW-11/ RW-12/RW-13/RW-15 carry data-layer work and should be scheduled with the data workstream (prioritization §4: "data leads"). RW-L1/RW-L2 are MVP-1-scope legal blockers deliberately deferred in build because the project is pre-alpha with no real minor data — they must close before the first real minor's data is stored / before any ToS bump affecting minors.
Addendum — 2026-07-02: MVP-1 Complete
Branch feat/mvp1-personas-authz fully merged to main at 2be8bf9.
Every item listed under "MVP-1 remaining" above has now shipped or been explicitly
deferred with a documented reason. Status flips below supersede the original coverage
table for those rows.
Status flips
| Requirement area | Was | Now |
|---|---|---|
| Catalog (browse/redeem IA) | UNBUILT | BUILT — E1 reward CRUD · E2 activity CRUD + gate editor · E3a 4-tab browse + member-selector + eligibility/locks · E3b bounty claim · E3-redeem adult-direct / child-request→approve · E4 redemption history + named approval rows · E5 chore auto-approve toggle + activity affordability fix + Home error surfacing + Activity.autoApproveRedemption |
| Money & Envelopes | PARTIAL | BUILT for MVP-1 — General model — S1 Bucket.general earn-landing (replaces EarningsSplit auto-split as credit destination) + S2 moveFunds debit/credit ledger pair + S3 General wallet row + instant-move + Undo snackbar; EarningsSplit retained as move-sheet suggestion defaults; 6 live migrations (description, helper_manual, other_adult, birth_date, auto_approve_redemption, bucket_general_move); goal-envelope balance and household default-allocation deferred by scope decision |
| Onboarding | PARTIAL | BUILT — RW-10: household → kid + optional DOB → parental consent → economy config → first-chore quick-starts → checklist deep-links; TermsSessionGate covers adult terms (FR-ONBOARD-2); wizard gates consent correctly for under-13 and unknown age |
| Settings (More hub) | PARTIAL | BUILT — RW-06: MoreBloc + persona-aware tile list + Appearance/Accessibility/Account/About/Help routes; AccountPage name/email display + sign-out; user-co-authored WIP folded verbatim |
| Visual timers | UNBUILT | BUILT — RW-04: DsTimerRing (shrinking arc, green/amber/red + numeric channel) + TodayChoreTimerRow (Start-N-min, pause/cancel) + reduced-motion discrete variant + multi-timer; FR-TIMER-1..6 |
| Account & profile mgmt | PARTIAL | BUILT — RW-09: GoTrue updateUser double-opt-in change-email wrapper; AccountPage inline form + "check both inboxes" copy; sign-out entry live in RW-06 |
| Member Profile | PARTIAL | BUILT — all 6 FR gaps (avatar colour, home-room chip, goal Reached/dueLabel, edit goal, goal emoji) confirmed built by earlier slices; RW-02 commit = Money S3 fold-ins + bonus tests |
| Household | PARTIAL | BUILT — RW-03: family goals card + create/suggest/request/approve/mark-reached/archive; watch-only member tiles; poll-on-tab-open; FR-HOUSEHOLD-2 wallet-glance + FR-HOUSEHOLD-6 budget summary deferred (see Open items below) |
| Print & printables | PARTIAL | BUILT — RW-07: printableLists flag gate + earning-hint ("earns X tokens") + duration column + _printMember rename; analytics rename deferred to RW-15 |
Open items within MVP-1 (named follow-ups; not launch blockers unless marked)
- FamilyGoalsBloc extraction — god-bloc trajectory noted in RW-03; extract when relaxing the
expectedEventspin is safe (timing-sensitive refactor, not a functional gap). - DsGoalThumbnail dedup — ~200-line widget duplication between
member_profileand the household goal tile; extractDsGoalThumbnail. - Chore chip-highlight listener — MEDIUM UX-only follow-up from RW-10 (tapping the onboarding checklist item should briefly flash the relevant chore chip on Today).
- Shared email validator — RW-09 review found no shared validator; minimal structural check used, server is authoritative; small follow-up to extract a reusable
DsEmailFieldvalidator. - FR-SETTINGS-3 pending badge — requires a
watchPendingBadgeCountSDK aggregator; deferred from RW-06. - FR-HOUSEHOLD-2 wallet-glance chips — deferred from RW-03; depends on More→Account WIP landing.
- FR-HOUSEHOLD-6 budget summary — deferred from RW-03.
- Co-parent invite facade verb — FR-ONBOARD-4 deferred from RW-10;
inviteCoParentfacade verb needs wiring before the wizard step activates. - 2 pre-existing
full_stack_testfailures —seedDemoHouseholdasserts 2 kids but seed builds 3; reproduced on clean HEAD, unrelated to this branch. Fix before launch. - Flow-golden regeneration — 3 DS atmosphere_horizon goldens have pre-existing font/env drift on Windows; regenerate on the reference CI environment.
Deferred to MVP-2 / legal (not pre-alpha launch blockers; required before real minor data or go-live for the intended audience)
- COPPA HARD-1 — child financial-PII gate over ledger/approvals/spend_requests/redemptions/token_batches; must close before a real minor's financial data is stored.
- COPPA HARD-2 — consent versioning + re-consent SLA (
checkConsentCurrencyTODO); must close before any ToS/privacy version bump affecting real minors. - Notifications (RW-11) — net-new
NotificationsService+LocalNotificationsAdapter; deferred. - Routines (RW-12) — net-new
Routine/RoutineRunmodel + service; deferred. - Offline-sync substrate (RW-13) — Supabase cloud adapter + durable write queue; deferred.
- Analytics substrate (RW-15) — Mixpanel behind consent gate + three-bucket separation; deferred.
- Accessibility formal gate (RW-16) — labels/48 dp/AA contrast/SR pass; deferred.
- Kid-mode / TV / kiosk (DF-7/DF-8), Billing surface (DF-13), Aging-up (DF-9), and all other DF-1..14 items — explicitly deferred-by-design.
Tally post-MVP-1: all originally-PARTIAL / UNBUILT MVP-1 items have shipped or carry a documented deferral with a trigger. DF-1..14 + HARD-1/2 remain intentionally open, gated on legal review and real-minor-data arrival.