Appearance
Code review β dashboard full build + referral/node backend β
- Branch:
feature/dashboard-full-buildβmaster - Date: 2026-06-24
- Scope: 12 commits, 59 files (+1209 / β4865 β the deletions are the deprecated v1 design-system removal, out of review scope)
- Reviewer: code-reviewer agent over
git diff origin/master...HEAD, synthesized.
Deterministic gate β
| Check | Result |
|---|---|
nx lint web | β 0 errors |
nx test web | β 179 passed |
| coverage gate | β stmts 78.4% Β· branches 67.6% Β· fns 69.6% Β· lines 83.2% (all β₯ threshold) |
nx build web | β |
nx lint/test/build api | β |
What's in the batch β
Dashboard: Members view (default β KPIs, collapsible Nodes, member directory, 6-column Referral relationships), Mandates view with a read-only drill-down breakdown, People & activity (current / finishedΒ·30d / expand to all). Topbar search + node scope switch via a new AdminUiService. Referral backend (Option A): real sponsor_mp_id / admitted_at / gacx_share columns. Nodes: delete β deactivate (new nodes.active, soft-delete + reactivate). Plus removal of the deprecated v1 design system.
Findings β
π΄ Blocking β none. β
π‘ Should-fix (all resolved in-branch) β
category()/categoryLabel()mislabeled "Member Partner" as "Associate Partner" β the app's canonical role is "Member Partner"; no surface uses "Associate Partner". FIXED βcategoryLabel('AP') β 'Member Partner', KPI "Associate partners" β "Member partners", removed the dead'Board'branch.- Dashboard
forkJoinhad no teardown β a late response after navigation re-ranui.enable(), leaking the topbar search/scope controls (root singleton) onto another admin page. FIXED βtakeUntilDestroyed(this.destroyRef)on the subscribe. - Node
AllowDelete: trueleft a live hard-delete endpoint that orphans members (node_id on delete set null), contradicting the soft-delete decision. FIXED βAllowDelete: falseinNodeSchema(no UI/test path used it). - "Active referrals" KPI used unscoped
d.referrals.lengthwhile every other Members computed honors the node scope. FIXED β counts referrals involving scoped members under a node filter.
π’ Nits β
nodeCardsmap-body indentation drift (cosmetic; lint clean).nodeOps.removenow unused from the UI (kept for theCrudOpscontract).- Scope
<select>uses[value]+(change)rather thanngModel(acceptable for native select).
Verified clean β
Goβmigration parity (tags, Columns/Values arity, writable split: sponsor_mp_id+active writable, admitted_at/gacx_share read-only with SQL defaults); node create always sends active:true and SQL default covers seed/direct inserts; deactivate/reactivate store.update round-trips; generated TS client in sync; all template reads call computeds; a11y on clickable cards / collapse / confirm / scope select; new specs assert drill-down, KPIs, search+scope, people-toggle-to-spec, 6-column referrals with real fields, and deactivate-not-delete + reactivate.
Verdict β
Safe to push β 0 blocking; all 4 should-fixes resolved in-branch.