← All config-management frames
Flow 1 · Settings editor · Frame (c) · /config

Editor states — before there is anything to edit

States are contract, not decoration. A frame set that shows only the populated editor produces an editor that handles only the populated case. Each block below is a state the implementation must render and QA must drive.

A · Loading

Skeleton rows preserve the two-column key/value rhythm so the layout does not jump when entries arrive. No spinner-over-empty-form: an empty form is indistinguishable from "this namespace has no settings".

B · Empty namespace — entries: []

The namespace is registered but declares no visible keys at this scope. This is a legitimate 200, not an error and not a "no results" — the search box must not be blamed. It is also what a user sees when every key in the namespace is hidden (see D).

No settings in this namespace

The notifications namespace is registered but has no keys you can see or set at org Acme Corp. Nothing is wrong — there is simply nothing to configure here yet.

View the key catalog
C · Load failed

Retryable, and it must never present an empty form the user could type into and "save" — the editor has no baseline version to send as expectedVersion, so a write here could clobber a concurrent edit.

D · System-hidden keys — absent entirely, not hidden in the DOM

This is the state most likely to be built wrong, because building it wrong looks identical on screen. Hidden keys are omitted by the API; the editor performs no client-side filtering and must have no code path that could render one. A hidden key that arrives, is rendered, and then CSS-hidden has already leaked into the browser.

notifications · org Acme Corp

6 entries
KeyIn catalogIn GET /v1/config
notifications.digest.frequencyyesyes
notifications.retry.backoffyesyes
notifications.internal.shardKey hiddenyesabsent
notifications.internal.debugSink hiddenyesabsent

Hidden keys are visible only to a platform admin, only in the catalog view — frame (g).

E · No write grant at this scope — read-only, fail-closed

Every entry arrives with editable: false. The editor renders the whole surface read-only with no save bar at all — never inputs and a Save button that only 403s. The UI is not the authorization boundary; it reflects a decision Permit already made.

notifications · org Globex Inc

read-only
Digest frequencynotifications.digest.frequency
Set here · editable: false
Batch notificationsnotifications.digest.enabled
Enabled Inherited from portal Globex Portal

Why D is called out separately. The epic's success metric is zero hidden keys reaching the browser. A client-side filter(k => !k.isHidden) would satisfy every visual review and fail that metric completely. QA asserts on the network payload, not on the absence of a rendered row.
Contract. GET /v1/config · EffectiveConfig.entries — "One entry per visible key. Hidden keys are absent entirely."

← Provenance & lock Next: save conflict, validation, stale values →
Review · config-management approve or reject each flow ↓
settings-editorapproved · izzywdev
key-catalogapproved · izzywdev
secret-auditapproved · izzywdev