refinement phase 2

This commit is contained in:
hamid
2026-07-13 01:14:35 +03:30
parent 0b45ec51f4
commit 1ce36f9414
22 changed files with 519 additions and 27 deletions
@@ -12,6 +12,23 @@ for awareness.
- **Requests filed:** frontend/requests/for-backend.md (yes/no)
-->
## refinement-phase-2 — Auth & role-aware navigation ("only customer side" fix) — 2026-07-13
- **Shipped:** the resolved-vs-pending role fix. `useRoleHydration()` (`services/auth`, `loading|error|ready`
over `useMe`) + `RoleGuard` (wraps every private shell; tested) + `AuthAccountError`. Shells now: neutral
splash while `/me` loads (never the customer shell), explicit `/me`-failed recovery (never a silent customer
fallback), and role-mismatch **redirect** to `resolveRoleDestination` + `guard_denied` toast. `(customer)`/
`nurse`/`admin` guard `expected={APP_ROLES.*}`; `partner` is hydration-only (self-gates via
useMyPartnerCenter). i18n `auth.guard_denied`/`account_error_*` (en+fa). Backend (a little): 2 phone-OTP
admins added to the demo seeder (`09120000020` super_admin / `09120000021` finance) so `/admin` is reachable
via phone-OTP + `useAdminCapabilities` gating is demonstrable.
- **Consumes:** the real b2 auth (`/me`, `me/select_role`) — no new contract. `USE_AUTH_MOCK` stays false.
- **Mocked client-side:** none new. Partner login-routing deferred (`/partner` reachable by direct nav via the
existing partnerCenter mock).
- **Gate:** npm run check green · RoleGuard.test.tsx 8/8 · en/fa in sync · server build 0 errors ·
DemoWorldSeederTests 4/4.
- **Requests filed:** yes — **REQ-004 resolved** (client owns active-role); **REQ-038 filed** (a `/me`
partner-center-admin signal for partner login-routing).
## frontend-phase-15-b15 — Admin backoffice & partner-center consoles — 2026-07-10 — **MVP COMPLETE**
- **Shipped:** the internal **operational cockpit** — the role-gated admin backoffice (desktop sidebar shell) +
the separately-scoped **partner-center portal**. Two new domains: **`services/admin`** (config / holidays /