+**File-config inspection surface.** Operators inspect file-sourced entries via a dedicated read-only surface — `GET /v1/admin/config/file/{type}` (list) and `GET /v1/admin/config/file/{type}/{name}` (single). The list form returns a **names-only stub listing** — `{"items": [{"name": "gpt-4"}, …]}` — with no entity bodies and no `ResourceItemMetadata` fields (file entries have no blob, hence no `etag`, no timestamps, no `author`; `name` is the only metadata a file entry has). The full entity body is returned only by the single-entry GET: entity fields + `name` + `status`, with `@EncryptedField` fields dropped (`WRITE_ONLY` — no reveal path post-U.4). Bodies-in-bulk is deliberately not this surface's job — that is the deferred `GET /v1/admin/export` (see [IMPLEMENTATION.md §5.5 Defer.1](IMPLEMENTATION.md)), keeping the API-wide "no entity bodies in listings" contract (§4) uniform. Additional per-item fields on the listing (e.g. `type`, `description`, or observability fields) are YAGNI for now — they can be added later if an operator workflow shows the need, since the stub shape is forward-compatible with extra keys per item. Authorization (post-U.4): admin role for every supported type EXCEPT `keys`, which is denied for every caller including admin. File-sourced `Config.keys` keeps the legacy map-key-as-secret format per [OQ-12](08-open-questions-and-references.md), so the names themselves are secret-equivalent. Slice U.4 retired the `security-admin` tier that previously distinguished "may read secret-equivalent names" from plain admin; the surface now denies `keys` unconditionally — operators with strict need read `aidial.config.json` directly off the deployment. For the singleton, `GET /v1/admin/config/file/settings/global` returns the file-defined and schema-default values regardless of whether an API blob exists on the per-entity endpoint — this surface is the file-side window, independent of the blob's presence. No `PUT` / `DELETE` on file entries — `aidial.config.json` remains operator-managed; file write workflows continue through the existing config-file mechanism.
0 commit comments