← All frames
App detail · Frame (f) · route /apps/:appId

Detail & editor states

The states the detail and settings editor must render: a caller with read-only authority, a suspended app with limited actions, a built-in app whose core is non-editable, an app with no editable settings, the lifecycle confirmations, and the save-time failures (validation, conflict, denial). Each is a frame QA writes a RED spec against.

(f1) Read-only — caller lacks apps:write / apps:activate (fail-closed)

Northwind CRM

crm Activated
no actions available
(f2) Suspended app — limited actions

Billing Portal

billing-portal Suspended
Edit settings
(f3) Built-in app — core immutable, non-deletable

Clock built-in

clock Activated
Edit display
(f4) No editable settings — disabled affordance, not a broken form

Nothing to configure here

This app exposes no editable settings — its manifest is fully managed by the app at registration. Display name and icon can still be changed from Overview.

No changes possible
(f5) Confirm suspend
(f6) Save failures — validation (422), conflict (409), denied (403)

Must be an absolute https URL. 422 renders inline on the field — never a toast that loses your edits.

Contract. (f1) read-only is fail-closed: no management affordance rendered, never a 403 on click. (f2) a suspended app offers Activate, not Suspend, and pauses installation targeting. (f3) builtin: true disables Delete client-side and the API refuses it. (f4) an app with no editable settings shows a disabled Save, not an empty broken form. (f5) suspend is POST /apps/{slug}/suspend behind a confirm. (f6) 422 renders inline, 409 preserves the form, 403 is shown in place.

Review · app-management approve or reject each flow ↓
app-listpendingApproveReject
app-detailpendingApproveReject
installationspendingApproveReject