Block a user
Export a catalogue record as a PDF (offline backup + printable copy)
Audit vocabulary/term/authority creation (admin writes currently unaudited)
Make database connection pool size configurable
Add graceful shutdown to the HTTP server
OpenAPI: type SearchHitView.visibility as the Visibility enum (consistency with #29)
Type enum-valued fields (visibility, data_type, authority kind) as enums in OpenAPI
OpenAPI: type object
fields as an open map, not an empty object
Decide OpenAPI schema strategy for domain newtypes (keep
domain I/O-free)
Decide OpenAPI schema strategy for domain newtypes (keep
domain I/O-free)
Decision: Option A — allow the utoipa::ToSchema derive in domain.
Rationale: domain already carries serde/serde_json/time (data-shape deps, no real I/O), and utoipa is a…
Test gaps: field-definition 403 (backend) + authority-kind reveal (frontend)
Test gaps: field-definition 403 (backend) + authority-kind reveal (frontend)
Resolved in 0d971cd:
- Frontend authority-kind reveal test — added to
web/src/fields/fields.test.tsx(selects the Authority type, picks a kind, asserts the postedauthority_kind).…
Frontend M4 polish: ARIA tab semantics for authority kind tabs + remove unused i18n keys
Frontend: terms & authorities lists silently swallow load failures (no loading/error state)
Frontend: distinguish "search unavailable" (503) from a generic search error
Foundation follow-up cleanups
Keep
authority.kind CHECK in sync with the AuthorityKind enum
Log server errors on the public API 500 paths (wire tracing in the api crate)
Return 404 (not 500) when adding a term to a non-existent vocabulary