Narong (board item n1, Next-Phase POS) — a limited POS User role: just enough rights
to run and lock/unlock the register, and cannot see other cashiers' PINs. Gate-2 5/5
on lumiere.staging (Starter) + staging smoke 5/5.
pos_user system role with the same POS-operator rights as Cashier (view POS, open/close sessions,
ring orders, take payments, select customers, view products) — but explicitly no
nix_cafe.team.view_pin and no team.view, so a POS User can't open the Team
page at all, let alone reveal a PIN. Data-only nix-db migration (no schema change); the role auto-appears in the
existing Team › Invite dropdown.
The migration seeds one pos_user role per tenant with 8 permissions and grants it no PIN-view
right. Verified on the staging nix_db across all 3 tenants.
Logged in as posuser@lumiere-coffee.com (assigned the POS User role): the POS opens normally
(has pos.view).

/cafe/pos — can run the register.The same login is redirected away from every admin surface — Team (where PINs live), Settings, and Dashboard —
because the role lacks those permissions. "Cannot see other cashiers' PINs" is enforced twice over: no
team.view (can't even open Team) and no team.view_pin.
| navigate to | result |
|---|---|
| /cafe/team | redirected away → /cafe/pos |
| /cafe/settings | redirected away |
| /cafe/dashboard | redirected away |
| /cafe/pos | allowed |

/cafe/team as a POS User bounces back to the POS — no access to the PIN admin.No role-editor UI was needed: the role is loaded by the existing Team page, so an owner can assign it straight from Team › Invite.

nix-cafe d7ecc27 + nix-OS-backend c0d75c6
(staging: nix-cafe e188327 / backend e88e708, Worker 6d8c886c). nix-db data
migration 20260714120000_nix_cafe_pos_user_role applied to staging. Parked on staging for the
scheduled prod promote.