-
2459408930
refactor(ocr): move person-name enrichment from OcrController into OcrTrainingService
Marcel
2026-04-17 20:18:21 +02:00
-
09f4601d15
test(ocr): verify triggerSenderTraining upserts SenderModel with correct path and cer
Marcel
2026-04-17 20:13:21 +02:00
-
1b34a36a77
fix(ocr): eliminate race window in runOrQueueSenderTraining by creating RUNNING row atomically
Marcel
2026-04-17 20:11:56 +02:00
-
8d041a377d
fix(ocr): correct trainSenderModel URI from /train to /train-sender
Marcel
2026-04-17 20:08:18 +02:00
-
18cf839fac
feat(ocr): wire SenderModelService into OcrAsyncRunner; stage missing foundational files
Marcel
2026-04-17 19:27:02 +02:00
-
78eca8e9a1
docs(ocr): add Admin OCR overview & model-detail UI spec
Marcel
2026-04-17 19:11:07 +02:00
-
386dc83958
refactor(ocr): move sender training methods from OcrTrainingService to SenderModelService
Marcel
2026-04-17 19:08:10 +02:00
-
60c1ec7b5f
refactor(ocr): delete buildTrainingInfoMap() dead code
Marcel
2026-04-17 18:52:51 +02:00
-
10a4a4d94b
fix(ocr): log debug instead of silently swallowing person name resolution errors
Marcel
2026-04-17 18:51:15 +02:00
-
e0b7cfdada
feat(frontend): wire personNames to TrainingHistory in OcrTrainingCard
Marcel
2026-04-17 18:25:59 +02:00
-
b5e1a8ac2f
chore: regenerate API types for per-sender model additions
Marcel
2026-04-17 18:10:04 +02:00
-
64d27d6d61
feat(ocr): per-sender model registry and /train-sender endpoint
Marcel
2026-04-17 18:05:39 +02:00
-
7a342a07cf
test: add unit tests for SenderModelService, runOrQueueSenderTraining, and updateBlock hook
Marcel
2026-04-17 18:00:59 +02:00
-
bd23a76330
test: fix broken tests after per-sender model integration
Marcel
2026-04-17 17:56:51 +02:00
-
-
c5e6ed922b
test(ocr): decouple correction tests from exact library dictionary state
Marcel
2026-04-17 17:23:09 +02:00
-
ec85f228c1
refactor(ocr): document > 50 frequency threshold rationale
Marcel
2026-04-17 17:21:37 +02:00
-
fea24aee25
refactor(ocr): make collapse_adjacent_markers a public function
Marcel
2026-04-17 17:20:31 +02:00
-
68b57918eb
ci: add ocr-tests job for spell_check and confidence unit tests
Marcel
2026-04-17 16:55:07 +02:00
-
77100ab1e6
feat(ocr): integrate spell-check post-processing for handwriting script types
Marcel
2026-04-17 16:54:17 +02:00
-
092131930c
feat(ocr): add spell_check module with German spellchecker and historical wordlist
Marcel
2026-04-17 16:52:50 +02:00
-
47f9a0bf73
test(ocr): add failing tests for spell_check module
Marcel
2026-04-17 16:51:38 +02:00
-
30a6cbeb7f
feat(ocr): add DTA-derived historical German wordlist and generation script
Marcel
2026-04-17 16:48:26 +02:00
-
6faaa3b7d6
feat(ocr): add pyspellchecker dependency
Marcel
2026-04-17 16:41:24 +02:00
-
77747aa556
refactor(ocr): extract _collapse_adjacent_markers helper and add CORRECTION_MARKER
Marcel
2026-04-17 16:40:39 +02:00
-
9a64c0698f
fix(pdf): make isLoaded reactive so nav buttons are enabled after load
Marcel
2026-04-17 15:55:42 +02:00
-
4cb7c975f5
test(ocr): add resilience tests for tiny image and unexpected exception propagation
Marcel
2026-04-17 15:16:17 +02:00
-
97c94c91f8
test(ocr): guard translateOcrProgress fallback for PREPROCESSING_PAGE with missing colon parts
Marcel
2026-04-17 15:13:52 +02:00
-
eaefd4091e
feat(ocr): add PREPROCESSING_PAGE progress translation and i18n strings
Marcel
2026-04-17 14:27:42 +02:00
-
ba36a88b65
feat(ocr): add Preprocessing NDJSON event to Java stream pipeline
Marcel
2026-04-17 14:21:00 +02:00
-
b310caaeeb
feat(ocr): integrate preprocessing into stream and batch endpoints
Marcel
2026-04-17 14:16:47 +02:00
-
615d404ba9
chore(ocr): add opencv-python-headless, libglib2.0-0, and CLAHE env vars
Marcel
2026-04-17 14:14:47 +02:00
-
7183fc4428
feat(ocr): add image preprocessing module with CLAHE + grayscale + blur
Marcel
2026-04-17 14:13:42 +02:00
-
bf010a23c3
docs(tag-input): add clarifying comments for non-obvious design decisions
Marcel
2026-04-17 12:17:22 +02:00
-
b01761d800
test(tag-input): add regression guard for allowCreation=false + Enter on suggestion
Marcel
2026-04-17 12:14:35 +02:00
-
6b7829d5c8
test(tag-input): rename waitForDebounce to waitForFetch and reduce to 50ms
Marcel
2026-04-17 12:11:54 +02:00
-
1b617aa08b
fix(tag-input): increase suggestion item padding to py-3 for 44px touch target
Marcel
2026-04-17 12:09:20 +02:00
-
5120dd19a1
feat(tag-input): tree-aware DFS ordering, depth indentation, and direct-match styling
Marcel
2026-04-17 11:54:28 +02:00
-
d075bf390a
feat(tag-search): expand children and surface ancestor path in search results
Marcel
2026-04-17 11:27:41 +02:00
-
59b7f7cddf
docs(specs): add tag-typeahead-tree-aware design spec
Marcel
2026-04-17 11:09:38 +02:00
-
3b1317af98
fix(admin-tags): name clears after save and wrong confirmation text
Marcel
2026-04-17 10:22:54 +02:00
-
4442b25a7a
fix(#248): add confirmation dialog before tag delete
Marcel
2026-04-17 09:39:33 +02:00
-
47d57b96c8
fix(#248): show merge success banner via PRG pattern (?merged=1 redirect)
Marcel
2026-04-17 09:15:29 +02:00
-
902172e4e2
fix(#248): fix 3 merge zone bugs — stale state, wrong placeholder, missing success feedback
Marcel
2026-04-17 08:12:35 +02:00
-
654575bf16
feat(#248): add admin_tag_merge_target_placeholder and admin_tag_merge_success i18n keys
Marcel
2026-04-17 08:05:50 +02:00
-
b5ea04e47a
feat(#248): add optional placeholder prop to TagParentPicker
Marcel
2026-04-17 08:04:16 +02:00
-
4ec4062274
refactor(#248): simplify TagService.buildTree() to single-pass LinkedHashMap approach
Marcel
2026-04-17 07:45:40 +02:00
-
3cd6483042
fix(#248): replace focus:outline-none with focus-visible ring on TagParentPicker clear button
Marcel
2026-04-17 07:43:38 +02:00
-
aff7afa7cb
fix(#248): resolve parent UUID to name in TagParentPicker dropdown subtitle
Marcel
2026-04-17 07:42:13 +02:00
-
be7009f9ed
fix(#248): replace document.querySelectorAll with page.getByRole in TagDeleteGuard spec
Marcel
2026-04-17 07:39:06 +02:00
-
e6497ebff4
fix(#248): add @Schema(REQUIRED) to TagTreeNodeDTO, improve mergeTags log, add comments
Marcel
2026-04-17 01:01:09 +02:00
-
ba8758c085
fix(#248): mode-aware delete button text in TagDeleteGuard and fix document.querySelector in spec
Marcel
2026-04-17 00:58:50 +02:00
-
61976e9479
fix(#248): increase tree-node indent from 12px to 16px for better scanability
Marcel
2026-04-17 00:43:44 +02:00
-
901483ab73
fix(#248): complete ARIA combobox pattern in TagParentPicker — role="option", aria-activedescendant, keyboard nav
Marcel
2026-04-17 00:42:54 +02:00
-
6f6ff8e9ed
fix(#248): add console.error to typeahead catch block and expose setActiveIndex
Marcel
2026-04-17 00:37:18 +02:00
-
7919ba3a57
fix(#248): address PR review concerns — i18n, aria-label, stable keys, test selectors
Marcel
2026-04-17 00:24:53 +02:00
-
d7a46de1cc
refactor(#248): address PR review concerns — TagOperator enum, typed projection, bean validation
Marcel
2026-04-17 00:24:04 +02:00
-
172c5613ed
feat(#248): overhaul tag edit page — TagParentPicker, new components, merge+subtree actions
Marcel
2026-04-16 23:46:06 +02:00
-
f1889ff20c
feat(#248): add TagDeleteGuard component and brand-warning CSS token
Marcel
2026-04-16 23:34:29 +02:00
-
4d670de156
feat(#248): add TagMergeZone component with 2-step merge flow
Marcel
2026-04-16 23:30:28 +02:00
-
b6b1b142dc
feat(#248): add TagAncestry and TagChildrenPreview components
Marcel
2026-04-16 23:26:02 +02:00
-
a3660a79e1
feat(#248): add TagParentPicker combobox component with excludeIds filtering
Marcel
2026-04-16 23:16:18 +02:00
-
53d89a44fc
refactor(#248): extract typeahead logic into createTypeahead composable, use in PersonTypeahead
Marcel
2026-04-16 23:07:59 +02:00
-
83629e0c6e
feat(#248): add createTypeahead composable with debounced fetch and selection state
Marcel
2026-04-16 23:01:33 +02:00
-
97fbf1e4ca
feat(#248): replace flat TagsListPanel with collapsible ARIA tree (TagTreeNode)
Marcel
2026-04-16 22:57:45 +02:00
-
9b5af67780
feat(#248): switch layout load to GET /api/tags/tree, expose tree + flat tags
Marcel
2026-04-16 22:40:23 +02:00
-
e01733eaf2
feat(#248): add TAG_NOT_FOUND/MERGE_SELF/MERGE_INVALID_TARGET to errors.ts and all i18n keys
Marcel
2026-04-16 22:38:28 +02:00
-
a669f6368d
feat(#248): expose parentId in TagTreeNodeDTO OpenAPI schema and regenerate TypeScript types
Marcel
2026-04-16 22:33:12 +02:00
-
5e5c249aba
feat(#248): add POST /api/tags/{id}/merge and DELETE /api/tags/{id}/subtree endpoints
Marcel
2026-04-16 22:27:41 +02:00
-
609d242f5d
feat(#248): enrich TagTreeNodeDTO with parentId and populate documentCount via single aggregate query
Marcel
2026-04-16 22:24:50 +02:00
-
c03c391879
test(#248): add deleteWithDescendants test coverage to TagServiceTest
Marcel
2026-04-16 22:20:19 +02:00
-
f921284db6
feat(#248): add TagService.mergeTags() with validateNotSelf/validateNotDescendant/transferDocuments helpers
Marcel
2026-04-16 22:18:41 +02:00
-
b9b572436a
feat(#248): add merge/delete/count native queries to TagRepository
Marcel
2026-04-16 22:15:14 +02:00
-
a05d9c22ae
fix(#248): TagService.getById() throws DomainException(TAG_NOT_FOUND) instead of ResponseStatusException
Marcel
2026-04-16 22:13:45 +02:00
-
de7c48117b
feat(#248): add TAG_NOT_FOUND, TAG_MERGE_SELF, TAG_MERGE_INVALID_TARGET error codes
Marcel
2026-04-16 22:10:52 +02:00
-
06fd5ae2da
fix(#221): resolve inherited color on child tags in document responses
Marcel
2026-04-16 19:28:21 +02:00
-
171f06da22
fix(#221): reset parent/color/delete state when navigating between tag edit pages
Marcel
2026-04-16 19:14:28 +02:00
-
89949977c7
fix(#221): suppress tagQ when tags are already selected
Marcel
2026-04-16 18:18:25 +02:00
-
532692e0fb
fix(#221): bypass debounce on AND/OR operator toggle to prevent race condition
Marcel
2026-04-16 17:24:30 +02:00
-
39ed66c97f
feat(#221): add i18n keys and error codes for tag hierarchy errors
Marcel
2026-04-16 16:51:03 +02:00
-
7f53651f13
feat(#221): render tag list hierarchically with indentation and color dots
Marcel
2026-04-16 16:46:55 +02:00
-
d900480920
feat(#221): add parent selector and color picker to admin tag edit form
Marcel
2026-04-16 16:39:02 +02:00
-
abba85a451
feat(#221): wire tagOp URL param from server to SearchFilterBar
Marcel
2026-04-16 16:25:27 +02:00
-
b54d2b0125
feat(#221): add AND/OR pill toggle to SearchFilterBar tag filter
Marcel
2026-04-16 16:20:21 +02:00
-
e03fb38274
feat(#221): add color dot to tag chips in DocumentList
Marcel
2026-04-16 16:14:32 +02:00
-
e8e54cc282
feat(#221): change TagInput binding to Tag[], add color dots and hierarchy grouping
Marcel
2026-04-16 16:11:38 +02:00
-
e4f21bd896
feat(#221): add --c-tag-* CSS custom properties for 10 semantic tag color tokens
Marcel
2026-04-16 15:50:13 +02:00
-
c3e007d421
chore(#221): regenerate TypeScript API types with Tag hierarchy fields
Marcel
2026-04-16 15:48:37 +02:00
-
57dc72b51d
feat(#221): add AND/OR tag filtering with hierarchy expansion in document search
Marcel
2026-04-16 15:44:18 +02:00
-
3fba740469
feat(#221): tag entity hierarchy fields, service, repository, controller
Marcel
2026-04-16 15:26:23 +02:00
-
f9ac963b9f
feat(#221): add V39 migration for tag hierarchy and colors
Marcel
2026-04-16 15:15:17 +02:00
-
b0c6d15f99
fix(#240): rename transcription column heading to "Text transkribieren"
Marcel
2026-04-16 13:37:46 +02:00
-
e808525312
fix(#240): rename segmentation column heading to "Text markieren"
Marcel
2026-04-16 13:35:56 +02:00
-
da5c92fe39
fix(#240): remove readyCount from weekly stats DTO and SQL query
Marcel
2026-04-16 13:19:53 +02:00
-
6c2da648db
fix(#240): remove weekly pulse badge from ReadyColumn
Marcel
2026-04-16 13:12:46 +02:00
-
ca660f103d
test(#240): add component tests for all four Mission Control Strip components
Marcel
2026-04-16 12:36:33 +02:00
-
06eb1cada8
refactor(#240): deduplicate formatDate, use generated types, always-visible strip
Marcel
2026-04-16 12:28:20 +02:00
-
d78685c5a4
fix(#240): accessibility, color consistency, and reviewedPct denominator
Marcel
2026-04-16 12:25:36 +02:00
-
23410aa4b8
fix(#240): rename V37→V38 (V37 was already applied); regenerate api.ts
Marcel
2026-04-16 12:23:14 +02:00
-
e041c75793
test(#240): add Testcontainers integration tests for native SQL queue queries
Marcel
2026-04-16 12:15:21 +02:00
-
adea7d498f
fix(#240): add @Schema(requiredMode=REQUIRED) to both queue DTOs; add V37 indexes
Marcel
2026-04-16 12:09:09 +02:00