2025-12-11 - 2026-06-11
Overview
56 Issues closed from 1 user
Closed
#73 Frontend polish: select placeholder copy, locked-field affordance in edit mode, field-list overflow, narrow-mode sidebar toggle, heading wrap
Closed
#72 Frontend UX: FieldsPage selection is not deep-linkable (state-only, inconsistent with vocab/objects routing)
Closed
#71 Frontend motion & touch: honor prefers-reduced-motion; contain overscroll in drawer/dialog
Closed
#70 Frontend UX: delete-object dialog allows double-submit; login button gives no in-flight feedback
Closed
#69 Frontend a11y: focus-visible gaps on sort headers, breadcrumb links, combobox, page-size select; search result count unannounced
Closed
#68 Frontend dark mode: popup primitives + page-size select still hardcode light colors; missing theme-color/color-scheme meta
Closed
#42 Frontend: render timestamps in the instance timezone (Intl), once there's a display
Closed
#58 Frontend UX: master-detail + sidebar layout has no responsive/small-screen handling
Closed
#67 Frontend: bundle vendor-split (221 KB gz, ~29 KB headroom) + fill unit-test gaps
Closed
#66 Frontend design-kit consistency: dead Card, duplicated segmented-control + row/icon recipes, focusRing/useLang drift
Closed
#65 Frontend: split queries.ts by domain, extract error classes, add query-key factory; decide search-invalidation
Closed
#64 Frontend refactor: unify the duplicated Vocabulary + Authority CRUD surfaces
Closed
#62 Frontend a11y: label-id collision, invalid table row semantics, unnamed drawer, unannounced table states
Closed
#63 Frontend data layer: silent update failures + dead/unreachable mutation error strings
Closed
#48 Frontend UX: session-expiry handling loses in-progress work; auth feedback gaps
Closed
#61 Frontend UX: search result rows lack type/date meta; single thin facet; "estimated" count not flagged
Closed
#52 Frontend a11y: focus-visible on custom controls, route focus management, skip link, tablist/lang semantics
Closed
#60 Frontend i18n: enforce en/sv key parity with a test
Closed
#50 Frontend UX: reference-data screens are inconsistent and hard to scan (vocab / authorities / fields)
Closed
#53 Frontend UX: standardize loading states on Skeleton (retire "…" and empty role=status divs)
Closed
#51 Frontend UX: replace raw <select> elements with a token-styled Select / combobox
Closed
#46 Frontend UX: object form robustness — double-submit, no dirty guard, inconsistent partial-failure recovery
Closed
#54 Frontend UX: app header is empty — add wayfinding (section/breadcrumb, user, app name, global search)
Closed
#57 Frontend UX: typography hierarchy + a real page <h1> per route + per-route document.title
Closed
#59 Frontend: dark mode is half-built dead code — wire a theme toggle or remove it
Closed
#55 Frontend bug: LabelEditor silently drops other-language labels when editing
Closed
#49 Frontend design system: feature screens bypass the OKLCH tokens + ui/* kit (inconsistent visual language)
Closed
#47 Frontend UX: add toast notifications — mutations currently succeed silently
Closed
#45 Frontend UX: object detail renders term/authority/localized values as raw JSON
Closed
#44 Frontend UX: object list should be a scannable, sortable, filterable table
Closed
#27 Searchable term/authority picker for large vocabularies (combobox + server-side search)
Closed
#14 Wire the Spectrum cataloguing seed into runtime
Closed
#36 Backend + frontend: edit/delete field definitions
Closed
#30 Backend: edit/delete endpoints for vocabularies, terms, and authorities
Closed
#26 Pin the pnpm version for reproducible web installs
Closed
#28 set_object_fields 422 should carry field-level detail (so the UI can highlight the offending field)
Closed
#41 localized_text edit can leave a stale other-language sub-value
Closed
#38 OpenAPI: type SearchHitView.visibility as the Visibility enum (consistency with #29)
Closed
#21 Audit vocabulary/term/authority creation (admin writes currently unaudited)
Closed
#1 Add graceful shutdown to the HTTP server
Closed
#2 Make database connection pool size configurable
Closed
#24 OpenAPI: type object fields as an open map, not an empty object
Closed
#29 Type enum-valued fields (visibility, data_type, authority kind) as enums in OpenAPI
Closed
#3 Decide OpenAPI schema strategy for domain newtypes (keep domain I/O-free)
Closed
#37 Test gaps: field-definition 403 (backend) + authority-kind reveal (frontend)
Closed
#31 Frontend: terms & authorities lists silently swallow load failures (no loading/error state)
Closed
#32 Frontend M4 polish: ARIA tab semantics for authority kind tabs + remove unused i18n keys
Closed
#4 Foundation follow-up cleanups
Closed
#9 Keep authority.kind CHECK in sync with the AuthorityKind enum
Closed
#34 Frontend: distinguish "search unavailable" (503) from a generic search error
Closed
#18 Log server errors on the public API 500 paths (wire tracing in the api crate)
Closed
#22 Return 404 (not 500) when adding a term to a non-existent vocabulary
Closed
#8 Remove unused thiserror dependency from db crate (or land db::Error)
Closed
#16 Enforce required-field completeness when transitioning a record to Public
Closed
#17 On-write search re-index after catalogue/visibility writes
Closed
#15 Admin endpoint to trigger visibility transitions (publish/unpublish)
73 Issues created by 1 user
Opened
#1 Add graceful shutdown to the HTTP server
Opened
#2 Make database connection pool size configurable
Opened
#3 Decide OpenAPI schema strategy for domain newtypes (keep domain I/O-free)
Opened
#4 Foundation follow-up cleanups
Opened
#5 Run the app under a non-owner DB role (INSERT/SELECT only on audit_log)
Opened
#6 Add pagination to audit history_for before exposing it via the API
Opened
#7 Extend the audit log to cover auth/security events
Opened
#8 Remove unused thiserror dependency from db crate (or land db::Error)
Opened
#9 Keep authority.kind CHECK in sync with the AuthorityKind enum
Opened
#10 Paginate repository list endpoints before exposing them via the API
Opened
#11 Per-field validation rules (min/max, length, regex) for field definitions
Opened
#12 Batch-fetch field definitions in set_object_fields (avoid N+1) for bulk import
Opened
#13 Consider coalescing core + flexible-field audit entries for a single edit
Opened
#14 Wire the Spectrum cataloguing seed into runtime
Opened
#15 Admin endpoint to trigger visibility transitions (publish/unpublish)
Opened
#16 Enforce required-field completeness when transitioning a record to Public
Opened
#17 On-write search re-index after catalogue/visibility writes
Opened
#18 Log server errors on the public API 500 paths (wire tracing in the api crate)
Opened
#19 OIDC login (external identity provider, relying-party flow)
Opened
#20 Login hardening: rate-limiting/lockout + password-strength policy
Opened
#21 Audit vocabulary/term/authority creation (admin writes currently unaudited)
Opened
#22 Return 404 (not 500) when adding a term to a non-existent vocabulary
Opened
#23 Decouple on-write search reindex from request latency (background task)
Opened
#24 OpenAPI: type object fields as an open map, not an empty object
Opened
#25 Add a Rust CI job (test + clippy + fmt + embed-web build)
Opened
#26 Pin the pnpm version for reproducible web installs
Opened
#27 Searchable term/authority picker for large vocabularies (combobox + server-side search)
Opened
#28 set_object_fields 422 should carry field-level detail (so the UI can highlight the offending field)
Opened
#29 Type enum-valued fields (visibility, data_type, authority kind) as enums in OpenAPI
Opened
#30 Backend: edit/delete endpoints for vocabularies, terms, and authorities
Opened
#31 Frontend: terms & authorities lists silently swallow load failures (no loading/error state)
Opened
#32 Frontend M4 polish: ARIA tab semantics for authority kind tabs + remove unused i18n keys
Opened
#33 Frontend: global ⌘K command-palette / omnibox search
Opened
#34 Frontend: distinguish "search unavailable" (503) from a generic search error
Opened
#35 Search enhancements: faceting, relevance tuning, and a public search endpoint
Opened
#36 Backend + frontend: edit/delete field definitions
Opened
#37 Test gaps: field-definition 403 (backend) + authority-kind reveal (frontend)
Opened
#38 OpenAPI: type SearchHitView.visibility as the Visibility enum (consistency with #29)
Opened
#39 Export a catalogue record as a PDF (offline backup + printable copy)
Opened
#40 Per-account UI language preference (cross-device persistence)
Opened
#41 localized_text edit can leave a stale other-language sub-value
Opened
#42 Frontend: render timestamps in the instance timezone (Intl), once there's a display
Opened
#43 Server-side term/authority search for the combobox picker (large vocabularies)
Opened
#44 Frontend UX: object list should be a scannable, sortable, filterable table
Opened
#45 Frontend UX: object detail renders term/authority/localized values as raw JSON
Opened
#46 Frontend UX: object form robustness — double-submit, no dirty guard, inconsistent partial-failure recovery
Opened
#47 Frontend UX: add toast notifications — mutations currently succeed silently
Opened
#48 Frontend UX: session-expiry handling loses in-progress work; auth feedback gaps
Opened
#49 Frontend design system: feature screens bypass the OKLCH tokens + ui/* kit (inconsistent visual language)
Opened
#50 Frontend UX: reference-data screens are inconsistent and hard to scan (vocab / authorities / fields)
Opened
#51 Frontend UX: replace raw <select> elements with a token-styled Select / combobox
Opened
#52 Frontend a11y: focus-visible on custom controls, route focus management, skip link, tablist/lang semantics
Opened
#53 Frontend UX: standardize loading states on Skeleton (retire "…" and empty role=status divs)
Opened
#54 Frontend UX: app header is empty — add wayfinding (section/breadcrumb, user, app name, global search)
Opened
#55 Frontend bug: LabelEditor silently drops other-language labels when editing
Opened
#56 Frontend UX: no landing overview/dashboard — add at-a-glance counts
Opened
#57 Frontend UX: typography hierarchy + a real page <h1> per route + per-route document.title
Opened
#58 Frontend UX: master-detail + sidebar layout has no responsive/small-screen handling
Opened
#59 Frontend: dark mode is half-built dead code — wire a theme toggle or remove it
Opened
#60 Frontend i18n: enforce en/sv key parity with a test
Opened
#61 Frontend UX: search result rows lack type/date meta; single thin facet; "estimated" count not flagged
Opened
#62 Frontend a11y: label-id collision, invalid table row semantics, unnamed drawer, unannounced table states
Opened
#63 Frontend data layer: silent update failures + dead/unreachable mutation error strings
Opened
#64 Frontend refactor: unify the duplicated Vocabulary + Authority CRUD surfaces
Opened
#65 Frontend: split queries.ts by domain, extract error classes, add query-key factory; decide search-invalidation
Opened
#66 Frontend design-kit consistency: dead Card, duplicated segmented-control + row/icon recipes, focusRing/useLang drift
Opened
#67 Frontend: bundle vendor-split (221 KB gz, ~29 KB headroom) + fill unit-test gaps
Opened
#68 Frontend dark mode: popup primitives + page-size select still hardcode light colors; missing theme-color/color-scheme meta
Opened
#69 Frontend a11y: focus-visible gaps on sort headers, breadcrumb links, combobox, page-size select; search result count unannounced
Opened
#70 Frontend UX: delete-object dialog allows double-submit; login button gives no in-flight feedback
Opened
#71 Frontend motion & touch: honor prefers-reduced-motion; contain overscroll in drawer/dialog
Opened
#72 Frontend UX: FieldsPage selection is not deep-linkable (state-only, inconsistent with vocab/objects routing)
Opened
#73 Frontend polish: select placeholder copy, locked-field affordance in edit mode, field-list overflow, narrow-mode sidebar toggle, heading wrap