Commit Graph

  • 1d3a3b3338 refactor(audit): extract groupChangePayload() from adminUpdateUser Marcel 2026-04-26 15:33:30 +02:00
  • 77affcfb4f test(audit): integration test — create + delete user produces ordered audit entries Marcel 2026-04-26 15:05:09 +02:00
  • 36529f7e11 feat(audit): add findRecentUserManagementEvents query method Marcel 2026-04-26 14:57:41 +02:00
  • eb8f9d4dc4 feat(audit): emit GROUP_MEMBERSHIP_CHANGED when admin updates user groups Marcel 2026-04-26 14:54:42 +02:00
  • a736b7399a feat(audit): emit USER_DELETED when admin removes a user Marcel 2026-04-26 14:51:15 +02:00
  • e7c7f801c9 feat(audit): emit USER_CREATED when admin creates a new user Marcel 2026-04-26 14:48:35 +02:00
  • 5062513ae6 refactor(persons): extract inputCls/labelCls and PersonFormData type Marcel 2026-04-26 12:34:49 +02:00
  • 24d5381775 refactor(persons): rename page.server.test.ts to normalizePersonType.test.ts Marcel 2026-04-26 12:30:07 +02:00
  • 826283afcb test(persons): replace fragile CSS class tests with aria-checked behavior tests Marcel 2026-04-26 12:27:29 +02:00
  • 1d5f99a2c8 a11y(persons): add aria-label to PersonTypeSelector radiogroup Marcel 2026-04-26 12:25:03 +02:00
  • 5961bfb916 test(persons): assert error code in createPerson_returns400_whenPersonTypeIsSkip Marcel 2026-04-26 10:32:13 +02:00
  • 4c300da65e refactor(persons): remove what-comment from PersonCard title block Marcel 2026-04-26 10:29:46 +02:00
  • bccff232fe fix(persons): localize validation error messages via Paraglide i18n Marcel 2026-04-26 10:28:28 +02:00
  • 327fd89cb9 refactor(persons): centralise PersonType, PERSON_TYPES and normalizePersonType in person-validation Marcel 2026-04-26 10:22:52 +02:00
  • 23861055d1 fix(persons): keyboard navigation now updates PersonTypeSelector reactive state Marcel 2026-04-26 10:17:47 +02:00
  • 2ddeb485e3 test(persons): extract validatePersonFields and cover validation branches Marcel 2026-04-26 00:52:45 +02:00
  • 1f19fa3462 refactor(persons): export normalizePersonType from edit server module Marcel 2026-04-26 00:39:21 +02:00
  • 7ef1ab3b01 fix(persons): trim title server-side and add SKIP controller test Marcel 2026-04-26 00:28:57 +02:00
  • 45db75bdf2 fix(persons): use semantic color tokens in PersonTypeSelector for dark mode Marcel 2026-04-26 00:16:26 +02:00
  • 8870cbe2fe feat(persons): show title in small-caps above display name in PersonCard Marcel 2026-04-25 21:53:03 +02:00
  • b4cf7f1b21 feat(persons): add type selector + title + conditional fields to new-person form Marcel 2026-04-25 21:50:39 +02:00
  • d5587d1b95 feat(persons): extract personType + title in edit action; relax firstName for non-PERSON Marcel 2026-04-25 21:47:09 +02:00
  • 7699a4e7e2 feat(persons): add type selector + title + conditional fields to edit form Marcel 2026-04-25 21:45:09 +02:00
  • 110416d68b feat(persons): add PersonTypeSelector segmented control component Marcel 2026-04-25 21:37:13 +02:00
  • 64fdc5b57e feat(i18n): add form_label_person_type, form_label_name, a11y_type_changed keys Marcel 2026-04-25 21:31:11 +02:00
  • ac8d0d5796 feat(persons): normalize SKIP→UNKNOWN in edit-route load function Marcel 2026-04-25 21:28:10 +02:00
  • b8dcb2d3f4 feat(persons): add radioGroupNav action for keyboard navigation in type selector Marcel 2026-04-25 21:17:06 +02:00
  • ecd531601a feat(persons): relax firstName requirement for non-PERSON types in controller Marcel 2026-04-25 21:07:55 +02:00
  • fe1101f9d5 feat(persons): updatePerson rejects SKIP with INVALID_PERSON_TYPE Marcel 2026-04-25 21:02:39 +02:00
  • 928ebca056 feat(persons): updatePerson persists personType from DTO Marcel 2026-04-25 20:59:58 +02:00
  • 5dd4a01995 feat(persons): createPerson(DTO) rejects SKIP with INVALID_PERSON_TYPE Marcel 2026-04-25 20:57:15 +02:00
  • f4132edc2b feat(persons): add personType to PersonUpdateDTO and wire into createPerson Marcel 2026-04-25 20:54:37 +02:00
  • d952fab4cd feat(persons): add INVALID_PERSON_TYPE error code with i18n translations Marcel 2026-04-25 20:51:00 +02:00
  • d45739cb76 fix(search): use to_tsquery('simple') for prefix transform to avoid German stop word collision Marcel 2026-04-25 21:40:07 +02:00
  • 18cad798fc fix(documents): preserve archiveBox + archiveFolder in markForReview; drop documentLocation Marcel 2026-04-25 20:25:08 +02:00
  • 0ddf43947b refactor(documents): drop documentLocation binding from edit layouts; wire archive fields Marcel 2026-04-25 20:23:37 +02:00
  • 45f7642f8d feat(documents): replace documentLocation with archiveBox/archiveFolder in edit form Marcel 2026-04-25 20:11:30 +02:00
  • 5a13e61357 feat(documents): wire archiveBox + archiveFolder through DTO and service update Marcel 2026-04-25 20:08:21 +02:00
  • a91ee1f26d refactor(documents): unify count + action links into one row Marcel 2026-04-25 19:41:24 +02:00
  • c59287fcfc fix(bulk-edit): cycle-3 polish — Felix C2/C3/C4/C5 + Sara coverage gaps feat/issue-225-bulk-metadata-edit Marcel 2026-04-25 19:18:56 +02:00
  • 8ce96294b0 fix(bulk-edit): cycle-2 blockers — restore initial-* props, missing import, scope Esc, edit-mode topbar Marcel 2026-04-25 17:17:33 +02:00
  • 1803db86b5 test(bulk-edit): plug Sara's identified coverage gaps Marcel 2026-04-25 16:58:48 +02:00
  • 46001bbf9d refactor(documents): extract buildSearchSpec and resolveTags helpers Marcel 2026-04-25 16:52:38 +02:00
  • af8303dbf8 fix(bulk-edit): auto-clear selection store when leaving /documents and /enrich Marcel 2026-04-25 16:49:07 +02:00
  • 7df00859c6 fix(bulk-edit): pluralization, edit-mode CTA, error UI, real loading state Marcel 2026-04-25 16:46:58 +02:00
  • 92d623e298 chore(bulk-edit): bean validation on DTO, readOnly tx, imports Marcel 2026-04-25 16:41:06 +02:00
  • 156efe8b31 fix(bulk-edit): a11y + i18n hardening (Leonie blockers 1–4 + quick concerns) Marcel 2026-04-25 16:35:40 +02:00
  • 499beca124 fix(bulk-edit): drop dead initial-* props and clear store on edit-mode discard Marcel 2026-04-25 16:29:44 +02:00
  • 5cbb14d4a3 fix(bulk-edit): backend hardening — audit, caps, dedupe, CRLF, WRITE_ALL on /ids Marcel 2026-04-25 16:24:03 +02:00
  • 2bb8fb8968 fix(bulk-edit): align BulkEditEntry shape with backend DocumentBatchSummary Marcel 2026-04-25 16:14:53 +02:00
  • f13f635161 test(bulk-edit): e2e coverage for selection bar and Massenbearbeitung flow Marcel 2026-04-25 15:30:18 +02:00
  • 6d3489d035 feat(bulk-edit): add /documents/bulk-edit route Marcel 2026-04-25 15:18:07 +02:00
  • fa5dc43864 feat(bulk-edit): extend BulkDocumentEditLayout with mode="edit" Marcel 2026-04-25 15:16:06 +02:00
  • d4f32ed5d4 feat(bulk-edit): add BulkSelectionBar and Alle-X-editieren fast path Marcel 2026-04-25 15:07:26 +02:00
  • 27e3d290e7 feat(bulk-edit): add canWrite-gated row checkboxes on /documents and /enrich Marcel 2026-04-25 15:03:59 +02:00
  • 25446c9a5c feat(bulk-edit): add bulkSelection store backed by SvelteSet Marcel 2026-04-25 14:54:59 +02:00
  • 660e34e016 feat(bulk-edit): add i18n keys, error mapping, and regenerate api types Marcel 2026-04-25 14:52:10 +02:00
  • b662117e55 feat(bulk-edit): add GET /api/documents/ids endpoint Marcel 2026-04-25 14:40:56 +02:00
  • d251806e72 feat(bulk-edit): add POST /api/documents/batch-metadata endpoint Marcel 2026-04-25 14:38:08 +02:00
  • f0da033ec9 feat(bulk-edit): add PATCH /api/documents/bulk endpoint Marcel 2026-04-25 14:34:52 +02:00
  • a59feec81a feat(bulk-edit): add DocumentService.applyBulkEditToDocument Marcel 2026-04-25 14:31:48 +02:00
  • 779ffaab55 feat(bulk-edit): scaffold DTOs and BULK_EDIT_TOO_MANY_IDS error code Marcel 2026-04-25 14:27:46 +02:00
  • b690c74ddf fix(richtlinien): improve examples, copy, and Wikipedia link Marcel 2026-04-25 13:10:56 +02:00
  • 50621f9a15 test(bulk-upload): add cancel-path coverage for discard-all confirm dialog feat/issue-317-bulk-upload Marcel 2026-04-25 12:28:05 +02:00
  • 0797406f02 docs(bulk-upload): explain chunkSize=10 and 50-file cap constants Marcel 2026-04-25 11:31:59 +02:00
  • c94d2cec03 feat(bulk-upload): guard discard-all with confirm dialog Marcel 2026-04-25 11:26:05 +02:00
  • 4da0bf71a0 fix(bulk-upload): add gradient overflow indicators to chip strip Marcel 2026-04-25 11:17:05 +02:00
  • da5d3c60b3 fix(bulk-upload): chip readability and focus management in FileSwitcherStrip Marcel 2026-04-25 11:14:31 +02:00
  • ed0d0bf331 fix(bulk-upload): handle network errors and partial upload success Marcel 2026-04-25 11:09:49 +02:00
  • 899508f9ca feat(bulk-upload): guard save() against concurrent invocations Marcel 2026-04-25 11:03:58 +02:00
  • d32e671e9d fix(bulk-upload): raise discard button touch target to 44px for WCAG compliance Marcel 2026-04-25 09:13:55 +02:00
  • b61cfa081f test(bulk-upload): add positive navigation assertion for successful save Marcel 2026-04-25 09:12:21 +02:00
  • d914385afc fix(bulk-upload): correct stale DocumentBatchMetadataDTO type in api.ts Marcel 2026-04-25 09:10:29 +02:00
  • 6cdfc1f6a3 fix(bulk-upload): announce error chip status to screen readers Marcel 2026-04-25 09:08:10 +02:00
  • ed6a2fb56f test(bulk-upload): fix ScopeCard spec assertions to match actual component classes Marcel 2026-04-25 09:03:57 +02:00
  • 58545876cd fix(bulk-upload): accessibility improvements and fetch comment Marcel 2026-04-25 01:25:03 +02:00
  • 687ebf495d fix(bulk-upload): match error chips by filename, not by chunk position Marcel 2026-04-25 01:15:41 +02:00
  • bc10f2af06 fix(i18n): remove orphaned merge conflict markers from message files Marcel 2026-04-25 01:07:44 +02:00
  • 0bfd342190 test(bulk-upload): add unit tests for storeDocumentWithBatchMetadata Marcel 2026-04-24 21:40:17 +02:00
  • 1973f88e56 fix(bulk-upload): truncate long chip titles with tooltip in FileSwitcherStrip Marcel 2026-04-24 21:30:38 +02:00
  • 9f044f429c fix(bulk-upload): enlarge scroll button touch targets to 44×44px Marcel 2026-04-24 21:26:49 +02:00
  • 7ad5e35fd6 fix(bulk-upload): populate aria-live region with active file title Marcel 2026-04-24 21:25:06 +02:00
  • e7afed5ac3 fix(bulk-upload): add aria-label to progress bar in UploadSaveBar Marcel 2026-04-24 21:22:49 +02:00
  • f48d1e3cd8 fix(bulk-upload): i18n topbar title; replace hardcoded German strings Marcel 2026-04-24 21:21:07 +02:00
  • fc118f7032 fix(bulk-upload): skip navigation when any chunk fails to upload Marcel 2026-04-24 21:18:17 +02:00
  • 4229e952fb fix(bulk-upload): include tagNames in quick-upload metadata payload Marcel 2026-04-24 21:12:02 +02:00
  • e1259215ef test(bulk-upload): add save-error and discard-all coverage to BulkDocumentEditLayout spec Marcel 2026-04-24 20:41:14 +02:00
  • f06d034b36 fix(bulk-upload): i18n hardcoded strings in BulkDropZone and FileSwitcherStrip Marcel 2026-04-24 20:38:39 +02:00
  • a6cd10f219 refactor(documents): extract applyBatchMetadata private helper in DocumentService Marcel 2026-04-24 20:30:15 +02:00
  • b8e6fe9ec9 refactor(documents): change DocumentBatchMetadataDTO.tags from String to List<String> tagNames Marcel 2026-04-24 20:28:12 +02:00
  • 763f1990cd refactor(documents): move batch validation from controller into DocumentService Marcel 2026-04-24 20:25:17 +02:00
  • ca62f50921 fix(forms): remove autofocus from WhoWhenSection entirely Marcel 2026-04-24 19:51:15 +02:00
  • 61f84a86ac fix(forms): apply py-3 to location input for consistent 44px height Marcel 2026-04-24 19:48:47 +02:00
  • 0eb5c95c6c fix(forms): raise date and sender field height to match receiver (44px) Marcel 2026-04-24 19:45:03 +02:00
  • d662635392 fix(PersonTypeahead): match height and border-radius of other form inputs Marcel 2026-04-24 19:38:54 +02:00
  • b00be2548c fix(PersonMultiSelect): align height and focus ring with other form inputs Marcel 2026-04-24 19:36:20 +02:00
  • 01a8654347 fix(bulk-upload): no layout shift, no autofocus on date field Marcel 2026-04-24 19:32:23 +02:00
  • c1b221412f fix(bulk-upload): PDF-only file acceptance Marcel 2026-04-24 19:29:21 +02:00
  • 76c14ea604 fix(bulk-upload): form layout polish and drop zone sizing Marcel 2026-04-24 19:26:22 +02:00
  • 539842e849 fix(bulk-upload): spec-compliant split-panel layout with local PDF preview Marcel 2026-04-24 19:17:36 +02:00