logaritmisk and Claude Opus 4.8
b8f70212a1
feat(web): responsive object detail (pane/drawer) at canonical /objects/:id ( #44 , #58 )
...
Wide (>=1024px): right-hand pane beside the table with a close control.
Narrow: Base UI Drawer sliding from the right (lazy-loaded so its code splits
out of the main chunk). Both preserve the table's query string on close.
Remove the index SelectPrompt route (the table is the landing view) and delete
the now-unused SelectPrompt. Make table rows keyboard-activatable
(role=link, tabIndex, Enter).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 23:53:10 +02:00
logaritmisk and Claude Opus 4.8
184e4ea2a5
feat(web): collapsible icon sidebar (persisted, auto-collapse on narrow) ( #44 , #58 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 23:44:40 +02:00
logaritmisk and Claude Opus 4.8
04c33cb1aa
feat(web): useMediaQuery hook + Base UI tooltip wrapper ( #44 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 23:40:19 +02:00
logaritmisk and Claude Opus 4.8
49f694d1fb
feat(web): full-width sortable/filterable objects table with URL state ( #44 )
...
Replace the narrow ObjectList with a full-width ObjectsTable whose state
(sort/order/q/visibility/limit/offset) lives entirely in the URL via
useSearchParams. Sortable headers toggle sort+dir with aria-sort, a
debounced quick-filter and visibility chips mirror the search-panel
pattern, and a pagination footer offers prev/next + page-size select.
Rows deep-link to /objects/:id preserving the query string.
useObjectsPage now takes an ObjectListParams object (sort/order/
visibility/q) with keepPreviousData. ObjectsPage renders the table as
the full-width landing view, surfacing the nested <Outlet/> detail as a
simple right-side panel only when a :id child route is active (Phase 3
makes this responsive). object-list.tsx and its test are removed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 23:34:13 +02:00
logaritmisk and Claude Opus 4.8
98c00d3732
chore(web): regenerate API types (object list params + timestamps) ( #44 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 23:24:42 +02:00
logaritmisk and Claude Opus 4.8
60a1b8dccf
feat: object list sort/filter/quick-search (server-side, injection-safe) ( #44 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 23:21:04 +02:00
logaritmisk and Claude Opus 4.8
5efa7b8a16
feat(api): expose object created_at/updated_at in AdminObjectView ( #44 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 23:17:50 +02:00
logaritmisk and Claude Opus 4.8
e7ff817c63
docs(plans): objects data-overview table + responsive shell ( #44 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 21:58:06 +02:00
logaritmisk and Claude Opus 4.8
fb80146430
docs(specs): objects data-overview table + responsive shell ( #44 , subsumes #58 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 21:50:13 +02:00
logaritmisk and Claude Opus 4.8
b49699175d
feat(server): load .env via dotenvy on startup
...
CI / web (push) Has been cancelled
The binary now reads a .env file itself (dotenvy::dotenv() at the top of main),
so 'cargo run -p server' / the release binary pick up config without relying on
just's 'set dotenv-load'. Missing .env is a no-op.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 14:39:24 +02:00
logaritmisk and Claude Opus 4.8
e700e1d3cf
chore: add 'just run-release' (build web + run server with embed-web)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 14:30:56 +02:00
logaritmisk and Claude Opus 4.8
de035bd032
merge: searchable term/authority combobox picker ( #27 )
...
CI / web (push) Has been cancelled
Replace the native <select> for term/authority object fields with a searchable
Base UI combobox (client-side filter by active-locale label; value=id contract
preserved). Server-side ?q= search deferred to a follow-up. Closes #27 .
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 11:00:50 +02:00
logaritmisk and Claude Opus 4.8
4267aae4e5
chore(web): raise bundle budget 150→165 KB gz ( #27 )
...
The index chunk is a feature-rich admin SPA bundle (Base UI + TanStack Query +
react-hook-form + i18n); 150 KB was set early and now trips on most features.
The combobox itself lands in the lazy object-form chunk.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 10:59:12 +02:00
logaritmisk
c84b84b153
feat(web): use searchable combobox for term/authority fields on the object form ( #27 )
2026-06-06 10:41:28 +02:00
logaritmisk
0188e730e8
feat(web): searchable combobox (Base UI) for term/authority options ( #27 )
2026-06-06 10:37:01 +02:00
logaritmisk and Claude Opus 4.8
6e52a331bc
docs(plans): searchable term/authority combobox picker ( #27 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 10:24:39 +02:00
logaritmisk and Claude Opus 4.8
8e57789dd7
docs(specs): searchable term/authority combobox picker ( #27 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 10:20:26 +02:00
logaritmisk and Claude Opus 4.8
8ed747c6a7
merge: wire Spectrum seed into runtime via 'server seed' ( #14 )
...
CI / web (push) Has been cancelled
server seed subcommand (idempotent; migrates then seeds the baseline Spectrum
cataloguing vocabularies + field definitions), just seed recipe, README step.
Closes #14 .
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 07:18:40 +02:00
logaritmisk
dd02bddb07
docs: 'just seed' recipe + README seed step ( #14 )
2026-06-06 00:18:11 +02:00
logaritmisk
6ebcc10405
feat(server): 'seed' subcommand wiring the Spectrum cataloguing seed ( #14 )
2026-06-06 00:15:19 +02:00
logaritmisk and Claude Opus 4.8
325917a98e
docs(plans): wire Spectrum seed via 'server seed' subcommand ( #14 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 00:12:15 +02:00
logaritmisk and Claude Opus 4.8
d74500f901
docs(specs): wire Spectrum seed into runtime via 'server seed' ( #14 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 22:55:27 +02:00
logaritmisk and Claude Opus 4.8
7d40a2cd56
chore: use cargo-nextest as the test runner
...
- .config/nextest.toml: hang-timeout profile (warn 60s, kill 120s)
- justfile: 'just test' = cargo nextest run --workspace + cargo test --doc
- CLAUDE.md: refresh stale Status + Commands for the real workspace + nextest
163 tests run in ~7s (vs multi-minute serial cargo test).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 22:36:59 +02:00
logaritmisk and Claude Opus 4.8
873efe199f
merge: reference-data edit/delete lifecycle ( #30 + #36 )
...
CI / web (push) Has been cancelled
Backend update/delete endpoints (audited, 409+count when referenced) and in-place
frontend edit/delete UI for vocabularies (rename), terms, authorities, and field
definitions. Shared DeleteConfirmDialog; Storybook stories. Closes #30 , #36 .
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 22:30:00 +02:00
logaritmisk and Claude Sonnet 4.6
27caaa9787
test+refactor: audit-row assertions + uniform PATCH rollback (review follow-ups)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-05 21:04:09 +02:00
logaritmisk
c9120848f5
feat(web): edit/delete authorities in place ( #30 )
2026-06-05 20:35:26 +02:00
logaritmisk
83ca506702
feat(web): rename vocabularies + edit/delete terms in place ( #30 )
2026-06-05 20:32:35 +02:00
logaritmisk
65ca79f2bd
feat(web): edit/delete field definitions on /fields (in-place edit pane) ( #36 )
2026-06-05 20:24:57 +02:00
logaritmisk
194f18c8ed
feat(web): reusable DeleteConfirmDialog with in-use handling + stories
2026-06-05 20:12:23 +02:00
logaritmisk
282e6430d4
feat(web): mutation hooks + InUseError + i18n for reference-data edit/delete
2026-06-05 20:06:23 +02:00
logaritmisk and Claude Opus 4.8
78c950d2ee
chore(web): regenerate API types for reference-data edit/delete
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 20:04:03 +02:00
logaritmisk and Claude Sonnet 4.6
3e7c6ad712
feat: edit/delete field definitions — audited, blocked when in use ( #36 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-05 19:58:38 +02:00
logaritmisk
47240dafcc
feat: edit/delete authorities, blocked when referenced ( #30 )
2026-06-05 19:53:20 +02:00
logaritmisk
83a7202861
feat: rename + delete vocabularies, blocked when in use ( #30 )
2026-06-05 19:41:39 +02:00
logaritmisk and Claude Sonnet 4.6
09baf2949f
feat: edit/delete terms — audited, blocked when referenced ( #30 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-05 19:30:24 +02:00
logaritmisk and Claude Opus 4.8
f6053068be
docs(plans): reference-data edit/delete lifecycle ( #30 + #36 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 18:30:55 +02:00
logaritmisk and Claude Opus 4.8
e58b150ab2
docs(specs): reference-data edit/delete lifecycle ( #30 + #36 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 18:15:53 +02:00
logaritmisk and Claude Opus 4.8
e7ae41362e
chore: add 'just storybook' recipe
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 17:00:09 +02:00
logaritmisk and Claude Opus 4.8
ffcfb41c7e
merge: set up Storybook (preview + MSW + stories for real components)
...
CI / web (push) Has been cancelled
Storybook 10.4.2 (react-vite) with the addon-vitest/a11y/docs/mcp addons.
.storybook/preview.tsx wired to the real provider tree (QueryClient + ConfigProvider
+ MemoryRouter), real CSS + i18n, and MSW reusing src/test/handlers.ts. 8 colocated
stories for real components (Button/Badge/Input/Checkbox/VisibilityBadge/LabelEditor/
Highlight/SearchResultRow) incl. one CssCheck. Boilerplate removed.
112 web tests (existing 85 survived + 27 storybook); typecheck/lint/build clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 16:58:08 +02:00
logaritmisk
b2d026f217
feat(web): set up Storybook (preview + MSW + stories for real components)
2026-06-05 16:55:40 +02:00
logaritmisk and Claude Opus 4.8
4e1138f8ce
merge: follow-ups batch ( #38 #28 #41 #26 )
...
CI / web (push) Has been cancelled
#38 enum-type SearchHitView.visibility + tighten VisibilityBadge prop.
#28 set_fields 422 carries the offending field (FieldErrorView); the object form
highlights it (both direct-edit and create-redirect paths name the field).
#41 normalize localized_text values to the default language on save.
#26 pin pnpm via packageManager + align CI to pnpm 11.
85 web tests; api suite green; bundle 145.8 KB gz; en/sv parity.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 15:54:04 +02:00
logaritmisk and Claude Sonnet 4.6
e6fc3eaf2c
build(web): pin pnpm via packageManager + align CI to pnpm 11 ( #26 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-05 15:50:40 +02:00
logaritmisk and Claude Sonnet 4.6
b4d71b0f80
fix(web): VisibilityBadge typed to the union ( #38 ); normalize localized_text to default language on save ( #41 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-05 15:46:48 +02:00
logaritmisk and Claude Sonnet 4.6
0a29127f7e
fix(web): name the field in the edit banner on create->fields-error redirect ( #28 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-05 15:43:35 +02:00
logaritmisk and Claude Sonnet 4.6
0c9db7bcdb
feat(web): highlight the offending field on a set_fields 422 ( #28 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-05 15:39:49 +02:00
logaritmisk and Claude Sonnet 4.6
d6dc1c9b57
feat(api): field-level set_fields 422 body ( #28 ); enum-type SearchHitView.visibility ( #38 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-05 15:32:48 +02:00
logaritmisk and Claude Opus 4.8
cd3606c0e9
docs(plans): follow-ups batch ( #38 #28 #41 #26 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 15:29:35 +02:00
logaritmisk and Claude Opus 4.8
260eac903e
merge: instance locale (env) + single-language content authoring
...
CI / web (push) Has been cancelled
DEFAULT_LANGUAGE/DEFAULT_TIMEZONE env config surfaced via public GET /api/config;
SPA config provider defaults the UI language from the instance (overridable per
browser). Content authoring collapsed to a single language (LabelEditor +
localized_text) at the instance default. The multilingual content SCHEMA is left
completely untouched (dormant) — re-enabling is UI-only, zero migration. Storage
stays UTC; timezone exposed for future display/PDF use.
81 web tests; full backend green; bundle 145.7 KB gz; en/sv parity 106/106.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 15:16:12 +02:00
logaritmisk and Claude Sonnet 4.6
9d0475e8ec
feat(web): single-language content authoring (LabelEditor + localized_text at default lang)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-05 15:05:20 +02:00
logaritmisk and Claude Sonnet 4.6
04e9c95c52
refactor(web): split config hook/context (.ts) from provider (.tsx) to clear react-refresh lint
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-05 15:01:33 +02:00
logaritmisk and Claude Sonnet 4.6
de11292203
feat(web): config provider — fetch /api/config, default UI language from instance
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-05 14:58:01 +02:00
logaritmisk
825b23adec
test(server): assert default_language/default_timezone config defaults
2026-06-05 14:55:37 +02:00
logaritmisk
2460a1368d
feat: DEFAULT_LANGUAGE/DEFAULT_TIMEZONE config + public GET /api/config
2026-06-05 14:52:09 +02:00
logaritmisk and Claude Opus 4.8
4a76d6043a
docs(plans): instance locale + single-language content authoring (4 tasks)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 14:29:40 +02:00
logaritmisk and Claude Opus 4.8
0f43c75b24
docs(specs): instance locale (env) + single-language content authoring
...
Keep the multilingual content schema (dormant); simplify authoring inputs to one
language. Default language + timezone via env vars (no settings table). Public
/api/config endpoint surfaces them to the SPA. Per-account UI language deferred.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-05 14:23:32 +02:00
logaritmisk and Claude Opus 4.8
3c6a41a80a
merge: tier 4 hardening batch 1 ( #1 #2 #21 )
...
#1 graceful shutdown on SIGINT/SIGTERM (axum with_graceful_shutdown).
#2 configurable DB pool size (--db-max-connections / DB_MAX_CONNECTIONS, default 5).
#21 audit vocabulary/term/authority creation atomically, attributing the acting
user; ~15 call sites threaded an AuditActor.
173 workspace tests; clippy + fmt clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 22:10:13 +02:00
logaritmisk and Claude Sonnet 4.6
146e0164e7
refactor(db): name audit entity_type constants for vocab/term/authority ( #21 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 22:05:06 +02:00
logaritmisk and Claude Sonnet 4.6
984be697ac
feat: audit vocabulary/term/authority creation, attributing the acting user ( #21 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 21:54:50 +02:00
logaritmisk and Claude Sonnet 4.6
7181437625
feat(server): configurable DB pool size via --db-max-connections/DB_MAX_CONNECTIONS ( #2 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 21:46:41 +02:00
logaritmisk
7e235ffd3e
feat(server): graceful shutdown on SIGINT/SIGTERM ( #1 )
2026-06-04 21:42:55 +02:00
logaritmisk and Claude Opus 4.8
b0d2c247df
docs(plans): tier 4 hardening batch 1 ( #1 #2 #21 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 21:41:29 +02:00
logaritmisk and Claude Opus 4.8
e9a5a10524
chore: sync Cargo.lock — domain gains utoipa (tier 3 #3 )
...
CI / web (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 20:26:21 +02:00
logaritmisk and Claude Opus 4.8
df113bd7ac
merge: tier 3 typed-client ( #3 #24 #29 )
...
Decision #3 = Option A (utoipa::ToSchema allowed in domain, no I/O deps).
domain: ToSchema on Visibility/AuthorityKind + new DataType enum.
api: open-map fields (#24 ); enum value_types for visibility/data_type/kind (#29 );
domain enums registered in OpenAPI; client regenerated. Frontend: dropped the
now-redundant fields/visibility casts. Wire format unchanged; schema diff additive.
domain 26 + api 41 + web 78 tests; bundle 145.5 KB gz.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 20:25:54 +02:00
logaritmisk and Claude Sonnet 4.6
0ee3b970cb
refactor(web): drop redundant fields/visibility casts now the client is typed ( #24 #29 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 20:20:13 +02:00
logaritmisk and Claude Sonnet 4.6
5a72f85989
feat(api): enum-typed visibility/data_type/kind + open-map fields in OpenAPI ( #24 #29 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 20:14:30 +02:00
logaritmisk and Claude Sonnet 4.6
d3c33a6c5d
feat(domain): derive ToSchema on Visibility/AuthorityKind; add DataType enum ( #3 Option A)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 20:08:41 +02:00
logaritmisk and Claude Opus 4.8
331a6d7f34
docs(plans): tier 3 typed-client ( #3 Option A, #24 , #29 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 20:06:27 +02:00
logaritmisk and Claude Opus 4.8
0d971cda15
merge: tier 2 papercuts ( #22 #18 #9 #4 #34 #31 #32 #37 )
...
CI / web (push) Has been cancelled
Backend: add_term FK→404 (#22 ); log discarded errors on public 500 paths (#18 );
enum↔CHECK cross-ref comments (#9 ); drop dead clone + harden serve smoke test (#4 ).
Frontend: search 503 'unavailable' vs generic error (#34 ); loading/error states on
terms & authorities lists (#31 ); authority kind-tab ARIA + dead i18n key removal
(#32 ); authority-kind reveal test (#37 ).
78 web tests; 72 backend tests; bundle 145.5 KB gz.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 17:39:35 +02:00
logaritmisk and Claude Sonnet 4.6
914527edc6
fix(web): place aria-selected on the role=tab element ( #32 ) + assert it
...
Per WAI-ARIA, aria-selected must be on the same element carrying role="tab".
The previous impl placed it on an inner <span> via the render-prop, making it
invisible to assistive technology. Move both role="tab" and aria-selected to
the NavLink, compute currentKind once from useParams, drop the render-prop.
Add a Vitest assertion that the selected tab has aria-selected="true" and an
unselected tab has aria-selected="false".
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 17:32:18 +02:00
logaritmisk
ff513e1712
fix(web): search 503 vs error ( #34 ); terms/authorities list error states ( #31 ); authority-tab a11y + dead keys ( #32 ); authority-kind test ( #37 )
2026-06-04 17:28:01 +02:00
logaritmisk and Claude Sonnet 4.6
1a91b8a242
chore: cross-ref enum/CHECK constraints ( #9 ); drop dead clone + harden smoke test ( #4 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 17:21:33 +02:00
logaritmisk and Claude Sonnet 4.6
2bce469ed2
fix(api): 404 when adding a term to a missing vocabulary ( #22 ); log public 500s ( #18 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 17:17:35 +02:00
logaritmisk and Claude Opus 4.8
fbb7a297a6
docs(plans): tier 2 papercuts — #22/#18/#9/#4/#34/#31/#32/#37
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 17:14:39 +02:00
logaritmisk
8442afbf02
chore: gitignore local docker-compose.override.yml
CI / web (push) Has been cancelled
2026-06-04 14:56:21 +02:00
logaritmisk and Claude Opus 4.8
869a2c6e50
docs(dev): Running locally + tests README; add Meilisearch to compose; env defaults
...
Single docker compose (Postgres + Meilisearch) for dev and tests. .env.example
now works out-of-the-box (SESSION_COOKIE_SECURE=false for http://localhost login;
MEILI_* matching compose).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 14:52:34 +02:00
logaritmisk and Claude Opus 4.8
126f84962a
merge: fields management — create field definitions (endpoint + /fields UI)
...
CI / web (push) Has been cancelled
POST /api/admin/field-definitions (EditCatalogue) over the existing db layer,
validated through FieldType::from_parts (422 on inconsistent type/binding),
dup key -> 409, nonexistent vocabulary / empty key -> 422. /fields two-pane
screen: grouped list + create form with conditional vocabulary/authority-kind
selects, reused LabelEditor; creating a field invalidates the shared
[field-definitions] cache so it appears in the object editor too. Fields nav
enabled — no disabled nav stubs remain.
api tests green (8 admin_fields + suite); web 72 tests; bundle 145.4 KB gz.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 14:36:14 +02:00
logaritmisk
daad9438ba
fix(api): map CHECK-constraint violation (empty key) to 422
2026-06-04 14:35:56 +02:00
logaritmisk and Claude Sonnet 4.6
fd1c22191b
polish(web): fields form resets error, shared labelText, drop dead nav.soon, a11y required marker, Other group last
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 14:29:25 +02:00
logaritmisk and Claude Sonnet 4.6
37c80121ed
feat(web): /fields two-pane screen (grouped list + create form) + nav (no stubs left)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 14:22:57 +02:00
logaritmisk and Claude Sonnet 4.6
6ad1304efd
feat(web): useCreateFieldDefinition mutation + MSW handler
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 14:16:55 +02:00
logaritmisk and Claude Sonnet 4.6
df8f31d14d
fix(api): map nonexistent-vocabulary FK violation to 422; cover term/authority create paths
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 14:15:19 +02:00
logaritmisk and Claude Sonnet 4.6
b508273a52
feat(api): POST /api/admin/field-definitions (create field definition)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 14:09:08 +02:00
logaritmisk and Claude Opus 4.8
b490db13b1
docs(plans): fields management — POST endpoint + /fields UI, 4 tasks
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 13:50:30 +02:00
logaritmisk and Claude Opus 4.8
19408f6282
docs(specs): fields management — POST field-definitions + /fields two-pane UI
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 13:35:18 +02:00
logaritmisk and Claude Opus 4.8
2d0b76ab34
merge: frontend M5 — full-text search (endpoint + /search UI)
...
CI / web (push) Has been cancelled
GET /api/admin/search backed by Meilisearch (highlighted hits, visibility
filter, offset/limit, estimated total; 503 when search unconfigured). /search
two-pane screen: debounced query, visibility pills, URL-synced + bookmarkable,
infinite 'Load more', XSS-safe sentinel highlighting, ObjectDetail reuse for
the detail pane. Search nav enabled (only Fields remains stubbed).
Backend search+api tests green; web 68 tests; bundle 145.1 KB gz.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 12:54:12 +02:00
logaritmisk and Claude Sonnet 4.6
4dd00362b8
polish(web): search pill aria-pressed, keepPreviousData, plural result count, URL-hydration test
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 12:47:38 +02:00
logaritmisk and Claude Sonnet 4.6
358d793e44
feat(web): /search two-pane screen (debounced query, visibility filter, load more) + nav
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 12:40:46 +02:00
logaritmisk
ee65b27595
feat(web): Highlight (XSS-safe) + SearchResultRow components
2026-06-04 12:34:27 +02:00
logaritmisk
de830999d4
test(web): embed highlight sentinels in search fixture snippet
2026-06-04 12:32:23 +02:00
logaritmisk and Claude Sonnet 4.6
18ed9bd947
feat(web): useSearch infinite query + useDebouncedValue + MSW search handler
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 12:29:11 +02:00
logaritmisk and Claude Sonnet 4.6
90a1539090
test(api): cover search visibility-filter narrowing; note pagination cap rationale
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 12:26:38 +02:00
logaritmisk and Claude Sonnet 4.6
a87501b902
feat(api): GET /api/admin/search endpoint + regenerated client types
...
Expose full-text search over catalogue objects via a new admin endpoint
backed by the Meilisearch SearchClient. Validates visibility filter values,
short-circuits on empty queries, clamps pagination, and returns 503 when
search is not configured. Registered in OpenAPI; schema.d.ts regenerated.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 11:48:32 +02:00
logaritmisk and Claude Sonnet 4.6
9b1771d584
refactor(search): document+guard visibility filter precondition; drop redundant dev-dep
...
- Remove serde_json from [dev-dependencies] (already in [dependencies])
- Add debug_assert! in search_objects visibility filter as defense-in-depth
- Extend search_objects doc-comment with visibility precondition
- Clarify estimated_total_hits.unwrap_or(0) is safe under offset/limit pagination
- Add brief comment on with_crop_length(20) explaining ~20-word context window
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 11:19:46 +02:00
logaritmisk and Claude Sonnet 4.6
84c4c2807b
feat(search): search_objects returns highlighted hits + estimated total
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 10:46:54 +02:00
logaritmisk and Claude Opus 4.8
38e4525404
docs(plans): frontend M5 search — backend endpoint + /search UI, 6 tasks
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 10:27:59 +02:00
logaritmisk and Claude Opus 4.8
a9208f56fe
docs(specs): frontend M5 search — endpoint + /search two-pane UI design
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 10:17:29 +02:00
logaritmisk and Claude Opus 4.8
18a19eec16
merge: frontend M4 — vocabulary & authority management (create+list)
...
Vocabularies two-pane screen (list/create + per-vocab terms/add), Authorities
kind-tabbed screen (list/create), shared sv/en LabelEditor, 4 new query hooks,
nav enabled for both surfaces. 57 tests, bundle 143.1 KB gz.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 09:42:39 +02:00
logaritmisk and Claude Sonnet 4.6
352d899fa5
fix(web): authorities unknown-kind redirect, extract labelText util, EN-required test
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 09:39:15 +02:00
logaritmisk and Claude Sonnet 4.6
38673e52ba
feat(web): authorities kind-tabbed screen (list/create) + nav
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-04 09:32:57 +02:00
logaritmisk
02e4f34a1b
fix(web): vocab form-level error states, newVocabulary heading, id guard, EN-required test
2026-06-04 09:29:51 +02:00