Commit Graph

  • 684469273f feat(web): app shell with sidebar nav, language switch, sign out logaritmisk 2026-06-03 23:01:42 +02:00
  • 057a00c413 feat(web): login page with inline error handling logaritmisk 2026-06-03 22:56:17 +02:00
  • 01f43e1f67 fix(web): disable retry on useObject (404 resolves to null) logaritmisk 2026-06-03 22:53:32 +02:00
  • cf02eeb991 feat(web): TanStack Query hooks + session-guarded routes logaritmisk 2026-06-03 22:49:55 +02:00
  • 2e4187c850 test(web): reset i18n to English after the language-switch test logaritmisk 2026-06-03 22:47:27 +02:00
  • 478b4ce44e feat(web): i18n with react-i18next (sv/en) logaritmisk 2026-06-03 22:42:47 +02:00
  • 66d0624279 test(web): MSW harness with typed handlers, fixtures, and client tests logaritmisk 2026-06-03 22:35:55 +02:00
  • dcfddc88c7 feat(web): generated OpenAPI types + typed openapi-fetch client with 401 redirect logaritmisk 2026-06-03 22:25:10 +02:00
  • 5267f05089 fix(web): restore shadcn theme tokens in index.css; tidy deps + eslint rule logaritmisk 2026-06-03 22:21:58 +02:00
  • b7ec4b1041 feat(web): Tailwind 4 + shadcn/ui + ESLint logaritmisk 2026-06-03 22:14:12 +02:00
  • 8466ed4d08 chore(web): drop dangling favicon link (runtime 404) logaritmisk 2026-06-03 22:10:29 +02:00
  • f64688a16f feat(web): scaffold Vite + React + TS SPA with Vitest logaritmisk 2026-06-03 22:06:03 +02:00
  • a177b02145 docs(plan): frontend SPA milestone 1 — task-by-task implementation plan logaritmisk 2026-06-03 21:56:54 +02:00
  • 31e2a3f30a docs(spec): frontend SPA milestone 1 (foundation slice) design logaritmisk 2026-06-03 21:50:30 +02:00
  • 8cfcf07387 fix(db): publish gate fires only on transition into public, not re-set logaritmisk 2026-06-02 23:40:10 +02:00
  • e96f74f47a feat(db): enforce required-field completeness on publish (#16) logaritmisk 2026-06-02 23:36:24 +02:00
  • 4921c73fa7 style(api): import reindex into scope rather than crate::-qualify logaritmisk 2026-06-02 23:29:50 +02:00
  • d15afda9b2 feat(api): on-write search reindex after catalogue writes (#17) logaritmisk 2026-06-02 23:25:43 +02:00
  • c4e0c4c834 style(api): merge use decl; assert status + breathing room in authority test logaritmisk 2026-06-02 22:39:36 +02:00
  • 01abd5cbbc feat(api): admin authority management (create + list by kind) logaritmisk 2026-06-02 22:33:44 +02:00
  • d81b069b8f style(api): merge use decl; breathing-room blank in vocab test logaritmisk 2026-06-02 22:29:51 +02:00
  • 7a18e0e9bf feat(api): admin vocabulary + term management logaritmisk 2026-06-02 22:20:47 +02:00
  • 8b929c7180 refactor(api): descriptive closure params; exhaustive FieldError match; field-endpoint auth tests logaritmisk 2026-06-02 22:16:50 +02:00
  • b6a30c3995 feat(api): admin set flexible fields + field-definition listing logaritmisk 2026-06-02 22:09:43 +02:00
  • 34e5754815 refactor(api): read object visibility inside update tx; breathing-room nits logaritmisk 2026-06-02 22:05:54 +02:00
  • 3f4da46b78 feat(api): admin object create/update/delete (EditCatalogue, audited as user) logaritmisk 2026-06-02 21:59:14 +02:00
  • 1888e185f7 refactor(api): share Pagination across admin/public; cover get-by-id auth logaritmisk 2026-06-02 21:53:21 +02:00
  • 0055616099 feat(api): admin object read surface (paginated list + get, ViewInternal) logaritmisk 2026-06-02 21:45:53 +02:00
  • 3dc621b6dd docs(plans): admin CRUD — object lifecycle + vocab/authority management logaritmisk 2026-06-02 19:02:47 +02:00
  • 807ac1a9f8 chore: sync Cargo.lock with auth dependencies logaritmisk 2026-06-02 15:21:03 +02:00
  • 5cfee93037 merge: authentication (email/password) — sessions, extractors, admin surface, CLI bootstrap logaritmisk 2026-06-02 15:20:36 +02:00
  • 369eee4098 fix(server): --session-cookie-secure flag; scope+char-count password; invalid-email test logaritmisk 2026-06-02 15:16:46 +02:00
  • dbff95c2a9 feat(server): create-user CLI + session-store migration on startup logaritmisk 2026-06-02 15:07:58 +02:00
  • 642f709bbe fix(api): drop redundant dev-deps; fix server AppState for cookie_secure; add logout + illegal-transition tests logaritmisk 2026-06-02 15:04:07 +02:00
  • 5135aeee6c feat(api): admin auth surface (login/logout/me/users/publish) on tower-sessions logaritmisk 2026-06-02 14:54:03 +02:00
  • 4e7288731a harden(auth): distinguish session-store failure (500) from absent session (401); exhaustive marker + verify_dummy tests logaritmisk 2026-06-02 14:48:40 +02:00
  • 992526ef77 feat(auth): argon2id hashing + AuthUser/Authorized<Cap> session extractors logaritmisk 2026-06-02 14:45:13 +02:00
  • bea9b6b39a harden(db): case-insensitive email unique index + dup-email test; list_users pagination TODO; from_db note logaritmisk 2026-06-02 14:42:04 +02:00
  • f8ec2d7cf1 feat(db): users table + repository (create/by_id/by_email/list), audited logaritmisk 2026-06-02 14:37:43 +02:00
  • 9597a42eeb fix(domain): make Editor capability policy fail-closed (exhaustive match) logaritmisk 2026-06-02 14:32:13 +02:00
  • 74b2cf65ed feat(domain): user identity (UserId, Email), Role/Capability policy logaritmisk 2026-06-02 14:29:04 +02:00
  • 1ed9798a1f docs(plans): authentication (email/password) — sessions, extractors, CLI bootstrap logaritmisk 2026-06-02 14:26:19 +02:00
  • 6cd01f9b97 merge: publishing — visibility transitions, PublicView & public read API logaritmisk 2026-06-02 14:04:32 +02:00
  • 1b48f082ee chore: sync Cargo.lock after dropping api's uuid dep logaritmisk 2026-06-02 14:04:32 +02:00
  • 720c7ddbbf chore(api): drop unused uuid dep + redundant domain dev-dep; test internal exclusion + note list/count race logaritmisk 2026-06-02 13:55:01 +02:00
  • 3c4ada202f feat(api): public read API (PublicView projection, paginated list + get, OpenAPI) logaritmisk 2026-06-02 13:48:17 +02:00
  • b948cae269 refactor(db): share update path so set_visibility avoids a redundant fetch; tie public-visibility const to the enum; test internal exclusion logaritmisk 2026-06-02 13:35:36 +02:00
  • 14cdd2a04a feat(db): audited stepwise set_visibility + public-only object readers logaritmisk 2026-06-02 13:24:29 +02:00
  • 5e2ebbc8d9 test(domain): assert IllegalTransition Display message logaritmisk 2026-06-02 13:14:37 +02:00
  • 59400062ae feat(domain): stepwise Visibility state machine (transition_to + IllegalTransition) logaritmisk 2026-06-02 13:11:01 +02:00
  • 5ea1febb91 docs(plans): publishing — visibility transitions, PublicView, public read API logaritmisk 2026-06-02 12:50:31 +02:00
  • f0e00fba40 merge: search (Meilisearch full-text over catalogue objects) logaritmisk 2026-06-02 12:35:37 +02:00
  • fac4b703ff docs(search): document eventual-consistency model; drop stale Task 2 note logaritmisk 2026-06-02 12:15:18 +02:00
  • 4bafac397a docs(search): note why reindex test references db crate migrations logaritmisk 2026-06-02 12:12:12 +02:00
  • 7b91989411 feat(search): build documents resolving term/authority labels; reindex_all logaritmisk 2026-06-02 12:08:07 +02:00
  • b8d198f150 fix(search): surface failed Meilisearch tasks; make ensure_index idempotent logaritmisk 2026-06-02 11:50:58 +02:00
  • dc903989f7 feat(search): add Meilisearch-backed SearchClient (index, search, remove) logaritmisk 2026-06-02 11:43:53 +02:00
  • 851181d91d docs: add Plan 6 (Meilisearch search) implementation plan logaritmisk 2026-06-02 11:39:55 +02:00
  • 5ee9fd88f1 polish(db): clearer maker label; assert group_key and vocabularies in seed tests logaritmisk 2026-06-02 11:25:10 +02:00
  • adc7c61ee2 feat(db): seed a representative Spectrum cataloguing field set (idempotent) logaritmisk 2026-06-02 11:20:35 +02:00
  • 91a9eb2964 docs: add Spectrum cataloguing seed plan logaritmisk 2026-06-02 11:17:56 +02:00
  • f30ce9d9dc docs(db): note deferred date-format validation (#11) at the Date field arm logaritmisk 2026-06-02 11:12:00 +02:00
  • 45c1d1b123 test(db): cover authority-kind, cross-vocabulary, localized text, replace/remove, no-op, missing object logaritmisk 2026-06-02 11:07:43 +02:00
  • c94fd1638c docs(db): document set_object_fields replace semantics and required-field deferral logaritmisk 2026-06-02 11:04:45 +02:00
  • 2b0056c038 feat(db): set_object_fields with registry validation and audited diffs logaritmisk 2026-06-02 10:59:23 +02:00
  • 2aaf98794f feat(db): add object.fields jsonb column, read it into CatalogueObject logaritmisk 2026-06-02 10:54:49 +02:00
  • 7b0f804461 docs: add Plan 5 (Object flexible-field values) implementation plan logaritmisk 2026-06-02 10:52:38 +02:00
  • f4152b2102 test(db): cover any-kind authority, scalar, zero-label, and list ordering for field definitions logaritmisk 2026-06-02 10:27:06 +02:00
  • 66ad67ca77 feat(db): add field-definition registry repository logaritmisk 2026-06-02 10:21:39 +02:00
  • cbed662c18 feat(db): add field_definition tables logaritmisk 2026-06-02 10:16:30 +02:00
  • 6e27288f43 fix(domain): make FieldType::from_parts a strict inverse; reject stray bindings logaritmisk 2026-06-02 10:15:07 +02:00
  • 2242ff5ef1 feat(domain): add field definition types (FieldType, FieldDefinition) logaritmisk 2026-06-02 10:11:28 +02:00
  • da2db11a30 docs: add Plan 4 (Field-definition registry) implementation plan logaritmisk 2026-06-02 10:09:46 +02:00
  • 2938649d62 fix(db): skip UPDATE and audit on no-op object update (keep updated_at consistent) logaritmisk 2026-06-02 09:40:27 +02:00
  • a690c60ec6 refactor(db): delete_object via rows_affected; test update/delete-missing and field clearing logaritmisk 2026-06-02 09:36:44 +02:00
  • 9e1c88b294 feat(db): add catalogue object update/delete with audited field diffs logaritmisk 2026-06-02 09:32:16 +02:00
  • 616a6f05c6 refactor(db): DRY object SELECT columns, consistent date json; test date + all-none round-trip logaritmisk 2026-06-02 09:29:40 +02:00
  • e0c0187f29 feat(db): add catalogue object create/read/list with audit on create logaritmisk 2026-06-02 09:24:03 +02:00
  • 95357f01dd feat(db): non-empty CHECK constraints on object text columns logaritmisk 2026-06-02 09:21:08 +02:00
  • c1dda280e2 feat(db): add object table logaritmisk 2026-06-02 09:18:03 +02:00
  • bf332ac0ae test(domain): pin Visibility serde output to as_str logaritmisk 2026-06-02 09:16:53 +02:00
  • 266f914b88 feat(domain): add catalogue object types (Visibility, ObjectInput, CatalogueObject) logaritmisk 2026-06-02 09:13:54 +02:00
  • ed608c6e37 docs: add Plan 3 (Catalogue core) implementation plan logaritmisk 2026-06-02 09:12:41 +02:00
  • 7782bd764a test(db): zero-label authority round-trip; doc the labels-json constant logaritmisk 2026-06-02 09:01:06 +02:00
  • 6e45baa8d4 feat(db): add authority repository with multilingual labels logaritmisk 2026-06-02 08:55:50 +02:00
  • 345073b130 test(db): cover zero-label term and duplicate vocabulary key; use try_get in vocabulary_by_key logaritmisk 2026-06-02 08:52:58 +02:00
  • 5dc07ddf4c feat(db): add vocabulary/term repository with multilingual labels logaritmisk 2026-06-02 08:48:51 +02:00
  • cc1fbf5b7d feat(db): RESTRICT vocabulary deletes; non-empty label/lang constraints logaritmisk 2026-06-02 08:46:34 +02:00
  • 93d54d7783 feat(db): add vocabulary, term, and authority tables logaritmisk 2026-06-02 08:43:23 +02:00
  • d5ed2a261f feat(domain): restore must_use message; test TermRef accessors logaritmisk 2026-06-02 08:42:14 +02:00
  • 8cf737d8a9 feat(domain): id macro + vocabulary/authority/label value types logaritmisk 2026-06-02 08:38:39 +02:00
  • 42e0a5f5f1 docs: add Plan 2 (Vocabularies & authorities) implementation plan logaritmisk 2026-06-02 08:36:03 +02:00
  • cc26c96a82 chore: update Cargo.lock for audit-spine dependencies logaritmisk 2026-06-02 08:02:09 +02:00
  • 86a3a8a47c test(db): assert audit_log mutations fail via the immutability trigger logaritmisk 2026-06-02 08:01:28 +02:00
  • 45aea6b702 test(db): enforce audit_log immutability and transactional atomicity logaritmisk 2026-06-02 07:58:10 +02:00
  • c67b588188 test(db): cover delete/empty-changes/empty-history; clarify map_row naming logaritmisk 2026-06-02 07:56:05 +02:00
  • 87b016a56c feat(db): add append-only audit repository (record, history_for) logaritmisk 2026-06-02 07:52:16 +02:00
  • 01c42837d1 feat(db): also reject TRUNCATE on audit_log (statement-level trigger) logaritmisk 2026-06-02 07:49:47 +02:00
  • 152fc30116 feat(db): schema bootstrap with append-only audit_log table logaritmisk 2026-06-02 07:46:39 +02:00
  • 4c6f77b999 test(domain): pin audit serde contracts; loosen time version; note null caveat logaritmisk 2026-06-02 07:44:21 +02:00