v2.51.0 — admin onboards operators via scoped invite links
The CTO/admin gets full access and invites a licensed operator into an industry: pick a role (which fixes the vertical scope) + a tenant + a name → mint an invite link to send. The operator opens it and is locked to that role + tenant — no role picker, no Build board.
- Invite store (
scripts/lib/operators.mjs) — create / resolve / accept / revoke; rejects unknown or admin roles. - The token is the operator's credential, resolved server-side and authoritative — an operator can't escalate by passing
role=admin(the token wins; verified). A non-admin can't create invites (403). - Admin Team panel in the console — create an operator → copy the invite link · list (pending/accepted) · revoke. Admin-only.
- Operator session —
?invite=<token>→ 'Signed in as … · role · tenant' banner, queue scoped to their vertical(s) + tenant, sign-out.
280 lib tests.