Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
476f00a
docs: rewrite Roles & Permissions as the self-serve RBAC reference
abhijaisrivastava15 Aug 11, 2026
760a3d7
docs(rbac): correct role resolution, remove/deactivate, seat limits, …
abhijaisrivastava15 Aug 11, 2026
051f4b9
docs(rbac): fix the corrections themselves
abhijaisrivastava15 Aug 11, 2026
5ffa156
docs(rbac): move screenshots to the house image path and write real a…
abhijaisrivastava15 Aug 11, 2026
88f3f6d
docs: align sibling pages with the corrected roles reference
abhijaisrivastava15 Aug 11, 2026
23ffea8
docs(rbac): plain register, no commentary about the page
abhijaisrivastava15 Aug 11, 2026
96d9e5a
docs(rbac): remove sentences that need a second read
abhijaisrivastava15 Aug 11, 2026
e08e18e
docs(rbac): match house conventions on links, captions, and diagram m…
abhijaisrivastava15 Aug 11, 2026
486afcd
docs: API keys are under Build > Keys, not Settings
abhijaisrivastava15 Aug 12, 2026
9f1c6a8
docs: correct button labels and drop the 2FA grace period claim
abhijaisrivastava15 Aug 12, 2026
cf2ba58
docs: correct invite and queue behaviour seen in the live dialogs
abhijaisrivastava15 Aug 12, 2026
8f6ff16
docs: add the redirect entry CI requires for the removed admin-settin…
abhijaisrivastava15 Aug 12, 2026
e7d5098
docs: address review — remove seats, rebuild members page, remask scr…
abhijaisrivastava15 Aug 12, 2026
e9792be
docs: crop the invite shot to the dialog, blur emails on the members …
abhijaisrivastava15 Aug 12, 2026
e3da4cc
docs: correct the Workspace Admin rows verified against live logins
abhijaisrivastava15 Aug 12, 2026
05514dd
docs: correct the key deletion and system key claims against the live UI
abhijaisrivastava15 Aug 12, 2026
782bebf
docs: correct the workspace admin invite scope and drop the unsupport…
abhijaisrivastava15 Aug 12, 2026
86cdbec
docs: fix the same workspace admin invite claim on user management
abhijaisrivastava15 Aug 12, 2026
2412e26
docs: only an Owner can delete an API key
abhijaisrivastava15 Aug 13, 2026
905d7eb
docs: rewrite RBAC pages against what the product actually does
abhijaisrivastava15 Aug 13, 2026
fa23839
docs: Workspace Admins do reach the Keys page
abhijaisrivastava15 Aug 13, 2026
469ba79
docs: only an Owner can delete an API key, and three smaller fixes
abhijaisrivastava15 Aug 13, 2026
475597c
docs: the Settings list follows the organization role alone
abhijaisrivastava15 Aug 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions PR_BODY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
## What

Rewrites `Roles & Permissions` into the self-serve RBAC reference, so customers stop asking us who can reach what.

Covers the organization/workspace split, all four organization roles and three workspace roles, annotation queue roles, multi-org membership, what is scoped to a workspace vs the organization, share links, both kinds of API key, invites and the invite ceiling, role changes and removal, seats and billing, and the two-factor policy. Ends with two permission tables and a 17-question FAQ.

Also aligns 13 sibling pages that contradicted it.

## Why

The page that existed described a system the code does not implement. Every claim here was re-derived from `future-agi/future-agi@origin/dev` (`2bf0d79b7`) by verifiers that read the source first and compared second, in two passes: once on the original page, then again on the replacement sentences.

118 claims checked. 66 were already grounded. 52 were wrong or imprecise and are corrected here.

The ones a customer would actually get burned by:

- **"The higher of the two roles wins" is false.** Two resolvers exist and disagree. The one guarding every write ignores your organization role entirely below Admin, so an organization Member added to a workspace as Workspace Viewer cannot create or edit there. The old page used that exact scenario as its worked FAQ example and got it backwards.
- **Remove and deactivate are the same operation.** There is one button. It soft-deactivates and keeps the record. The old page described two behaviours that do not exist.
- **The seat limit does not block invites.** The refusal path cannot fire, and the live invite endpoint has no seat logic at all. Extra seats bill as overage.
- **The 2FA policy is on Org Settings**, not the "Profile & Security" page, which does not exist. Members and Viewers cannot open Org Settings, so they never see the policy.
- **Sharing covers traces and Observe projects**, not the five resource types listed. Dashboards, datasets and eval runs have no share entry point.
- **Gateway request logs are invisible outside the default workspace**, the opposite of what the page claimed.
- **Workspace Admin leaks past organization-role gates.** The frontend collapses both roles into one string, so a Workspace Admin reaches Billing, Plans & Pricing and the Keys page regardless of their organization role. Documented rather than hidden.

## Diagram

Replaces the Mermaid flowchart with a hand-authored SVG built to the constants in #783. Every label was measured with `getBBox()` in a headless render; worst-case clearance is 35.5px horizontal.

## Screenshots

The three inherited screenshots were blurred. They now use the §7 masked convention: sharp black rect, white "masked" label.

Assets moved from the legacy `public/images/rbac/` to `public/images/docs/rbac/` per `WRITING_DOCS.md`, and terse markdown alt text replaced with descriptive sentences. `workspace-members.png` is removed, orphaned by the rewrite.

## Sibling pages

Thirteen contradictions with the corrected reference, all one or two lines:

| Page | Was | Now |
|---|---|---|
| `api-keys`, `admin-settings/index`, `faq`, `evaluation/troubleshooting` | API keys are Owner-only | Owner, Admin and Workspace Admin can open Keys; only an Owner can delete |
| `billing-pricing`, `admin-settings/index` | Billing is Owner and Admin only | Adds Workspace Admin, notes Cloud-only |
| `organization-settings` | 2FA locks members out immediately | Grace period, plus the self-2FA prerequisite the steps omitted |
| `user-management` | "Remove member ... revokes all access" | Marks them Deactivated, record kept |
| `user-management`, `workspace-management` | Printed `workspace_admin` / `workspace_member` / `workspace_viewer` | Real UI labels |
| `queues` | Only selected members can access a queue | Anyone in the workspace can browse it; only added members annotate |
| `self-hosting/user-management` | Pointed at a "Settings → Roles & Permissions" page | That page does not exist |
| 8 pages | Settings page names that do not match the sidebar | Members, Workspaces, Keys, Usage Summary, Plans & Pricing |

## Verification

- `node scripts/audit-links.mjs` — 0 broken content links, 0 broken nav links
- Every touched page renders 200 locally
- Page is registered in `src/lib/navigation.ts:696`
- No em dashes, no committed proof media, no ticket references in the diff

## Known gaps, deliberately left out

- **The invite email link expires at 3 days while the invite record lives 7.** Django's `default_token_generator` timeout is never overridden. Documenting it would enshrine a bug; it needs an engineering fix.
- **Per-seat overage pricing** is in the code but is an internal value, so it stays off a customer page.
- **Screenshot dimensions** are non-uniform (3346x1816, 1038x1362, 1038x1108) against the 3024x1964 house standard. These are pre-existing assets, not introduced here. A recapture needs a live logged-in session.
Loading