Skip to main content

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 / ChoreSuggestion models are built, but the recommend() 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 in architecture/code.md now 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 a FakePostgrest + real SupabaseStorageAdapter

    • real HouseholdService. InviteAcceptException is 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.
  • 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, and AuthUser.mustChangePassword / AuthAccount.mustChangePassword are 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. See app/test-gallery/authored/developer/architecture/auth.md for 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)

GapPOC fieldWhy it matters
Member ↔ chore assignmentChore.assignedKidIds: List<String> (empty = all)Without it every expectation shows to every member; the child timeline can't show "my chores".
Member home-roomHouseholdMember.homePlaceId: String?Drives by-room grouping + lets a chore default to that member's room.
Watch-only membersHouseholdMember.watchOnly: boolInfants/dependents tracked for goals but not earning — must not appear in assignment/token surfaces.

Tier-1/2 (product depth)

GapPOC fieldWhy
Per-room assigneesChore.roomAssignees: Map<placeId, List<memberId>>"Clean your room" across kids without duplicating the chore. Pairs with home-room.
Per-member subtask overridesChore.stepsPerKid: Map<memberId, List<Subtask>> + stepsForKid()Core neurodiversity affordance — different kids, different step granularity. Tracked as task #206.
TempBonusChore.tempBonusTokens, tempBonusUntil (today/thisWeek/untilOff)A temporary incentive to reignite a stale routine without permanently changing tokenValue (Tier-2 fading economy).
Goal lifecycle statusGoalStatus { active, requested, complete, archived }The "kid requests a goal → parent approves" flow; rewhaven only has isActive.
Multi-per-day bountiesChore.maxPerDay + ChoreFrequency.multiPerDayRepeating bounties ("Watch sibling 15 min"); rewhaven freq is once/daily/weekly/monthly only.
AI recommender modelsChoreRecommendation / ChoreSuggestionNorth Star §3 explicitly names these; needed for the recommender service + facade to type-check.

Polish

GapPOC field
Chore time estimateChore.estimateMin: int?
Goal visualGoal.imageUrl, Goal.dueLabel

Intentional changes (keep — well-reasoned)

  • Chore.placeId single (POC placeIds: List) — multi-room served instead by roomAssignees (a gap above). Simpler schema.
  • Place has address, dropped emoji/flooraddress supports 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 → HouseholdMember unification (cited in goal.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.md in 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).