Profile switching
Status: ✅ Active-member lens shipped (on the Profile page) · 🔜 shared-device PIN-gated picker deferred
Scope
Two distinct things share the "switch profile" idea; only the first has shipped.
Active-member lens (shipped)
The active-member switcher lives on the Profile page — a Google-account-style list (it replaced the old top-header account-switcher chip). It is capability-gated: only a viewer who may already select a non-self identity sees other members (a child is locked to self). Selecting a member re-scopes what the UI displays — the top-bar identity avatar, the Profile nav icon, catalogs, and the active-member subsections (My Cosmos) all follow the selection and update together.
This is a display lens only, never a second principal. The authenticated member
(CurrentMemberRepository.current) stays the sole actor for every gated call and for
RLS — see Authorization ("Viewing as" is not authorization). The
proxy read-only rule applies: while proxied (active member ≠ authenticated self),
member-owned surfaces (companion sheet, My Cosmos) are read-only, enforced by the SDK's
self-only mutation.
Shared-device PIN-gated picker (deferred)
A separate "who is using this device" picker for shared tablets / TV lean-back displays — auto-appearing on launch for shared devices and PIN-protected for adult profiles — is not yet built. It builds on the shipped lens but adds device-session semantics and a PIN gate.
Open questions (shared-device picker only)
- Does switching profiles re-authenticate (full session swap) or just switch display context?
- Should the picker auto-appear on app launch for devices flagged as "shared"?
- How does this interact with kid-mode pin-lock — is the PIN per-profile or household-wide?
- Can a child's profile be PIN-locked to prevent accidental switch-away?
Relationship
Kid-mode pin lock — PIN gate applies when switching to/from kid profiles.