Commit Graph

  • 74c9046745 fix(ocr): narrow exception handling and add unit tests for ensure_blla_model Marcel 2026-04-14 15:24:04 +02:00
  • 81da127381 refactor(ocr): rename findTop5 to findTop10 for headroom as frontend shows 3 by default Marcel 2026-04-14 15:20:11 +02:00
  • f206c0b9e9 test(ocr): add unit tests for triggerSegTraining() — conflict, threshold, happy path, failure Marcel 2026-04-14 15:19:04 +02:00
  • 15e532eb96 refactor(ocr): extract assertNoRunningTraining() to eliminate duplicate guard Marcel 2026-04-14 15:17:57 +02:00
  • f241a71733 feat(frontend): limit training history to 3 runs with expand toggle Marcel 2026-04-14 13:08:08 +02:00
  • b83465020a fix(backend): store error rate for segmentation training runs Marcel 2026-04-14 13:07:39 +02:00
  • f08897b801 fix(deploy): wire OCR training token to backend and raise container memory limit Marcel 2026-04-14 13:07:11 +02:00
  • a5979c4069 fix(ocr-service): fix ketos 7 segtrain compatibility and prevent OOM Marcel 2026-04-14 13:06:44 +02:00
  • e8375d6c72 fix(ocr-service): add entrypoint that validates blla model format on startup Marcel 2026-04-14 13:06:12 +02:00
  • 28ac90b529 fix(annotations): replace outline:none with focus-visible ring for keyboard accessibility [M7] Marcel 2026-04-14 14:42:01 +02:00
  • 76828a95e3 fix(annotations): add catch(err) binding to handlePointerUp error handler [M6] Marcel 2026-04-14 14:41:21 +02:00
  • 7125a0a8eb fix(annotations): reset liveWidth/liveHeight in handleKeyDown error rollback [M1, M6] Marcel 2026-04-14 14:40:55 +02:00
  • 7097f991fe feat(annotations): add keyboard accessibility to resize handles [B2] Marcel 2026-04-14 14:40:30 +02:00
  • 4d9145e49f feat(annotations): wire SVG aria-label to Paraglide i18n [B3] Marcel 2026-04-14 14:39:35 +02:00
  • 060d1c0515 feat(i18n): add annotation_resize_area and annotation_resize_handle message keys [B2, B3] Marcel 2026-04-14 14:38:10 +02:00
  • 72700bd28f test(annotations): add Testcontainers integration tests for V33 chk_annotation_bounds [B1] Marcel 2026-04-14 14:36:37 +02:00
  • 40c8f548db docs(annotations): fix ANNOTATION_UPDATE_FAILED Javadoc to reflect 400 status [M3] Marcel 2026-04-14 14:34:55 +02:00
  • a19faa3806 feat(annotations): add @Slf4j and DataIntegrityViolationException catch to updateAnnotation [M2] Marcel 2026-04-14 14:34:03 +02:00
  • f00b470928 test(annotations): add failing test for DataIntegrityViolationException defense [M2 red] Marcel 2026-04-14 14:33:43 +02:00
  • 65d606d8bb test(annotations): add missing height and x boundary validation tests [M4] Marcel 2026-04-14 14:31:07 +02:00
  • 4d3207fc27 test(annotations): verify save() is called in updateAnnotation test [M5] Marcel 2026-04-14 14:30:50 +02:00
  • 2350b4f845 fix(annotations): make resize overlay keyboard-interactive Marcel 2026-04-14 11:47:41 +02:00
  • 9fe5b32a69 feat(annotations): add N/S/E/W edge midpoint handles to resize overlay Marcel 2026-04-14 11:40:39 +02:00
  • fcc0efbf02 refactor(annotations): replace 8-square handles with 4 corner L-brackets Marcel 2026-04-14 11:14:30 +02:00
  • e7f88a4ea1 fix(annotations): use pixel-space viewBox so handles stay square on non-square annotations Marcel 2026-04-14 11:03:15 +02:00
  • c610a3cc37 feat(annotations): wire updateAnnotation context and error display into PdfViewer Marcel 2026-04-14 11:00:50 +02:00
  • 3fb32ea285 feat(annotations): pass isResizable to AnnotationShape based on selection + transcribeMode Marcel 2026-04-14 10:57:13 +02:00
  • 3b756cd718 feat(annotations): add isResizable prop to AnnotationShape to render edit overlay Marcel 2026-04-14 10:55:13 +02:00
  • f5362a5850 feat(annotations): add AnnotationEditOverlay component with resize handles and drag Marcel 2026-04-14 10:52:07 +02:00
  • 953cb2c910 feat(i18n): add ANNOTATION_UPDATE_FAILED error code and annotation_edit_mode_active translation Marcel 2026-04-14 10:43:10 +02:00
  • ff231db671 feat(annotations): add PATCH endpoint for annotation resize/move Marcel 2026-04-14 10:42:08 +02:00
  • 1558881c01 feat(annotations): add updateAnnotation service method with partial-update DTO Marcel 2026-04-14 10:39:50 +02:00
  • 26c7181ba4 feat(annotations): add ANNOTATION_UPDATE_FAILED error code Marcel 2026-04-14 10:38:33 +02:00
  • f76a6c0ee5 migration(annotations): add chk_annotation_bounds CHECK constraint (V33) Marcel 2026-04-14 10:38:11 +02:00
  • ca10e8a6a9 fix(test): update TranscriptionEditView empty-state assertion after text change Marcel 2026-04-14 10:11:57 +02:00
  • 22ee3dce68 fix(api): remove duplicate import and align patchTrainingLabel OpenAPI response to 204 Marcel 2026-04-14 10:07:41 +02:00
  • 99847980d2 fix(a11y): replace unicode glyphs with SVG icons in TrainingHistory status badges Marcel 2026-04-14 10:06:11 +02:00
  • 8f6e398af7 fix(i18n): replace hardcoded German training label chip strings with Paraglide keys Marcel 2026-04-14 10:04:52 +02:00
  • 30a17c97e8 fix(ocr): fail closed when TRAINING_TOKEN is not configured Marcel 2026-04-14 10:02:13 +02:00
  • dc283ba271 fix(training): remove @Transactional from triggerTraining to avoid holding DB connection during OCR HTTP call Marcel 2026-04-14 09:59:12 +02:00
  • 62be895b9e fix(ocr): drop uvicorn workers from 2 to 1 Marcel 2026-04-14 09:55:55 +02:00
  • 7b79dc105b test(migrations): add Testcontainers integration tests for V23 + V30 constraints Marcel 2026-04-13 23:07:17 +02:00
  • e933aacc92 docs(infra): add .env.example with OCR_TRAINING_TOKEN Marcel 2026-04-13 23:03:10 +02:00
  • fdba3211aa fix(a11y): add aria-live to OcrProgress page counter Marcel 2026-04-13 23:02:25 +02:00
  • 287920a982 docs(ocr): document single-node constraint for OCR training Marcel 2026-04-13 23:01:45 +02:00
  • 2b355e748e fix(ocr): increase presigned URL TTL from 15 min to 1 hour Marcel 2026-04-13 23:00:52 +02:00
  • 2181fe0b50 test(annotations): fix AnnotationServiceTest — add missing TranscriptionBlockRepository mock Marcel 2026-04-13 23:00:09 +02:00
  • 5a5a8b6e5c fix(annotations): cascade-delete transcription block when annotation is deleted Marcel 2026-04-13 22:31:02 +02:00
  • 5afdc37653 feat(ui): manual-first OCR workflow — remove full-page auto-segmentation Marcel 2026-04-13 22:24:50 +02:00
  • 669f2f8b98 fix(training): output CoreML format and fix best-model finder Marcel 2026-04-13 21:57:42 +02:00
  • 49c9022285 fix(training): switch to PAGE XML format for kurrent recognition training Marcel 2026-04-13 21:45:08 +02:00
  • 94b9c56527 fix(segtrain): reduce input height to 800px on first run to avoid OOM Marcel 2026-04-13 21:37:24 +02:00
  • 89a18c430e fix(training): limit CPU threads and epochs to prevent RAM exhaustion Marcel 2026-04-13 21:09:13 +02:00
  • 8dec5b5976 fix(training): disable DataLoader workers in subprocess training Marcel 2026-04-13 20:58:32 +02:00
  • e33164c4aa fix(training): use ketos CLI subprocess instead of missing Python API Marcel 2026-04-13 20:50:21 +02:00
  • 22954f348a feat(training): track and display CER per training run Marcel 2026-04-13 19:01:10 +02:00
  • a99afef319 fix(training): only count reviewed blocks as checked text for recognition Marcel 2026-04-13 18:00:59 +02:00
  • 1fd5c31fd1 fix(training): pass trainingInfo directly to SegmentationTrainingCard Marcel 2026-04-13 17:55:16 +02:00
  • a514cbca18 fix(training): segmentation card reads availableSegBlocks not availableBlocks Marcel 2026-04-13 17:54:20 +02:00
  • 063095f58c fix(training): count segmentation blocks regardless of text content Marcel 2026-04-13 17:14:40 +02:00
  • b6f74fd6fc refactor(annotations): remove overlap check to allow intersecting regions Marcel 2026-04-13 16:48:18 +02:00
  • 8618e520b5 fix(ocr): fill empty MANUAL blocks in guided OCR mode Marcel 2026-04-13 16:25:23 +02:00
  • 3e34366702 fix(ocr): use cw-1/ch-1 for synthetic baseline bounds to pass Kraken's >= check Marcel 2026-04-13 16:21:00 +02:00
  • 051c43f088 fix(ocr): use synthetic baseline in guided OCR to avoid blla crash on small crops Marcel 2026-04-13 16:09:35 +02:00
  • ee58b63517 feat(ocr): add guided OCR mode using existing annotation regions Marcel 2026-04-13 15:57:54 +02:00
  • 9b2f91ee59 feat(training): add segmentation training pipeline and complete Part 6 Marcel 2026-04-13 15:15:17 +02:00
  • 86e9c05aaf feat(training): add Paraglide i18n to training UI components and wire SegmentationTrainingCard Marcel 2026-04-13 15:14:27 +02:00
  • 4e08d31e01 feat(admin): add OCR training card to admin/system page Marcel 2026-04-13 14:58:13 +02:00
  • 88e005eb49 feat(ocr): add training history + POST /train + GET /training-info endpoints Marcel 2026-04-13 14:47:56 +02:00
  • bc97a2dade feat(ocr): add /train endpoint to OCR service and OcrClient.trainModel() Marcel 2026-04-13 14:40:53 +02:00
  • cfa3c4df67 feat(training): add recognition training data export Marcel 2026-04-13 14:35:06 +02:00
  • fdf1eb92ad feat(training): add document-level training enrollment Marcel 2026-04-13 14:30:51 +02:00
  • 73229077be feat(transcription): add sticky review progress counter to TranscriptionEditView Marcel 2026-04-13 13:59:35 +02:00
  • 33dc4654e5 fix(ocr): use correct Kraken record attributes for line geometry Marcel 2026-04-13 13:16:25 +02:00
  • 70689b8f7b feat(ocr): add SSRF protection for PDF URL downloads Marcel 2026-04-13 12:29:42 +02:00
  • 0beaf351f0 fix(docker): soften ocr-service dependency and clean up compose Marcel 2026-04-13 12:29:21 +02:00
  • b7fd4018c2 fix(frontend): normalize paraglide imports and improve accessibility Marcel 2026-04-13 12:29:00 +02:00
  • 8c07779a91 fix(ocr): fix SSE retry to actually reconnect EventSource Marcel 2026-04-13 12:28:40 +02:00
  • dd47a48d90 feat(ocr): add unique constraint on (job_id, document_id) Marcel 2026-04-13 12:28:18 +02:00
  • 08b1cd5dac fix(ocr): reduce async queue capacity from 100 to 10 Marcel 2026-04-13 12:27:58 +02:00
  • 5a97316940 fix(ocr): log warning when user ID resolution fails Marcel 2026-04-13 12:27:39 +02:00
  • 9282e46a02 fix(ocr): handle unknown NDJSON fields with @JsonIgnoreProperties Marcel 2026-04-13 12:27:20 +02:00
  • caae2ead81 refactor(ocr): route block lifecycle through TranscriptionService Marcel 2026-04-13 12:27:01 +02:00
  • 6a0fd25662 fix(ocr): persist scriptType override via DocumentService transaction Marcel 2026-04-13 12:26:37 +02:00
  • 2d43f09172 refactor(ocr): move repository access from OcrController into OcrService Marcel 2026-04-13 12:26:14 +02:00
  • 410ef88e1a refactor(ocr): delete unused OcrProgressBar component Marcel 2026-04-13 10:53:10 +02:00
  • 6b94882409 fix(ocr): remove redundant page counter from progress display Marcel 2026-04-13 10:50:05 +02:00
  • b868da07cd fix(ocr): remove progress bar, keep text-only page counter Marcel 2026-04-13 10:46:29 +02:00
  • 84aca240ea fix(ocr): remove misleading ANALYZING progress before streaming starts Marcel 2026-04-13 10:40:54 +02:00
  • 3fe6eedffb feat(ocr): allow re-running OCR when transcription blocks already exist Marcel 2026-04-13 10:37:51 +02:00
  • 69768a104d test(ocr): add business-logic tests for polygon extraction, Kraken routing, and confidence markers Marcel 2026-04-13 10:34:23 +02:00
  • 97e5138934 fix(ocr): use 1-based page numbers to match frontend PDF viewer Marcel 2026-04-13 10:32:08 +02:00
  • bac67706b9 feat(ocr): integrate progress bar and streaming progress into document page Marcel 2026-04-13 10:15:55 +02:00
  • 035f9768bd feat(ocr): add OcrProgressBar component with page-based ARIA semantics Marcel 2026-04-13 10:13:57 +02:00
  • ddec64fc79 feat(ocr): extract translateOcrProgress with ANALYZING_PAGE and DONE:skipped support Marcel 2026-04-13 10:09:29 +02:00
  • 292dc66f3c feat(ocr): rewrite runSingleDocument to use streamBlocks with per-page progress Marcel 2026-04-13 10:07:06 +02:00
  • 6823973429 refactor(ocr): extract createSingleBlock from createTranscriptionBlocks Marcel 2026-04-13 10:04:02 +02:00
  • 93c3154b3c feat(ocr): implement NDJSON streaming in RestClientOcrClient Marcel 2026-04-13 10:03:12 +02:00
  • 641e91d5a3 feat(ocr): add default streamBlocks method to OcrClient interface Marcel 2026-04-13 10:01:26 +02:00
  • e21d01e10b feat(ocr): add OcrStreamEvent sealed interface with Start/Page/Error/Done records Marcel 2026-04-13 10:00:02 +02:00