Every state the list must render is contract, not decoration: the in-flight load, a genuinely empty registry, a load failure with retry, a no-results search, and the fail-closed case — a caller without Permit authority sees a read-only list with no management affordances, not an edit surface that only 403s when they act.
Nothing has been registered on this platform. Register an app to have it appear here — this console manages apps, the add-app flow creates them.
Register an appNo apps match “zzz-nonexistent” with the current filters.
| App | Slug | State | Visibility | Owning org |
|---|---|---|---|---|
Northwind CRM |
crm | Activated | Organization | Northwind Inc. |
Contract. (e1) is the in-flight GET /apps skeleton (aria-busy).
(e2) is a truly empty registry; (e3) is a non-empty registry with a search/filter that matched
nothing — distinct states with distinct copy and recovery. (e4) is a non-2xx with
data-action="retry". (e5) is the rule: a 403 is an
authorization outcome — the list still renders read-only, every management affordance is
absent (not disabled-on-click), and it is never a sign-in redirect (only a 401
re-authenticates). This is what stops shipping edit buttons that only fail on save.