States are contract, not decoration. The directory ships with every one of these or it ships a happy-path-only launcher. Loading, the fresh-install empty case, a failed list with retry, and — the load-bearing one — the fail-closed permission-denied / read-only case: a caller without manage authority sees no launch affordances at all. A 403 is an authorization result shown in place, never a sign-in redirect (only a 401 re-authenticates).
Loading…
0 portals
You don't manage any portals yet. When a portal is provisioned and you're granted admin on it, it appears here — ready to open in its own tab.
Couldn't load
Read-only
Acceptance. d1 aria-busy skeleton while GET /api/v1/admin/portals
is in flight. d2 empty is real — a caller can legitimately manage zero portals; it is not an
error. d3 renders [data-action="retry"] and never a sign-in redirect (the session
is intact). d4 the launch action is unmistakably external — new tab, with a hint. d5 a
suspended portal exposes no enabled launch affordance. d6 is the fail-closed
contract: a caller without manage authority (Permit ReBAC) gets a 403 shown in place and
no launch anchor or button is emitted for any row — the launch column is absent, not
merely disabled, so there is nothing to open. Only a 401 re-authenticates.