The projection
Nav rows, columns, and rows you would see as that role. Useful for answering "why can't my admin see the Loop screen" without an account swap.
This page and the app concept are dressed by one stylesheet — v40.css, no console fork.
That is the entire proposal: an operator learns one rail, one list, one card, one confirm, and has
learned both surfaces. What separates them is density and scope, never grammar. The console's
sections are deliberately left alone — its information architecture was never the problem. Its
shell was.
Counts fetched just now, not at page load.
The console already ships a role switcher. 4.0 names what it is and states its limit in the surface, because an operator tool is exactly where a filter can be mistaken for a permission. Previewing a role changes what you see. It never changes what you may do, and it never changes who the audit log records. Same law as the app's hats and lenses, applied to the operator plane.
Nav rows, columns, and rows you would see as that role. Useful for answering "why can't my admin see the Loop screen" without an account swap.
Every action still evaluates server-side against your real capabilities. A previewed role cannot perform what your own role cannot — and cannot stop you performing what it can.
While a preview is active the rail states it plainly and the audit entry names you, not the role you were wearing. A lens that could be mistaken for an identity is a security defect.
The plan-features screen already does this well, and it is the best confirm pattern in the estate: it states how many live orgs change immediately, how many stay pinned to a contract snapshot, and it refetches those counts right before the dialog rather than trusting page load. 4.0 promotes it from one screen's good behaviour to the console's confirm grammar — every operator action that reaches beyond one row states its reach in the same shape. Try it: switch to v4.0 above and toggle a plan feature in the table.
| Area | v3.5 shipped | v4.0 |
|---|---|---|
| Shell | Fixed 220px sidebar, its own geometry | The universal rail — same component, same collapse, same stripe as the app |
| Tables | Shared table adopted on 1 of ~20 screens | All 20 — sticky head, density, column picker, honest count |
| Density | A property of whichever screen you are on | A setting — comfortable or compact, operator's choice, remembered |
| Counts | Silent caps; a page-1 list looks complete | Honest — what is drawn, what exists, per viewer |
| Display type | Cormorant never loads; the console has no editorial moment | One per screen — the same single display moment the system is built around |
| Phone | Dense tables do not reflow | Tables become cards — the app's own rule, not a console exception |
| Preferences | Column and density prefs in local storage, per browser | Server-side — an operator's setup follows them to the next machine |
| Sections | Seven sections, 36 screens | Unchanged — membership is not the problem and re-grouping would cost recall for nothing |
relay-board/docs/product/experience-4-0.md
App concept →
Console v3.5 →
All concepts →