Domain-coverage audit — North Star / POC vs the rewhaven SDK
Date: 2026-06-22 · Status: ✅ All 11 domain gaps BUILT (2026-06-23) — closed by the SDK domain-completion sub-project + the P1/P2 domain-gaps program. This doc is retained as the historical audit; the tables below are annotated with their build state.
RESOLVED 2026-06-23. Every gap listed below now exists in the rewhaven SDK domain model (model + service rule + Drift/Supabase schema + test doubles), verified via graphify. The only residual is the AI recommender service:
ChoreRecommendation/ChoreSuggestionmodels are built, but therecommend()facade returns an empty result until the AI sub-project. UI wiring of these built fields proceeds under the P1/P2 plan (Catalog + full-page chore editor + assignment/per-room built; per-member steps, Members editor, Today grouping, goal-request UI, recommend dialog still in progress). The C4 L4 diagrams inarchitecture/code.mdnow draw these solid.
Update 2026-07-21:
-
Path B G5 (join-with-code accept surface) — CONFIRMED BUILT + WIRED + TESTED. The
accept_invite_routing_test.dart(packages/client_sdk/test/cloud/) exercises the full cloud-accept leg against aFakePostgrest+ realSupabaseStorageAdapter- real
HouseholdService.InviteAcceptExceptionis defined and propagated. This closes the deep-dive G5 item: the accept surface is not just modelled — it is built, wired into the adapter and service layers, and covered by an integration test.
- real
-
Admin-direct-create — new adult-onboarding path (code-complete; cloud deploy pending). An admin can now create a co-parent or other adult directly from the household admin UI without an email round-trip. The full path:
Admin UI → MembersBloc(AdminCreateAdultRequested) → HouseholdRepository → client_sdk facade → HouseholdService.adminCreateAdult() → [cloud] admin-create-adult Edge Function. The Edge Function (infra/supabase/functions/admin-create-adult/) is committed and reviewed but not yet deployed to the Supabase project. App-side wiring is complete:MustChangePasswordGuard(un-bypassable, regression-tested),AuthRepository.updatePassword, andAuthUser.mustChangePassword/AuthAccount.mustChangePasswordare all live in the build. End-to-end D1/D2 credential flow (admin creates adult → first-login must-change gate → password rotated → authenticated shell) becomes functional once the Edge Function is deployed. Seeapp/test-gallery/authored/developer/architecture/auth.mdfor the full architectural description.
Triggered while building the C4 model: several domain concepts the POC implemented (and the North Star spec implies) were absent from the rewhaven SDK at audit time. This was the authoritative gap ledger; the C4 L4 diagrams now draw all of these solid (built).
Sources: North Star = Chore_app/docs/rebuild/2026-06-11-clean-rebuild-design-spec.md;
POC models = Chore_app/packages/client_sdk/lib/src/models/sdk/{chore,household_member,kid}.dart;
rewhaven = packages/client_sdk/lib/src/models/ (29 models).
Verdict
At audit (2026-06-22): 28 concept-areas BUILT · 11 GAPS to build · 4 intentional changes · 0 unclear. Now (2026-06-23): all 11 gaps BUILT → 39 concept-areas BUILT · 0 domain gaps · 4 intentional changes. The intentional changes are all sound; the gaps below were real and are now closed.
Gaps to build — ✅ ALL BUILT (2026-06-23)
(Original gap tables retained for the record. Every row is now implemented in the
SDK domain model; see architecture/code.md for the built L4 diagrams.)
MVP-critical (needed for the multi-child, child-facing experience)
| Gap | POC field | Why it matters |
|---|---|---|
| Member ↔ chore assignment | Chore.assignedKidIds: List<String> (empty = all) | Without it every expectation shows to every member; the child timeline can't show "my chores". |
| Member home-room | HouseholdMember.homePlaceId: String? | Drives by-room grouping + lets a chore default to that member's room. |
| Watch-only members | HouseholdMember.watchOnly: bool | Infants/dependents tracked for goals but not earning — must not appear in assignment/token surfaces. |
Tier-1/2 (product depth)
| Gap | POC field | Why |
|---|---|---|
| Per-room assignees | Chore.roomAssignees: Map<placeId, List<memberId>> | "Clean your room" across kids without duplicating the chore. Pairs with home-room. |
| Per-member subtask overrides | Chore.stepsPerKid: Map<memberId, List<Subtask>> + stepsForKid() | Core neurodiversity affordance — different kids, different step granularity. Tracked as task #206. |
| TempBonus | Chore.tempBonusTokens, tempBonusUntil (today/thisWeek/untilOff) | A temporary incentive to reignite a stale routine without permanently changing tokenValue (Tier-2 fading economy). |
| Goal lifecycle status | GoalStatus { active, requested, complete, archived } | The "kid requests a goal → parent approves" flow; rewhaven only has isActive. |
| Multi-per-day bounties | Chore.maxPerDay + ChoreFrequency.multiPerDay | Repeating bounties ("Watch sibling 15 min"); rewhaven freq is once/daily/weekly/monthly only. |
| AI recommender models | ChoreRecommendation / ChoreSuggestion | North Star §3 explicitly names these; needed for the recommender service + facade to type-check. |
Polish
| Gap | POC field |
|---|---|
| Chore time estimate | Chore.estimateMin: int? |
| Goal visual | Goal.imageUrl, Goal.dueLabel |
Intentional changes (keep — well-reasoned)
Chore.placeIdsingle (POCplaceIds: List) — multi-room served instead byroomAssignees(a gap above). Simpler schema.Placehasaddress, droppedemoji/floor—addresssupports off-site places (spec §3 "Grandma's house"); emoji is a presentation concern (model-agnostic rule).GoalScope { family | member }(POC{ family | kid | parent }) — follows the kid+parent →HouseholdMemberunification (cited ingoal.dart).- Goal progress derived, not stored (POC mutable
currentTokens) — enforces the append-only ledger invariant (spec §8.9 lists mutable balances as POC tech debt not to repeat). See the rebuild spec §8.9.
Implications (status 2026-06-23)
- The SDK gaps are all built (model + service + schema + test doubles). The
remaining work is UI wiring, tracked in the P1/P2 plan
(
docs/superpowers/plans/2026-06-23-p1p2-domain-gaps-ui.mdin the repo): by-room grouping (home-room + roomAssignees), per-member steps (#206), the goal-request flow, and the recommend dialog. Catalog + the full-page chore editor (core + assignment + per-room) are done; Members editor, Today grouping, goal-request UI, and T4 incentive fields are in progress. - The three MVP-critical gaps (assignment, home-room, watch-only) shipped as the
first SDK slice; the recommender models shipped but its
recommend()service is still a stub (AI sub-project). - This doc was the source of truth for the gaps; the C4 L4 diagrams now draw them solid (built).