logaritmisk
390f6897a8
merge: bundle vendor-split + test-gap fills ( #67 )
CI / web (push) Successful in 5m13s
2026-06-09 13:48:46 +02:00
logaritmisk
8b881f369b
test(web): add a Storybook story for the combobox primitive ( #67 )
2026-06-09 12:32:06 +02:00
logaritmisk
aef5000543
test(web): cover prune-fields, labels, format-date, delete-in-use dialog ( #67 )
2026-06-09 12:28:48 +02:00
logaritmisk
878db9a37b
build(web): split framework deps into cache-stable vendor chunks ( #67 )
2026-06-09 12:24:47 +02:00
logaritmisk
0b44bc0855
docs(plans): bundle vendor-split + test gaps — 3-task plan ( #67 )
2026-06-09 12:16:23 +02:00
logaritmisk
79ee402b33
docs(specs): bundle vendor-split + test-gap fills ( #67 )
2026-06-09 12:09:02 +02:00
logaritmisk
64f35e5a57
merge: fix CI — Node 22, Playwright install, deterministic pending-state tests, testTimeout ( #25 )
CI / web (push) Successful in 7m32s
2026-06-09 11:57:32 +02:00
logaritmisk and Claude Opus 4.8
3aff10557c
ci: make the logout pending-state test deterministic (gate, not delay)
...
CI / web (push) Successful in 4m35s
Same timing-window race as object-new-page: the 50ms delay let the logout
resolve (menu unmounts on me=null) before findByText caught 'Signing out…'
on the slow CI runner. Hold the logout open with a promise released only
after the pending state is asserted.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 11:51:35 +02:00
logaritmisk and Claude Opus 4.8
e8fe24f755
ci: raise vitest testTimeout to 20s for the resource-constrained runner
...
CI / web (push) Failing after 3m50s
The 'narrow: detail renders inside a portaled drawer' test lazy-loads the
drawer chunk and exceeded the 5s default on the slow CI container (setup
alone took ~486s). Bump testTimeout on both vitest projects.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 11:44:30 +02:00
logaritmisk and Claude Opus 4.8
fc170ccf10
ci: install Playwright chromium for the storybook vitest project; deterministic in-flight test
...
CI / web (push) Failing after 4m5s
- CI runs the @vitest/browser-playwright (storybook) project, which needs the
chromium browser downloaded — add 'playwright install --with-deps chromium'.
- object-new-page in-flight test held the create mutation open with a 50ms
delay and raced the pending-state assertion (failed under CI timing); gate it
on a promise released only after asserting 'saving…', so it's deterministic.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 11:37:20 +02:00
logaritmisk and Claude Opus 4.8
3ae9d87e6e
ci: bump Node 20 → 22 so pnpm 11 (needs Node ≥22.13) runs
...
CI / web (push) Failing after 2m25s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-09 11:29:58 +02:00
logaritmisk
3dbede6bc2
and use correct container image
CI / web (push) Failing after 55s
2026-06-09 11:25:18 +02:00
logaritmisk
ba238ca962
run ci on correct runner
CI / web (push) Failing after 4s
2026-06-09 11:24:08 +02:00
logaritmisk
7cabebc338
merge: design-kit consistency — useLang, class recipes, kit adoption ( #66 )
CI / web (push) Has been cancelled
2026-06-09 00:02:33 +02:00
logaritmisk and Claude Opus 4.8
74cde67a54
refactor(web): kit consistency — focusRing, PageTitle, Badge, size-4, icon buttons ( #66 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 23:49:35 +02:00
logaritmisk
900f85f8ac
refactor(web): adopt useLang + segmentClass/rowStateClass across sites ( #66 )
2026-06-08 23:45:24 +02:00
logaritmisk
00a7ce772e
feat(web): useLang + segmentClass/rowStateClass helpers; delete dead Card ( #66 )
2026-06-08 23:41:08 +02:00
logaritmisk
71dee23028
docs(plans): design-kit consistency — 3-task plan ( #66 )
2026-06-08 23:31:35 +02:00
logaritmisk
91716e628a
docs(specs): design-kit consistency — useLang, class recipes, kit adoption ( #66 )
2026-06-08 22:32:34 +02:00
logaritmisk
002af9d1f8
merge: split queries.ts — errors + key factory + domain modules; invalidate search on object writes ( #65 )
CI / web (push) Has been cancelled
2026-06-08 22:26:41 +02:00
logaritmisk
d8d8035850
refactor(web): split queries.ts into api/queries/ domain modules behind a barrel ( #65 )
2026-06-08 21:35:02 +02:00
logaritmisk and Claude Opus 4.8
704b159d48
refactor(web): central query-key factory + invalidate search on object writes ( #65 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 21:30:57 +02:00
logaritmisk
c1bddb47c4
refactor(web): extract API error classes to api/errors.ts ( #65 )
2026-06-08 21:27:21 +02:00
logaritmisk
a21ab85576
docs(plans): split queries.ts — 3-task plan ( #65 )
2026-06-08 20:46:29 +02:00
logaritmisk
7ddf6967ce
docs(specs): split queries.ts — errors + key factory + domain modules ( #65 )
2026-06-08 20:37:11 +02:00
logaritmisk
404cf67f35
merge: unify vocabulary + authority CRUD into shared components ( #64 )
CI / web (push) Has been cancelled
2026-06-08 20:22:36 +02:00
logaritmisk
50d2512123
refactor(web): term/authority rows + pages adopt shared CRUD components ( #64 )
2026-06-08 20:16:17 +02:00
logaritmisk
c689b8c0e9
feat(web): shared FilteredRecordList component ( #64 )
2026-06-08 20:11:29 +02:00
logaritmisk
acdaf8d07f
feat(web): shared LabelledRecordCreateForm component ( #64 )
2026-06-08 20:08:10 +02:00
logaritmisk
77c56f7a9d
feat(web): shared LabelledRecordRow component ( #64 )
2026-06-08 20:05:05 +02:00
logaritmisk
030472c2da
docs(plans): unify vocab + authority CRUD — 4-task plan ( #64 )
2026-06-08 19:56:42 +02:00
logaritmisk
f1eb6a9ba5
docs(specs): unify vocabulary + authority CRUD ( #64 )
2026-06-08 19:52:35 +02:00
logaritmisk
285a1323ad
merge: accessibility defect bundle — label-id, table rows, drawer/breadcrumb names, announced states ( #62 )
CI / web (push) Has been cancelled
2026-06-08 19:47:58 +02:00
logaritmisk
da3e078fbc
fix(web): objects-table a11y — real-link rows, pill focus ring, announced load/error ( #62 )
2026-06-08 19:07:00 +02:00
logaritmisk
0def81ab42
fix(web): a11y labelling — useId, named drawer/breadcrumb, translated combobox ( #62 )
2026-06-08 19:00:28 +02:00
logaritmisk
546680017d
docs(plans): a11y defect bundle — 2-task plan ( #62 )
2026-06-08 18:52:21 +02:00
logaritmisk
3efb7e175d
docs(specs): accessibility defect bundle ( #62 )
2026-06-08 18:49:27 +02:00
logaritmisk
56076c4daa
merge: consistent status-aware mutation error feedback ( #63 )
CI / web (push) Has been cancelled
2026-06-08 18:41:37 +02:00
logaritmisk
aeb1b084d9
feat(web): adopt MutationError across create/object forms; distinguish edit-form fetch error ( #63 )
2026-06-08 17:32:36 +02:00
logaritmisk
6e02ac874f
feat(web): inline status-aware errors on term/authority edit rows + delete dialog ( #63 )
2026-06-08 17:27:02 +02:00
logaritmisk
dd131ee740
feat(web): mutations throw HttpError(status) so failures are status-aware ( #63 )
2026-06-08 17:21:50 +02:00
logaritmisk
cad5a980c5
feat(web): shared status-aware error-message helper + MutationError component ( #63 )
2026-06-08 17:17:14 +02:00
logaritmisk
17bfd3e9d8
docs(plans): mutation error feedback — 4-task plan ( #63 )
2026-06-08 16:43:10 +02:00
logaritmisk
d90aa75468
docs(specs): consistent status-aware mutation error feedback ( #63 )
2026-06-08 16:22:45 +02:00
logaritmisk
7a43f794e5
merge: session-expiry soft redirect + auth feedback ( #48 )
CI / web (push) Has been cancelled
2026-06-08 15:13:03 +02:00
logaritmisk
af3f1a5367
feat(web): return-to-destination on auth redirect; logout pending state ( #48 )
2026-06-08 15:06:50 +02:00
logaritmisk
ec6e90ef5b
feat(web): login reason banner + return-to + empty-field guard ( #48 )
2026-06-08 15:02:55 +02:00
logaritmisk
3c59f47f81
feat(web): soft-redirect to login on 401 via a navigate bridge ( #48 )
2026-06-08 14:58:25 +02:00
logaritmisk
76f65a95dd
docs(plans): session-expiry soft redirect — 3-task plan ( #48 )
2026-06-08 14:56:44 +02:00
logaritmisk
a0aab6571f
docs(specs): session-expiry soft redirect + auth feedback ( #48 )
2026-06-08 14:52:16 +02:00
logaritmisk
6e72f24f0a
merge: group object-form flexible fields by definition group ( #45 follow-up)
CI / web (push) Has been cancelled
2026-06-08 14:21:00 +02:00
logaritmisk and Claude Sonnet 4.6
d447e2d8a8
feat(web): group object-form flexible fields by definition group ( #45 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-08 14:03:33 +02:00
logaritmisk and Claude Sonnet 4.6
a9a0c4d477
refactor(web): extract groupDefinitions helper; object-detail uses it ( #45 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-08 13:58:12 +02:00
logaritmisk
c0c86a5859
docs(plans): object-form field grouping — 2-task plan ( #45 )
2026-06-08 13:56:07 +02:00
logaritmisk
faca2670a4
docs(specs): object-form flexible-field grouping via shared helper ( #45 follow-up)
2026-06-08 13:54:53 +02:00
logaritmisk
c68bbb9460
merge: search-row recording_date + softened estimated count ( #61 )
CI / web (push) Has been cancelled
2026-06-08 13:49:31 +02:00
logaritmisk
30da072d96
feat(web): show recording_date on search rows; flag estimated count as approximate ( #61 )
2026-06-08 13:45:35 +02:00
logaritmisk and Claude Opus 4.8
1cdfa21259
feat(search): index + return recording_date on search hits ( #61 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 13:41:17 +02:00
logaritmisk
d37ac821f0
docs(plans): search-row recording_date + count copy — 2-task plan ( #61 )
2026-06-08 13:38:13 +02:00
logaritmisk
150ca63fc0
docs(specs): search-row recording_date + softened estimated count ( #61 )
2026-06-08 10:03:15 +02:00
logaritmisk
d082836529
merge: a11y — focus rings, route focus, skip link, honest semantics, html lang ( #52 )
CI / web (push) Has been cancelled
2026-06-08 09:54:17 +02:00
logaritmisk
69d3d2be15
feat(web): skip link + route focus management + html lang sync ( #52 )
2026-06-08 09:46:17 +02:00
logaritmisk
57504c941d
feat(web): focus-visible rings on custom controls; honest authority links + lang group ( #52 )
2026-06-08 09:42:33 +02:00
logaritmisk
4530004d87
docs(plans): a11y focus/route/skip/semantics — 2-task plan ( #52 )
2026-06-08 09:39:28 +02:00
logaritmisk
1948d09d16
docs(specs): a11y — focus rings, route focus, skip link, honest semantics, html lang ( #52 )
2026-06-08 09:36:44 +02:00
logaritmisk
4c24f0387c
merge: enforce en/sv i18n key parity test ( #60 )
CI / web (push) Has been cancelled
2026-06-08 09:31:14 +02:00
logaritmisk and Claude Opus 4.8
0209638552
docs: consolidate frontend guardrails + test-harness gotchas
...
CI / web (push) Has been cancelled
Adds web/GUARDRAILS.md capturing the recurring CI-guardrail and
test-harness lessons in one place: the check:size (250 KB-gz largest
chunk) and check:colors (design-token) guards, the jsdom/storybook
vitest split, MSW onUnhandledRequest:"error" overrides, RTL
accessible-name collisions, Storybook nested-router/portal handling,
and the components/ui code-style split. Wires a pointer from CLAUDE.md.
All claims verified against the live scripts, ci.yaml, and src/test/.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 09:21:16 +02:00
logaritmisk
2b6ea1b4a4
test(web): enforce en/sv i18n key parity + non-empty values ( #60 )
2026-06-08 09:15:35 +02:00
logaritmisk
3575282dc2
merge: reference-data scannability + parity — sort/filter/external_uri/counts ( #50 )
CI / web (push) Has been cancelled
2026-06-08 09:10:33 +02:00
logaritmisk
882d0c828f
feat(web): field-list filter, within-group label sort, group order, count badges ( #50 )
2026-06-08 09:06:17 +02:00
logaritmisk and Claude Opus 4.8
75e7cf9047
feat(web): authorities sort+filter, create external_uri, external_uri in rows, url input ( #50 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 09:02:13 +02:00
logaritmisk and Claude Opus 4.8
76b2cbde1d
feat(web): vocab list/terms sort+filter, external_uri in rows, rename guard, url input ( #50 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 08:57:52 +02:00
logaritmisk
6c2fa63cac
feat(web): collator sort helpers + ExternalUriLink + filter/uri i18n ( #50 )
2026-06-08 08:54:04 +02:00
logaritmisk
a4fb05a175
docs(plans): reference-data scannability + parity — 4-task plan ( #50 )
2026-06-08 08:18:58 +02:00
logaritmisk
0678cefd13
docs(specs): reference-data scannability + parity (sort/filter/uri/counts) ( #50 )
2026-06-08 07:37:40 +02:00
logaritmisk
53c98102d2
merge: standardize loading states on shared Skeleton recipes ( #53 )
CI / web (push) Has been cancelled
2026-06-08 06:58:28 +02:00
logaritmisk
0d4026a968
feat(web): standardize loading on shared skeleton recipes; retire '…' + empty status divs ( #53 )
2026-06-08 06:50:57 +02:00
logaritmisk
d0da77a004
feat(web): shared loading skeleton recipes (List/Form/AppShell) + common.loading ( #53 )
2026-06-08 06:46:24 +02:00
logaritmisk
6bce1e6782
docs(plans): loading skeletons — 2-task plan ( #53 )
2026-06-08 06:27:38 +02:00
logaritmisk
506bfd63dd
docs(specs): standardize loading states on Skeleton recipes ( #53 )
2026-06-08 06:22:25 +02:00
logaritmisk
f45f1d8807
merge: token-styled ui/Select replacing raw selects ( #51 )
CI / web (push) Has been cancelled
2026-06-08 06:09:23 +02:00
logaritmisk and Claude Opus 4.8
ede32551be
feat(web): field-form selects use ui/Select; rewrite select tests ( #51 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 06:03:54 +02:00
logaritmisk and Claude Sonnet 4.6
71d899cbdc
feat(web): object-form visibility uses ui/Select ( #51 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-08 06:00:21 +02:00
logaritmisk
09e9b3f4d4
feat(web): ui/select Base UI Select wrapper matching Input + story ( #51 )
2026-06-08 05:54:46 +02:00
logaritmisk
e54ea89b1e
docs(plans): token-styled select — 3-task plan ( #51 )
2026-06-08 05:50:00 +02:00
logaritmisk
3782120b49
docs(specs): token-styled ui/Select replacing raw selects ( #51 )
2026-06-08 05:47:08 +02:00
logaritmisk
28e444c6c5
merge: object form robustness — data router, dirty guard, validation, batch entry ( #46 )
CI / web (push) Has been cancelled
2026-06-07 23:41:23 +02:00
logaritmisk and Claude Opus 4.8
d3ee4365e0
feat(web): unify create/edit partial-failure recovery with 'created' banner ( #46 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:31:15 +02:00
logaritmisk and Claude Opus 4.8
e18cad9c6a
feat(web): unsaved-changes guard (useBlocker + beforeunload) on the object form ( #46 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:26:15 +02:00
logaritmisk and Claude Opus 4.8
537b847acb
feat(web): code-aware field errors + min count validation ( #46 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:20:30 +02:00
logaritmisk and Claude Opus 4.8
3900bc362c
feat(web): disable submit while saving + Save & create another + Cmd/Ctrl+Enter ( #46 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:15:21 +02:00
logaritmisk and Claude Opus 4.8
ed0c13907c
refactor(web): migrate to data router (createBrowserRouter) to enable useBlocker ( #46 )
...
Convert app.tsx route tree verbatim to a module-level data router via
createRoutesFromElements + RouterProvider, and the test harness to
createMemoryRouter + RouterProvider. The search NavLink-click test now mounts
its routes as real data-router routes so RouterProvider intercepts the link
(descendant <Routes> under a catch-all let it fall through to a jsdom navigation).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:07:03 +02:00
logaritmisk and Claude Opus 4.8
f3881e8c7c
build(web): upgrade Vitest 3→4 (browser-playwright provider) ( #46 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:03:21 +02:00
logaritmisk
6ed137f49e
docs(plans): object form robustness — 5-task plan ( #46 )
2026-06-07 21:18:53 +02:00
logaritmisk
e005e76f5b
docs(specs): object form robustness — data router, dirty guard, partial-failure, validation ( #46 )
2026-06-07 21:14:01 +02:00
logaritmisk
b7242caf51
merge: app header wayfinding — breadcrumb, user menu, search, app_name brand ( #54 )
CI / web (push) Has been cancelled
2026-06-07 19:45:23 +02:00
logaritmisk and Claude Opus 4.8
6efe09d40c
feat(web): assemble header — breadcrumb, search, user menu; remove standalone sign out ( #54 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 19:27:43 +02:00
logaritmisk
5c8fe3cd81
feat(web): UserMenu (email/role + sign out) + HeaderSearch components ( #54 )
2026-06-07 19:23:43 +02:00
logaritmisk
4b55218c69
feat(web): set breadcrumb trails on all AppShell routes ( #54 )
2026-06-07 19:18:43 +02:00
logaritmisk
af6004f731
refactor(web): remove eslint-disable from useBreadcrumb via ref ( #54 )
2026-06-07 19:15:03 +02:00