2026-04-14 - 2026-05-14

Overview

126 Active Pull Requests
230 Active Issues
Excluding merges, 2 authors have pushed 1453 commits to main and 1626 commits to all branches. On main, 3553 files have changed and there have been 673636 additions and 31110 deletions.

124 Pull requests merged by 1 user

Merged #568 fix(ci): run svelte-kit sync before lint to fix cache-hit tsconfig miss 2026-05-14 12:09:04 +02:00

Merged #565 ci: restrict push trigger to main — eliminate duplicate CI runs 2026-05-14 11:12:25 +02:00

Merged #564 fix(ci): run client coverage even when server coverage fails 2026-05-14 11:07:35 +02:00

Merged #563 fix(tests): use native element clicks in layout dropdown spec 2026-05-14 11:07:23 +02:00

Merged #561 fix(ci): add IMPORT_HOST_DIR stub to compose-idempotency job 2026-05-14 10:58:40 +02:00

Merged #558 ci(devops): downgrade upload-artifact v4 → v3 + ADR-014 + grep guard 2026-05-14 10:58:20 +02:00

Merged #559 chore(coverage): drop client branches threshold 80→75 to unblock CI 2026-05-14 10:16:52 +02:00

Merged #555 fix(#553): close [birpc] rpc is closed race — sync-factory invariant + duplicate-ID guard + PR #10267 backport 2026-05-13 12:55:49 +02:00

Merged #552 fix(notification): replace view-all anchor with button to prevent iframe navigation 2026-05-12 18:56:14 +02:00

Merged #550 fix(pdf-viewer): eliminate real pdfjs-dist loading from browser tests — stop birpc teardown race 2026-05-12 16:20:29 +02:00

Merged #549 fix(pdf-viewer): remove banned vi.mock('pdfjs-dist') — ADR 012 enforcement (issue #546) 2026-05-12 12:32:24 +02:00

Merged #548 fix(test): NotificationDropdown iframe navigation crash + Tailwind CI noise 2026-05-12 11:35:41 +02:00

Merged #547 test: fix flaky browser-mode tests in AnnotationShape and OcrTrainingCard specs 2026-05-12 11:14:22 +02:00

Merged #536 fix(#535): eliminate vi.mock(pdfjs-dist) birpc teardown race via libLoader injection 2026-05-12 09:57:30 +02:00

Merged #544 fix(ci): replace iproute2 ip with /proc/net/route for gateway detection 2026-05-12 09:57:03 +02:00

Merged #540 fix(ci): resolve smoke test host via bridge gateway, not 127.0.0.1 2026-05-12 09:28:45 +02:00

Merged #537 ci(nightly): reload Caddy before smoke test 2026-05-12 07:51:13 +02:00

Merged #505 test(coverage): drive browser tests to 80% on all metrics (#496) 2026-05-11 21:50:39 +02:00

Merged #526 feat(infra): bind-mount /import for backend mass-import endpoint 2026-05-11 20:55:43 +02:00

Merged #525 fix(infra): frontend healthcheck on 127.0.0.1, not localhost 2026-05-11 18:52:31 +02:00

Merged #521 fix(security): promote auth_token cookie to Authorization header (#520) 2026-05-11 18:20:10 +02:00

Merged #519 fix(user): findOrCreate Administrators group instead of blind-INSERT (#518) 2026-05-11 18:19:50 +02:00

Merged #517 fix(caddy): wrap actuator block in handle so it takes precedence over catch-all (#512) 2026-05-11 17:15:03 +02:00

Merged #516 fix(user): rename yaml key username→email so admin seed reads APP_ADMIN_USERNAME (#513) 2026-05-11 17:12:37 +02:00

Merged #515 fix(frontend): disable prerender crawl so protected routes aren't baked to login-bounces (#514) 2026-05-11 17:12:03 +02:00

Merged #511 fix(compose): mark create-buckets as one-shot for up --wait (#510) 2026-05-11 17:00:00 +02:00

Merged #509 fix(workflows): match runner label — runs-on ubuntu-latest (#508) 2026-05-11 16:18:40 +02:00

Merged #507 fix(minio): bake bootstrap.sh into image instead of bind-mounting (#506) 2026-05-11 15:56:06 +02:00

Merged #504 fix(fail2ban): pin polling backend so jail actually reads Caddy access log (#503) 2026-05-11 15:08:59 +02:00

Merged #499 feat(infra): production deployment pipeline — Caddy, staging, Gitea Actions (#497) 2026-05-11 14:29:33 +02:00

Merged #495 fix(test): make browser-project tests contribute to coverage measurement 2026-05-09 19:04:28 +02:00

Merged #488 fix(fts): paginate FTS match-set in SQL instead of loading all matching IDs 2026-05-09 16:35:15 +02:00

Merged #491 fix(db): add indexes on documents.sender_id and document_comments.author_id (#470) 2026-05-09 16:34:26 +02:00

Merged #493 fix(a11y): increase PdfControls touch targets to 44×44px (#354) 2026-05-09 16:09:18 +02:00

Merged #494 fix(ci): resolve date-buckets timezone + Testcontainers Docker failures (#476) 2026-05-09 16:08:49 +02:00

Merged #490 fix(user): replace Math.abs(hashCode()) with Math.floorMod in computeColor 2026-05-09 15:49:01 +02:00

Merged #489 fix(comment): declare missing @PathVariable params on block comment endpoints 2026-05-09 15:46:09 +02:00

Merged #492 fix(db): add PRIMARY KEY to group_permissions and promote tbmp UNIQUE to PK (#469) 2026-05-09 15:44:35 +02:00

Merged #487 fix(documents): filter inputs don't sync with URL on navigation (#482) 2026-05-09 14:27:25 +02:00

Merged #486 fix(build): unbreak production build — /hilfe/transkription prerender unreachable behind /login 2026-05-09 14:25:55 +02:00

Merged #484 feat(dashboard): reader dashboard spec alignment #483 2026-05-09 14:24:24 +02:00

Merged #477 feat(#447): permission-gated reader dashboard 2026-05-08 15:56:54 +02:00

Merged #478 feat(documents): timeline date-range filter with density bars (#385) 2026-05-08 12:27:17 +02:00

Merged #475 feat(chronik): add commentPreview to ActivityFeedItemDTO (#454) 2026-05-07 20:07:46 +02:00

Merged #456 cleanup(legibility): repo hygiene, TODO cleanup, and test flakiness fixes 2026-05-07 13:42:14 +02:00

Merged #455 cleanup(legibility): polish — CLEANUP-2, CLEANUP-3, CLEANUP-4 2026-05-07 13:22:18 +02:00

Merged #452 docs(db): add ER and ORM diagrams (PlantUML) 2026-05-07 07:12:31 +02:00

Merged #450 docs(c4): add C4-PlantUML diagram files for all architecture views 2026-05-06 22:52:39 +02:00

Merged #448 docs(c4): accuracy audit — split L3 diagrams, add 6 new sub-diagrams, fix all stale content 2026-05-06 20:00:16 +02:00

Merged #449 docs(spec): reader dashboard design exploration and final spec 2026-05-06 12:51:45 +02:00

Merged #446 docs: fix stale CLAUDE.md content after design-system refactoring 2026-05-06 09:18:08 +02:00

Merged #445 docs(legibility): migrate CLAUDE.md rules into human docs — DOC-7 2026-05-06 07:41:05 +02:00

Merged #444 docs(legibility): DOC-6 — add 18 per-domain README.md files 2026-05-06 07:36:41 +02:00

Merged #443 docs(legibility): DOC-5 — write docs/DEPLOYMENT.md 2026-05-06 07:35:25 +02:00

Merged #442 docs(legibility): DOC-4 — write CONTRIBUTING.md with three concrete walkthroughs 2026-05-06 07:31:56 +02:00

Merged #441 docs(legibility): DOC-2 — write docs/ARCHITECTURE.md 2026-05-06 07:31:02 +02:00

Merged #440 docs(legibility): write human-targeted README.md at repo root — DOC-1 2026-05-06 07:01:17 +02:00

Merged #439 docs(legibility): write docs/GLOSSARY.md — DOC-3 2026-05-05 22:37:11 +02:00

Merged #430 epic(legibility): pre-flight — make tests trustworthy (#402) 2026-05-05 20:36:15 +02:00

Merged #429 feat(eslint): add boundaries/dependencies rule for frontend domain imports 2026-05-05 18:09:26 +02:00

Merged #428 test(backend): add ArchUnit domain boundary enforcement (Rules 1–4) 2026-05-05 18:08:40 +02:00

Merged #426 fix: break Spring Framework 7 circular bean dependency cycles 2026-05-05 16:39:38 +02:00

Merged #422 refactor(frontend): restructure lib/ from flat-by-type to domain-based (#408) 2026-05-05 15:32:09 +02:00

Merged #421 refactor: domain-based package layout (#407) 2026-05-05 13:32:44 +02:00

Merged #420 fix(backend): resolve cross-domain repo + controller→repo violations (#417) 2026-05-05 10:50:04 +02:00

Merged #419 fix(backend): rename users table to app_users (closes #418) 2026-05-04 21:57:33 +02:00

Merged #379 feat(person-mention): add @mention discoverability hint to transcription block placeholder 2026-05-04 15:35:08 +02:00

Merged #378 fix(training): use KURRENT_RECOGNITION label for sender-based block queries 2026-05-04 15:26:05 +02:00

Merged #382 feat(geschichten): blog-like family memory stories (closes #381) 2026-05-04 15:02:45 +02:00

Merged #377 feat: auto-open transcription panel when navigating from mission-control cards 2026-04-29 21:38:14 +02:00

Merged #375 fix: hover card maiden name false positive, editor placeholder on non-empty content, mention persistence 2026-04-29 21:33:18 +02:00

Merged #373 feat: decouple person-mention display text from person name (#372) 2026-04-29 16:55:53 +02:00

Merged #371 feat(person-mention): PR-B2 — read-mode rendering + hover card (issue #362) 2026-04-29 13:37:06 +02:00

Merged #369 feat: person @mentions edit-mode infrastructure (PR-B1, #362) 2026-04-29 08:05:49 +02:00

Merged #366 feat(transcription): person @mention sidecar + rename propagation (PR-A backend, #362) 2026-04-28 23:54:40 +02:00

Merged #365 refactor(relationship): use typed RelationType enum in CreateRelationshipRequest 2026-04-28 19:59:45 +02:00

Merged #360 feat(stammbaum): family network — graph, badge, edit card, /stammbaum page (#358) 2026-04-28 19:33:33 +02:00

Merged #352 feat(transcription): add "Alle als fertig markieren" bulk action (#345) 2026-04-28 08:34:27 +02:00

Merged #350 fix(persons): fix person dropdown clipping with fixed positioning and ARIA (#343) 2026-04-27 09:01:48 +02:00

Merged #348 feat(viewer): show delete icon directly on transcription annotation (#339) 2026-04-26 21:56:38 +02:00

Merged #347 feat(persons): show merge action inline with danger hint, remove Gefahrenzone collapsible (#342) 2026-04-26 21:54:46 +02:00

Merged #346 feat(search): add direct page-jump control to document search pagination (#340) 2026-04-26 21:53:18 +02:00

Merged #349 fix(viewer): fix "Annotieren anzeigen" contrast and add lint rule (#341) 2026-04-26 21:46:44 +02:00

Merged #351 feat(nav): add tooltip and cursor:pointer to notification bell, fix ThemeToggle i18n (#344) 2026-04-26 21:45:49 +02:00

Merged #337 feat(audit): track user management events in audit log (#336) 2026-04-26 19:42:00 +02:00

Merged #333 feat(persons): surface personType + title in forms and detail card 2026-04-26 13:37:40 +02:00

Merged #331 feat: bulk metadata edit for existing documents 2026-04-25 19:27:53 +02:00

Merged #329 feat(documents): bulk upload — split-panel with file switcher 2026-04-25 12:24:25 +02:00

Merged #330 feat(#320): guided empty state + Kurrent primer for first-time transcribers 2026-04-25 12:24:04 +02:00

Merged #316 feat(documents): paginate /documents search so first paint isn't 1500 rows 2026-04-24 13:20:26 +02:00

Merged #314 As a user I want the dashboard resume strip to show the actual document thumbnail so I recognize what I was working on at a glance 2026-04-24 07:37:59 +02:00

Merged #311 feat(briefwechsel): thumbnail rows with summary quote and bilateral distribution bar (#305) 2026-04-23 21:38:57 +02:00

Merged #304 fix(transcription): replace sendBeacon with fetch keepalive; add catch-all API proxy 2026-04-23 07:12:23 +02:00

Merged #308 feature: PDF-Thumbnails für Dokumente (Upload + Admin-Backfill) 2026-04-23 07:11:23 +02:00

Merged #303 fix(nav): replace static back-link hrefs with history.back() + fallback 2026-04-22 12:32:57 +02:00

Merged #302 feat(dashboard): add kinds CSV query param to /api/dashboard/activity 2026-04-21 22:48:09 +02:00

Merged #301 feat(chronik): deep-link mentions and comments to the specific comment 2026-04-21 19:06:19 +02:00

Merged #299 bug: notification deep-link does not scroll to comment on document detail page 2026-04-21 15:06:02 +02:00

Merged #297 fix(chronik): surface REPLY events in Für-dich feed via youParticipated 2026-04-21 09:00:25 +02:00

Merged #298 feat: dashboard enrichment-list-block after batch upload (#296) 2026-04-21 08:59:32 +02:00

Merged #288 feat: unify /notifications and dashboard activity feed into a /chronik page 2026-04-20 20:38:12 +02:00

Merged #284 feat/issue-283-sender-receiver-grouping 2026-04-20 11:29:34 +02:00

Merged #282 feat: dedicated /documents search & browse page 2026-04-20 09:11:08 +02:00

Merged #279 fix(admin): delete user button now works reliably 2026-04-20 08:43:16 +02:00

Merged #278 feat(dashboard): redesign home as action-led family archive hub (#271) 2026-04-20 07:45:17 +02:00

Merged #275 feat(audit): domain-level audit log for archive activity 2026-04-19 16:10:42 +02:00

Merged #273 feat: invite-based self-service registration 2026-04-19 09:34:33 +02:00

Merged #272 feat: migrate from username to email-only authentication 2026-04-18 23:36:56 +02:00

Merged #267 feat(enrich): field reordering, required-fields progress bar, and no-PDF upload state 2026-04-18 23:36:33 +02:00

Merged #265 feat(admin): OCR admin pages — overview & model detail 2026-04-18 12:38:42 +02:00

Merged #263 feat(ocr): per-sender specialized Kurrent models with automatic active-learning retraining 2026-04-18 12:30:57 +02:00

Merged #260 feat(ocr): German spell-check post-processing to reduce handwriting gibberish 2026-04-17 17:28:41 +02:00

Merged #255 feat(ocr): add image preprocessing pipeline to improve transcription quality on aged documents 2026-04-17 15:50:37 +02:00

Merged #251 feat(tag-typeahead): tree-aware results — expand children & surface ancestor path 2026-04-17 12:25:55 +02:00

Merged #249 feat(#248): admin tag page complete overhaul — tree panel, merge, subtree delete, new edit components 2026-04-17 10:24:10 +02:00

Merged #245 feat(#240): Mission Control Strip — backend + frontend implementation 2026-04-16 13:41:34 +02:00

Merged #242 feat(search): show search result snippets with match highlighting (#219) 2026-04-16 09:10:11 +02:00

Merged #243 fix(fileloader): prevent infinite reload loop via untrack 2026-04-16 09:09:41 +02:00

Merged #241 refactor(frontend): utility dedup, component splits, dead code removal (#193–#200) 2026-04-15 15:23:16 +02:00

Merged #237 feat(search): upgrade to PostgreSQL full-text search with German stemming 2026-04-15 12:40:21 +02:00

Merged #238 devops(backend): switch to multi-stage Docker build 2026-04-15 11:33:04 +02:00

Merged #236 feat(search): add year/group headers in document list when sorted by date, sender, or receiver 2026-04-15 10:48:16 +02:00

Merged #234 fix(ocr): fix segmentation training for ketos 7 and low-memory hosts 2026-04-14 21:17:54 +02:00

Merged #235 feat(annotations): resize and move annotations in document view 2026-04-14 14:55:28 +02:00

2 Pull requests proposed by 1 user

153 Issues closed from 1 user

Closed #531 ci(nightly): post-deploy smoke test for /api/admin/import-status 2026-05-14 11:53:21 +02:00

Closed #557 ci(devops): downgrade actions/upload-artifact v4 → v3 (re-regression — needs ADR to prevent future re-upgrade) 2026-05-14 10:58:20 +02:00

Closed #554 audit: factory mocks → prop injection migration (sveltest pattern) 2026-05-14 10:37:38 +02:00

Closed #556 ci(coverage): drop client-project branches threshold 80 → 70 to unblock CI 2026-05-14 10:16:53 +02:00

Closed #553 Unit & Component Tests job exits 1 — birpc teardown race resurfaces from async vi.mock factory with dynamic import 2026-05-13 12:55:50 +02:00

Closed #551 fix(test): NotificationDropdown view-all click navigates iframe — breaks vitest coverage 2026-05-12 16:38:41 +02:00

Closed #546 test: PdfViewer.svelte.test.ts re-introduces banned vi.mock('pdfjs-dist') factory — restores birpc teardown race 2026-05-12 12:32:25 +02:00

Closed #545 fix(test): NotificationDropdown "view-all link" test causes iframe navigation crash in CI 2026-05-12 11:35:41 +02:00

Closed #541 test: fix flaky browser-mode tests in AnnotationShape and OcrTrainingCard specs 2026-05-12 11:14:22 +02:00

Closed #535 Unit & Component Tests job exits 1 from vitest-browser teardown race — every test green but CI red 2026-05-12 09:57:30 +02:00

Closed #496 Increase browser component test coverage to ≥ 80% on all metrics (statements, lines, branches, functions) 2026-05-11 21:50:39 +02:00

Closed #522 tech-debt(auth): replace cookie-promotion glue with a proper session-based auth model 2026-05-11 18:50:50 +02:00

Closed #520 bug(security): browser-side /api/* requests miss Authorization in production → browser shows Basic-auth popup 2026-05-11 18:20:11 +02:00

Closed #518 bug(user): UserDataInitializer blind-INSERTs Administrators group; fails on retry (HIGH, prod-blocking) 2026-05-11 18:19:50 +02:00

Closed #512 bug(caddy): respond @actuator 404 swallowed by catch-all handle; /actuator/health returns 302 2026-05-11 17:15:04 +02:00

Closed #513 bug(user): admin seed ignores APP_ADMIN_USERNAME / PASSWORD — falls back to defaults (HIGH, prod-blocking) 2026-05-11 17:12:37 +02:00

Closed #514 bug(frontend): SvelteKit prerender-crawl bakes redirect-to-login into static HTML for protected routes (HIGH, prod-blocking) 2026-05-11 17:12:03 +02:00

Closed #510 bug(compose): up -d --wait treats create-buckets exit(0) as failure 2026-05-11 17:00:00 +02:00

Closed #508 bug(workflows): deploy workflows use runs-on: self-hosted but runner advertises ubuntu-latest — jobs never picked up 2026-05-11 16:18:41 +02:00

Closed #506 bug(infra/minio): create-buckets bootstrap.sh bind-mount fails on DooD runner (Is a directory) 2026-05-11 15:56:06 +02:00

Closed #503 bug(infra/fail2ban): jail defaults to systemd backend on Debian, never inspects Caddy access log 2026-05-11 15:08:59 +02:00

Closed #497 devops: production deployment — Caddy, staging env, and Gitea Actions CI/CD 2026-05-11 14:29:33 +02:00

Closed #367 security(transcription): CWE-79 — escapeHtml required for @mention rendering in PR-B 2026-05-09 22:03:13 +02:00

Closed #425 fix(test): make browser-project tests contribute to coverage measurement 2026-05-09 19:04:28 +02:00

Closed #468 fix(documents): paginate FTS match-set in SQL instead of loading all matching IDs 2026-05-09 16:35:17 +02:00

Closed #470 fix(db): add indexes on documents.sender_id and document_comments.author_id 2026-05-09 16:34:27 +02:00

Closed #423 fix(test): resolve pre-existing TranscriptionEditView and Richtlinien test failures 2026-05-09 16:20:45 +02:00

Closed #115 fix(ui): replace localStorage panel state restore with SvelteKit snapshot API to eliminate flash on load 2026-05-09 16:11:20 +02:00

Closed #354 fix(a11y): increase annotation toggle touch target to 44×44px minimum 2026-05-09 16:09:21 +02:00

Closed #476 fix(ci): two persistent CI failures — date-buckets timezone + Testcontainers Docker 2026-05-09 16:08:51 +02:00

Closed #471 fix(user): replace Math.abs(hashCode()) in AppUser.computeColor (negative on Integer.MIN_VALUE) 2026-05-09 15:49:02 +02:00

Closed #473 fix(api): add explicit @PathVariable name on transcription-block comment endpoints 2026-05-09 15:46:10 +02:00

Closed #469 fix(db): add primary key to group_permissions to prevent duplicate grants 2026-05-09 15:44:36 +02:00

Closed #482 fix(documents): filter inputs don't sync with URL — Sender/Receiver blank on load, fields don't clear on reset 2026-05-09 14:27:26 +02:00

Closed #472 fix(build): unbreak production build — /hilfe/transkription prerender unreachable behind /login 2026-05-09 14:25:56 +02:00

Closed #483 fix(dashboard): align reader dashboard with reader-dashboard-final spec 2026-05-09 14:24:25 +02:00

Closed #447 feat(dashboard): permission-gated reader dashboard for READ_ALL / BLOG_WRITE users 2026-05-08 15:56:55 +02:00

Closed #385 feat(documents): timeline date-range filter with density bars 2026-05-08 12:27:17 +02:00

Closed #454 feat(chronik): add commentPreview field to ActivityFeedItemDTO 2026-05-07 20:07:49 +02:00

Closed #416 audit(legibility): re-run readiness scorecard; ratify "ready for evaluation" 2026-05-07 15:22:38 +02:00

Closed #411 epic(legibility): polish — remove smells surfaced by audits 2026-05-07 15:22:26 +02:00

Closed #415 cleanup(legibility): repo hygiene — proofshot retention, ignore .agent/.worktrees 2026-05-07 09:35:47 +02:00

Closed #414 cleanup(legibility): rename Helper/Utils/Manager violators to express intent 2026-05-07 09:35:45 +02:00

Closed #413 cleanup(legibility): rewrite vague comments; remove "ask Marcel" markers 2026-05-07 09:35:44 +02:00

Closed #412 cleanup(legibility): remove dead code identified by audits 2026-05-07 09:35:43 +02:00

Closed #451 Add database ER and ORM diagrams (PlantUML) 2026-05-07 07:12:31 +02:00

Closed #394 epic(legibility): documentation — make the codebase self-explaining 2026-05-06 08:50:00 +02:00

Closed #401 docs(legibility): migrate CLAUDE.md rules into human docs; mark migrated content 2026-05-06 07:41:06 +02:00

Closed #400 docs(legibility): add per-domain README.md inside every domain package 2026-05-06 07:36:44 +02:00

Closed #399 docs(legibility): write docs/DEPLOYMENT.md (production runtime + env vars) 2026-05-06 07:35:26 +02:00

Closed #398 docs(legibility): write CONTRIBUTING.md with three concrete walkthroughs 2026-05-06 07:31:57 +02:00

Closed #396 docs(legibility): write docs/ARCHITECTURE.md with diagram and domain list 2026-05-06 07:31:03 +02:00

Closed #395 docs(legibility): write human-targeted README.md at repo root 2026-05-06 07:01:19 +02:00

Closed #397 docs(legibility): write docs/GLOSSARY.md disambiguating overloaded terms 2026-05-05 22:37:13 +02:00

Closed #438 docs(legibility): migrate CLAUDE.md rules to human docs via pointer comments (DOC-7) 2026-05-05 21:14:45 +02:00

Closed #437 docs(legibility): write 18 README.md files for canonical domain packages (DOC-6) 2026-05-05 21:14:44 +02:00

Closed #436 docs(legibility): write docs/DEPLOYMENT.md as Day-1 production checklist (DOC-5) 2026-05-05 21:14:42 +02:00

Closed #435 docs(legibility): write CONTRIBUTING.md with three walkthroughs and Testing section (DOC-4) 2026-05-05 21:14:40 +02:00

Closed #434 docs(legibility): write docs/GLOSSARY.md disambiguating overloaded terms (DOC-3) 2026-05-05 21:14:39 +02:00

Closed #433 docs(legibility): write docs/ARCHITECTURE.md with diagram, domains, security model (DOC-2) 2026-05-05 21:14:38 +02:00

Closed #432 docs(legibility): write human-targeted root README.md (DOC-1) 2026-05-05 21:14:37 +02:00

Closed #405 test(legibility): verify e2e suite covers every critical user journey 2026-05-05 20:37:35 +02:00

Closed #404 test(legibility): rewrite tautological tests revealed by TEST-1 2026-05-05 20:37:13 +02:00

Closed #403 test(legibility): mutation-test critical backend service tests; flag tautologies 2026-05-05 20:36:56 +02:00

Closed #402 epic(legibility): pre-flight — make tests trustworthy before big-bang refactor 2026-05-05 20:36:34 +02:00

Closed #390 audit(ocr-service): score ocr-service/ against legibility rubric C1–C10 2026-05-05 19:29:46 +02:00

Closed #389 audit(backend): score backend/ against legibility rubric C1–C10 2026-05-05 19:29:33 +02:00

Closed #388 audit(frontend): score frontend/ against legibility rubric C1–C10 2026-05-05 19:29:24 +02:00

Closed #387 epic(legibility): audit — assess current state of every subsystem 2026-05-05 19:29:13 +02:00

Closed #391 audit(db): score Flyway migrations + DB schema against legibility rubric 2026-05-05 19:28:29 +02:00

Closed #392 audit(rest): score infra/, scripts/, root, docs/ against legibility rubric 2026-05-05 19:28:13 +02:00

Closed #393 audit(rollup): produce global readiness scorecard from subsystem audits 2026-05-05 19:27:52 +02:00

Closed #406 epic(legibility): big-bang restructure — backend layer→domain, frontend lib→domain 2026-05-05 19:27:17 +02:00

Closed #410 refactor(frontend): add ESLint rule preventing cross-domain imports 2026-05-05 18:09:26 +02:00

Closed #409 refactor(backend): add ArchUnit test enforcing domain boundaries 2026-05-05 18:08:41 +02:00

Closed #408 refactor(frontend): restructure lib/ from flat-by-type to domain-based 2026-05-05 15:32:10 +02:00

Closed #407 refactor(backend): restructure from layer-based to domain-based packaging 2026-05-05 13:32:47 +02:00

Closed #417 fix(backend): resolve cross-domain repo + controller→repo violations before REFACTOR-1 2026-05-05 10:50:06 +02:00

Closed #418 decide(backend): resolve users-table / AppUser-entity naming mismatch before REFACTOR-1 2026-05-04 21:57:34 +02:00

Closed #370 feat(person-mention): discoverability hint for the @ trigger in the editor 2026-05-04 15:35:09 +02:00

Closed #381 feat: Geschichten — blog-like family memory stories linked to persons and documents 2026-05-04 15:02:46 +02:00

Closed #362 feat: Person @mentions in transcription blocks with hover card 2026-04-30 10:21:25 +02:00

Closed #376 feat: auto-open transcription panel when navigating from mission-control cards 2026-04-29 21:38:16 +02:00

Closed #374 GET /api/persons leaks PersonSummaryDTO.notes to typeahead clients (CWE-200) 2026-04-29 16:56:59 +02:00

Closed #372 Person mention: decouple display text from person name to preserve original wording 2026-04-29 16:55:54 +02:00

Closed #358 feat: Stammbaum — family relationship graph replaces Briefwechsel in nav 2026-04-28 19:33:34 +02:00

Closed #313 test(briefwechsel): capture visual-regression baselines for the row layout 2026-04-28 11:19:03 +02:00

Closed #266 fix(ocr): regenerate TypeScript types so TriggerSenderTrainingDTO.personId is non-optional 2026-04-28 11:19:02 +02:00

Closed #224 feat: show top conversation pairs on briefwechsel entry state 2026-04-28 11:19:01 +02:00

Closed #338 feat(briefwechsel): discovery landing grid + gap markers 2026-04-28 11:18:28 +02:00

Closed #345 feat(transcription): add "Alle als fertig markieren" bulk action to transcription panel 2026-04-28 08:34:27 +02:00

Closed #343 bug(persons): person selection dropdown is visually clipped / cut off 2026-04-27 09:01:48 +02:00

Closed #339 feat(viewer): show delete icon directly on transcription annotation 2026-04-26 21:56:38 +02:00

Closed #342 feat(persons): show merge action inline with danger hint, remove Gefahrenzone collapsible 2026-04-26 21:54:46 +02:00

Closed #340 feat(search): add direct page-jump control to document search pagination 2026-04-26 21:53:19 +02:00

Closed #341 bug(viewer): "Annotieren anzeigen" text has insufficient contrast in light mode 2026-04-26 21:46:46 +02:00

Closed #344 feat(nav): add tooltip and cursor:pointer to notification bell icon 2026-04-26 21:45:51 +02:00

Closed #336 feat(audit): track user management events in audit log (USER_CREATED, USER_DELETED, GROUP_MEMBERSHIP_CHANGED) 2026-04-26 19:42:00 +02:00

Closed #218 feat(ui): surface title & personType fields in person forms and detail card 2026-04-26 13:37:40 +02:00

Closed #325 feat(tags): split flat tag taxonomy into documentType + event + freeform dimensions 2026-04-25 20:31:40 +02:00

Closed #225 feat: bulk metadata edit for existing documents (select → panel → PATCH) 2026-04-25 19:27:54 +02:00

Closed #317 feat(documents): bulk upload — split-panel with file switcher 2026-04-25 12:24:26 +02:00

Closed #320 feat(transcribe): guided empty state + Kurrent primer for first-time transcribers 2026-04-25 12:24:05 +02:00

Closed #315 feat(documents): paginate /documents search so first paint isn't 1500 rows 2026-04-24 13:20:27 +02:00

Closed #294 As a user creating a new document I want the same split-panel edit view as on existing documents, so I can enter metadata next to the file preview 2026-04-24 10:48:57 +02:00

Closed #309 As a user I want the dashboard resume strip to show the actual document thumbnail so I recognize what I was working on at a glance 2026-04-24 07:37:59 +02:00

Closed #305 feature(briefwechsel): thumbnail rows with summary quote and bilateral distribution bar 2026-04-23 21:38:58 +02:00

Closed #204 Transcription block saves silently lost when navigating away in production 2026-04-23 07:12:24 +02:00

Closed #307 feature: PDF-Thumbnails für Dokumente (Upload + Admin-Backfill) 2026-04-23 07:11:24 +02:00

Closed #203 Notification SSE stream retries infinitely when session expires 2026-04-22 15:42:29 +02:00

Closed #152 bug: HikariCP connection pool exhaustion causes backend outages 2026-04-22 15:25:54 +02:00

Closed #202 Memory leaks when navigating between documents -- blob URLs never revoked 2026-04-22 15:17:06 +02:00

Closed #185 fix(nav): replace static back-link hrefs with history.back() + fallback 2026-04-22 12:32:57 +02:00

Closed #293 feat(dashboard): add kinds CSV query param to /api/dashboard/activity 2026-04-21 22:48:10 +02:00

Closed #291 observability: add /api/dashboard/activity p95 latency panel to Grafana 2026-04-21 19:06:33 +02:00

Closed #300 feat: chronik mentions should deep-link to the comment, matching the bell dropdown 2026-04-21 19:06:20 +02:00

Closed #276 bug: notification deep-link does not scroll to comment on document detail page 2026-04-21 15:06:02 +02:00

Closed #295 bug: REPLY notifications not surfaced in Chronik "Für dich" feed 2026-04-21 09:00:26 +02:00

Closed #296 As a user I want to see uploaded documents needing metadata on the dashboard so I can continue enriching after a batch upload 2026-04-21 08:59:32 +02:00

Closed #285 feat: unify /notifications and dashboard activity feed into a /chronik page 2026-04-20 20:38:12 +02:00

Closed #280 fix(dashboard): audit_log never written + hero blind to annotation-only work 2026-04-20 13:04:27 +02:00

Closed #283 feat: restore sender/receiver grouping on /documents when sorting by SENDER or RECEIVER 2026-04-20 13:04:15 +02:00

Closed #281 feat: dedicated /documents search & browse page 2026-04-20 09:11:09 +02:00

Closed #277 bug: deleting a user in the admin panel does nothing 2026-04-20 08:43:17 +02:00

Closed #271 feat(dashboard): redesign Dokumente dashboard as a document hub (Variant A) 2026-04-20 07:45:18 +02:00

Closed #247 feat: Mission Control Strip — "offen" total count per column 2026-04-19 16:16:20 +02:00

Closed #246 feat: Mission Control Strip — contributor avatars per queue item 2026-04-19 16:16:19 +02:00

Closed #274 feat(audit): domain-level audit log for archive activity 2026-04-19 16:10:42 +02:00

Closed #269 feat: invite-based self-service registration 2026-04-19 09:34:34 +02:00

Closed #270 feat: migrate from username to email-only authentication 2026-04-18 23:36:58 +02:00

Closed #261 feat(enrich): field reordering, required-fields progress bar, and no-PDF upload state 2026-04-18 23:36:34 +02:00

Closed #264 feat(admin): OCR admin pages — overview & model detail 2026-04-18 12:38:44 +02:00

Closed #253 feat(ocr): per-sender specialized Kurrent models with automatic active-learning retraining 2026-04-18 12:30:58 +02:00

Closed #254 feat(ocr): German spell-check post-processing to reduce handwriting gibberish 2026-04-17 17:28:42 +02:00

Closed #256 feat(ocr): two-phase progress indicator distinguishing preprocessing from OCR analysis 2026-04-17 15:51:36 +02:00

Closed #252 feat(ocr): add image preprocessing pipeline to improve transcription quality on aged documents 2026-04-17 15:50:38 +02:00

Closed #250 feat(tag-typeahead): tree-aware results — expand children & surface ancestor path 2026-04-17 12:25:56 +02:00

Closed #248 feat: Admin tag page complete overhaul — hierarchy tree, parent picker, merge, delete guard 2026-04-17 10:29:08 +02:00

Closed #221 feat: improved tag system — AND/OR filtering and tag hierarchy 2026-04-17 07:38:21 +02:00

Closed #240 As a family member I want to see which documents need transcription and which are ready to read so I know where to contribute 2026-04-16 13:41:35 +02:00

Closed #219 feat: show search result snippets with match highlighting 2026-04-16 09:10:12 +02:00

Closed #195 Unify click-outside handling to use existing clickOutside action 2026-04-15 21:02:36 +02:00

Closed #194 Extract shared utility functions to eliminate duplication 2026-04-15 21:02:35 +02:00

Closed #193 Delete dead conversations/ route (old Korrespondenz page) 2026-04-15 21:02:35 +02:00

Closed #201 Minor structural improvements — notification rows, admin list panels, search filters, icons 2026-04-15 21:02:12 +02:00

Closed #199 Split TranscriptionEditView.svelte (332 lines) — extract auto-save + drag-drop modules 2026-04-15 21:02:12 +02:00

Closed #200 Split NotificationBell.svelte (316 lines) — extract dropdown + SSE stream module 2026-04-15 21:02:12 +02:00

Closed #197 Split EntityNav.svelte (516 lines) into section + item subcomponents 2026-04-15 21:02:11 +02:00

Closed #198 Split CommentThread.svelte (310 lines) — extract CommentMessage component 2026-04-15 21:02:11 +02:00

Closed #196 Split PdfViewer.svelte (469 lines) into renderer module + controls component 2026-04-15 21:02:10 +02:00

Closed #222 feat: upgrade search from ILIKE to PostgreSQL full-text search 2026-04-15 12:40:22 +02:00

Closed #220 feat: add year/group headers in search results when sorted by date 2026-04-15 10:48:18 +02:00

Closed #233 feat(annotations): allow user to resize and move annotation boxes after drawing 2026-04-14 14:55:29 +02:00

207 Issues created by 1 user

Opened #239 devops: add docker-compose.prod.yml overlay for production deployment 2026-04-15 11:26:34 +02:00

Opened #240 As a family member I want to see which documents need transcription and which are ready to read so I know where to contribute 2026-04-15 14:20:02 +02:00

Opened #246 feat: Mission Control Strip — contributor avatars per queue item 2026-04-16 10:04:37 +02:00

Opened #247 feat: Mission Control Strip — "offen" total count per column 2026-04-16 10:04:51 +02:00

Opened #248 feat: Admin tag page complete overhaul — hierarchy tree, parent picker, merge, delete guard 2026-04-16 21:23:38 +02:00

Opened #250 feat(tag-typeahead): tree-aware results — expand children & surface ancestor path 2026-04-17 11:10:49 +02:00

Opened #252 feat(ocr): add image preprocessing pipeline to improve transcription quality on aged documents 2026-04-17 12:04:01 +02:00

Opened #253 feat(ocr): per-sender specialized Kurrent models with automatic active-learning retraining 2026-04-17 12:29:00 +02:00

Opened #254 feat(ocr): German spell-check post-processing to reduce handwriting gibberish 2026-04-17 12:44:53 +02:00

Opened #256 feat(ocr): two-phase progress indicator distinguishing preprocessing from OCR analysis 2026-04-17 15:20:02 +02:00

Opened #257 devops(ocr): improve startup error clarity for invalid CLAHE env vars 2026-04-17 15:20:10 +02:00

Opened #258 test(ocr): add integration test for full streaming pipeline with a real image 2026-04-17 15:20:18 +02:00

Opened #259 feat(ocr): feedback loop to improve spell-check dictionary from user corrections 2026-04-17 16:28:04 +02:00

Opened #261 feat(enrich): field reordering, required-fields progress bar, and no-PDF upload state 2026-04-17 17:19:17 +02:00

Opened #262 test(ocr): add integration tests for spell-check routing in main.py 2026-04-17 17:24:01 +02:00

Opened #264 feat(admin): OCR admin pages — overview & model detail 2026-04-17 19:12:22 +02:00

Opened #266 fix(ocr): regenerate TypeScript types so TriggerSenderTrainingDTO.personId is non-optional 2026-04-18 09:26:11 +02:00

Opened #268 test(enrich): E2E coverage for WhoWhenSection autofocus and upload cancel flow 2026-04-18 14:53:41 +02:00

Opened #269 feat: invite-based self-service registration 2026-04-18 15:22:35 +02:00

Opened #270 feat: migrate from username to email-only authentication 2026-04-18 15:29:36 +02:00

Opened #271 feat(dashboard): redesign Dokumente dashboard as a document hub (Variant A) 2026-04-18 19:26:50 +02:00

Opened #274 feat(audit): domain-level audit log for archive activity 2026-04-19 11:44:00 +02:00

Opened #276 bug: notification deep-link does not scroll to comment on document detail page 2026-04-19 15:59:19 +02:00

Opened #277 bug: deleting a user in the admin panel does nothing 2026-04-19 16:34:22 +02:00

Opened #280 fix(dashboard): audit_log never written + hero blind to annotation-only work 2026-04-19 19:10:47 +02:00

Opened #281 feat: dedicated /documents search & browse page 2026-04-19 21:43:15 +02:00

Opened #283 feat: restore sender/receiver grouping on /documents when sorting by SENDER or RECEIVER 2026-04-20 09:26:11 +02:00

Opened #285 feat: unify /notifications and dashboard activity feed into a /chronik page 2026-04-20 11:02:12 +02:00

Opened #286 refactor(notification-bell): use SvelteKit form actions instead of raw fetch 2026-04-20 12:28:53 +02:00

Opened #287 As a user I want count-based messages to be grammatically correct so the UI reads naturally in every supported language 2026-04-20 12:42:32 +02:00

Opened #289 As a user I want a navigation progress bar so I can see that the app is loading after I click a link 2026-04-20 18:13:22 +02:00

Opened #290 feat(chronik): add cursor/offset pagination to /api/dashboard/activity + wire "Mehr laden" 2026-04-20 18:13:26 +02:00

Opened #291 observability: add /api/dashboard/activity p95 latency panel to Grafana 2026-04-20 18:13:33 +02:00

Opened #292 As a user I want route-specific skeleton loaders so I see the page layout while data is still being fetched 2026-04-20 18:13:41 +02:00

Opened #293 feat(dashboard): add kinds CSV query param to /api/dashboard/activity 2026-04-20 18:13:43 +02:00

Opened #294 As a user creating a new document I want the same split-panel edit view as on existing documents, so I can enter metadata next to the file preview 2026-04-20 19:08:54 +02:00

Opened #295 bug: REPLY notifications not surfaced in Chronik "Für dich" feed 2026-04-20 19:45:37 +02:00

Opened #296 As a user I want to see uploaded documents needing metadata on the dashboard so I can continue enriching after a batch upload 2026-04-20 20:02:27 +02:00

Opened #300 feat: chronik mentions should deep-link to the comment, matching the bell dropdown 2026-04-21 15:49:36 +02:00

Opened #305 feature(briefwechsel): thumbnail rows with summary quote and bilateral distribution bar 2026-04-22 20:18:51 +02:00

Opened #306 feature(persons): Korrespondenz-Überblick dashboard on /persons/[id] 2026-04-22 20:19:27 +02:00

Opened #307 feature: PDF-Thumbnails für Dokumente (Upload + Admin-Backfill) 2026-04-22 20:40:40 +02:00

Opened #309 As a user I want the dashboard resume strip to show the actual document thumbnail so I recognize what I was working on at a glance 2026-04-23 07:50:10 +02:00

Opened #310 As a user I want to generate a summary and suggest tags from the transcription so I don't have to do both by hand 2026-04-23 11:11:05 +02:00

Opened #312 refactor(ui): use bg-surface token instead of bg-white on thumbnail tiles 2026-04-23 20:31:36 +02:00

Opened #313 test(briefwechsel): capture visual-regression baselines for the row layout 2026-04-23 21:10:02 +02:00

Opened #315 feat(documents): paginate /documents search so first paint isn't 1500 rows 2026-04-23 22:40:42 +02:00

Opened #317 feat(documents): bulk upload — split-panel with file switcher 2026-04-24 10:33:29 +02:00

Opened #318 feat(mobile): reader surfaces (Home · /documents · /briefwechsel · /persons) pass mobile-first bar at 375 px 2026-04-24 13:22:03 +02:00

Opened #319 fix(i18n): translate viewer + Transcribe panel controls so EN/ES locales do not show German labels 2026-04-24 13:22:31 +02:00

Opened #320 feat(transcribe): guided empty state + Kurrent primer for first-time transcribers 2026-04-24 13:23:11 +02:00

Opened #321 feat(transcribe): show visible per-document transcription progress in the panel header 2026-04-24 13:23:47 +02:00

Opened #322 fix(document-viewer): surface error + retry when file load stalls instead of spinning forever 2026-04-24 13:24:20 +02:00

Opened #323 feat(persons): visually distinguish incomplete placeholder persons + filter by completeness on /persons 2026-04-24 13:24:54 +02:00

Opened #324 feat(admin): /admin lands on a real dashboard instead of redirecting to /admin/users 2026-04-24 13:25:25 +02:00

Opened #325 feat(tags): split flat tag taxonomy into documentType + event + freeform dimensions 2026-04-24 13:26:09 +02:00

Opened #326 feat(admin): informative empty states on master-detail pages (Users · Groups · Tags · Invites) 2026-04-24 13:26:41 +02:00

Opened #327 feat(transcribe): keyboard shortcuts for the transcribe power path + cheatsheet overlay 2026-04-24 13:27:13 +02:00

Opened #328 feat(login): add show/hide password toggle on the sign-in form 2026-04-24 13:27:27 +02:00

Opened #332 refactor: bulk-edit follow-ups deferred from PR #331 2026-04-25 17:00:44 +02:00

Opened #334 feat(admin): Storage panel on admin dashboard — MinIO admin API integration 2026-04-26 13:03:54 +02:00

Opened #335 feat(admin): activity panel on admin dashboard — system-wide weekly contribution counts 2026-04-26 14:14:50 +02:00

Opened #336 feat(audit): track user management events in audit log (USER_CREATED, USER_DELETED, GROUP_MEMBERSHIP_CHANGED) 2026-04-26 14:17:33 +02:00

Opened #338 feat(briefwechsel): discovery landing grid + gap markers 2026-04-26 18:39:29 +02:00

Opened #339 feat(viewer): show delete icon directly on transcription annotation 2026-04-26 19:56:16 +02:00

Opened #340 feat(search): add direct page-jump control to document search pagination 2026-04-26 19:56:24 +02:00

Opened #341 bug(viewer): "Annotieren anzeigen" text has insufficient contrast in light mode 2026-04-26 19:56:30 +02:00

Opened #342 feat(persons): show merge action inline with danger hint, remove Gefahrenzone collapsible 2026-04-26 19:56:35 +02:00

Opened #343 bug(persons): person selection dropdown is visually clipped / cut off 2026-04-26 19:56:36 +02:00

Opened #344 feat(nav): add tooltip and cursor:pointer to notification bell icon 2026-04-26 19:56:39 +02:00

Opened #345 feat(transcription): add "Alle als fertig markieren" bulk action to transcription panel 2026-04-26 19:56:41 +02:00

Opened #353 test(a11y): add axe-playwright E2E gate for PDF viewer WCAG 2.1 AA compliance 2026-04-26 21:26:43 +02:00

Opened #354 fix(a11y): increase annotation toggle touch target to 44×44px minimum 2026-04-26 21:26:51 +02:00

Opened #355 feat(transcription): E2E test for bulk "Alle als fertig markieren" action 2026-04-27 08:12:37 +02:00

Opened #356 ux(transcription): show error toast when bulk "Alle als fertig markieren" fails 2026-04-27 08:12:43 +02:00

Opened #357 chore(transcription): track handleAnnotationDeleteRequest wiring from PR #352 2026-04-27 08:12:52 +02:00

Opened #358 feat: Stammbaum — family relationship graph replaces Briefwechsel in nav 2026-04-27 10:01:07 +02:00

Opened #359 feat: Stammbaum — Mode B social network view (D3-Force, all persons) 2026-04-27 10:16:57 +02:00

Opened #361 tech-debt: replace Stammbaum DIY layout with a graph-layout dep (dagre) when it stops scaling 2026-04-27 22:45:26 +02:00

Opened #362 feat: Person @mentions in transcription blocks with hover card 2026-04-28 12:16:14 +02:00

Opened #363 devops: add Playwright E2E job to CI for stammbaum spec 2026-04-28 12:57:45 +02:00

Opened #364 feat(stammbaum): show maiden name (geb. Schmidt) below person name in tree and side panel 2026-04-28 18:34:39 +02:00

Opened #367 security(transcription): CWE-79 — escapeHtml required for @mention rendering in PR-B 2026-04-28 23:46:21 +02:00

Opened #368 feat(persons): audit + complete person-merge flow for all data domains 2026-04-28 23:50:33 +02:00

Opened #370 feat(person-mention): discoverability hint for the @ trigger in the editor 2026-04-29 01:26:59 +02:00

Opened #372 Person mention: decouple display text from person name to preserve original wording 2026-04-29 08:59:33 +02:00

Opened #374 GET /api/persons leaks PersonSummaryDTO.notes to typeahead clients (CWE-200) 2026-04-29 16:22:31 +02:00

Opened #376 feat: auto-open transcription panel when navigating from mission-control cards 2026-04-29 21:12:27 +02:00

Opened #380 feat(transcription): decouple @mention display text from person search 2026-04-30 10:54:43 +02:00

Opened #381 feat: Geschichten — blog-like family memory stories linked to persons and documents 2026-05-02 09:33:24 +02:00

Opened #383 refactor(geschichte): switch entity to LAZY fetch and add GeschichteSummary projection DTO 2026-05-02 18:54:13 +02:00

Opened #384 test(e2e): expand Geschichten Playwright suite with full a11y + visual regression coverage 2026-05-02 18:54:22 +02:00

Opened #385 feat(documents): timeline date-range filter with density bars 2026-05-03 09:02:40 +02:00

Opened #386 feat(documents): calendar view with appointment-style document rows 2026-05-03 09:02:53 +02:00

Opened #387 epic(legibility): audit — assess current state of every subsystem 2026-05-04 16:01:17 +02:00

Opened #388 audit(frontend): score frontend/ against legibility rubric C1–C10 2026-05-04 16:03:30 +02:00

Opened #389 audit(backend): score backend/ against legibility rubric C1–C10 2026-05-04 16:03:53 +02:00

Opened #390 audit(ocr-service): score ocr-service/ against legibility rubric C1–C10 2026-05-04 16:04:10 +02:00

Opened #391 audit(db): score Flyway migrations + DB schema against legibility rubric 2026-05-04 16:04:29 +02:00

Opened #392 audit(rest): score infra/, scripts/, root, docs/ against legibility rubric 2026-05-04 16:04:53 +02:00

Opened #393 audit(rollup): produce global readiness scorecard from subsystem audits 2026-05-04 16:05:09 +02:00

Opened #394 epic(legibility): documentation — make the codebase self-explaining 2026-05-04 16:06:37 +02:00

Opened #395 docs(legibility): write human-targeted README.md at repo root 2026-05-04 16:07:22 +02:00

Opened #396 docs(legibility): write docs/ARCHITECTURE.md with diagram and domain list 2026-05-04 16:07:41 +02:00

Opened #397 docs(legibility): write docs/GLOSSARY.md disambiguating overloaded terms 2026-05-04 16:08:08 +02:00

Opened #398 docs(legibility): write CONTRIBUTING.md with three concrete walkthroughs 2026-05-04 16:08:41 +02:00

Opened #399 docs(legibility): write docs/DEPLOYMENT.md (production runtime + env vars) 2026-05-04 16:08:47 +02:00

Opened #400 docs(legibility): add per-domain README.md inside every domain package 2026-05-04 16:09:08 +02:00

Opened #401 docs(legibility): migrate CLAUDE.md rules into human docs; mark migrated content 2026-05-04 16:09:28 +02:00

Opened #402 epic(legibility): pre-flight — make tests trustworthy before big-bang refactor 2026-05-04 16:10:25 +02:00

Opened #403 test(legibility): mutation-test critical backend service tests; flag tautologies 2026-05-04 16:10:55 +02:00

Opened #404 test(legibility): rewrite tautological tests revealed by TEST-1 2026-05-04 16:11:09 +02:00

Opened #405 test(legibility): verify e2e suite covers every critical user journey 2026-05-04 16:11:26 +02:00

Opened #406 epic(legibility): big-bang restructure — backend layer→domain, frontend lib→domain 2026-05-04 16:12:31 +02:00

Opened #407 refactor(backend): restructure from layer-based to domain-based packaging 2026-05-04 16:13:40 +02:00

Opened #408 refactor(frontend): restructure lib/ from flat-by-type to domain-based 2026-05-04 16:14:35 +02:00

Opened #409 refactor(backend): add ArchUnit test enforcing domain boundaries 2026-05-04 16:14:51 +02:00

Opened #410 refactor(frontend): add ESLint rule preventing cross-domain imports 2026-05-04 16:15:10 +02:00

Opened #411 epic(legibility): polish — remove smells surfaced by audits 2026-05-04 16:16:33 +02:00

Opened #412 cleanup(legibility): remove dead code identified by audits 2026-05-04 16:17:02 +02:00

Opened #413 cleanup(legibility): rewrite vague comments; remove "ask Marcel" markers 2026-05-04 16:17:17 +02:00

Opened #414 cleanup(legibility): rename Helper/Utils/Manager violators to express intent 2026-05-04 16:17:34 +02:00

Opened #415 cleanup(legibility): repo hygiene — proofshot retention, ignore .agent/.worktrees 2026-05-04 16:17:53 +02:00

Opened #416 audit(legibility): re-run readiness scorecard; ratify "ready for evaluation" 2026-05-04 16:18:18 +02:00

Opened #417 fix(backend): resolve cross-domain repo + controller→repo violations before REFACTOR-1 2026-05-04 16:41:08 +02:00

Opened #418 decide(backend): resolve users-table / AppUser-entity naming mismatch before REFACTOR-1 2026-05-04 16:41:59 +02:00

Opened #423 fix(test): resolve pre-existing TranscriptionEditView and Richtlinien test failures 2026-05-05 15:21:53 +02:00

Opened #424 refactor(frontend): move statusDotClass/statusLabel from person/ to document/ 2026-05-05 15:22:02 +02:00

Opened #425 fix(test): make browser-project tests contribute to coverage measurement 2026-05-05 15:29:57 +02:00

Opened #427 refactor(backend): ArchUnit Rule 5 — enforce controller @RequestMapping URL prefix per domain 2026-05-05 17:12:51 +02:00

Opened #431 test(e2e): follow-up gaps from legibility pre-flight (#402) 2026-05-05 19:11:57 +02:00

Opened #432 docs(legibility): write human-targeted root README.md (DOC-1) 2026-05-05 21:06:01 +02:00

Opened #433 docs(legibility): write docs/ARCHITECTURE.md with diagram, domains, security model (DOC-2) 2026-05-05 21:06:32 +02:00

Opened #434 docs(legibility): write docs/GLOSSARY.md disambiguating overloaded terms (DOC-3) 2026-05-05 21:07:03 +02:00

Opened #435 docs(legibility): write CONTRIBUTING.md with three walkthroughs and Testing section (DOC-4) 2026-05-05 21:07:42 +02:00

Opened #436 docs(legibility): write docs/DEPLOYMENT.md as Day-1 production checklist (DOC-5) 2026-05-05 21:08:15 +02:00

Opened #437 docs(legibility): write 18 README.md files for canonical domain packages (DOC-6) 2026-05-05 21:08:46 +02:00

Opened #438 docs(legibility): migrate CLAUDE.md rules to human docs via pointer comments (DOC-7) 2026-05-05 21:09:29 +02:00

Opened #447 feat(dashboard): permission-gated reader dashboard for READ_ALL / BLOG_WRITE users 2026-05-06 10:10:46 +02:00

Opened #451 Add database ER and ORM diagrams (PlantUML) 2026-05-06 23:34:33 +02:00

Opened #453 refactor(admin): dedicated /api/admin/stats endpoint returning counts only 2026-05-07 09:24:48 +02:00

Opened #454 feat(chronik): add commentPreview field to ActivityFeedItemDTO 2026-05-07 09:24:58 +02:00

Opened #457 security(deps): bump Spring Boot to 4.0.6 to clear 2 CRIT + 17 HIGH CVEs 2026-05-07 17:21:13 +02:00

Opened #458 security(deps): bump @sveltejs/kit + vite to clear BODY_SIZE_LIMIT bypass + 5 high devDep CVEs 2026-05-07 17:21:33 +02:00

Opened #459 security(ocr): run OCR container as non-root user (CIS Docker §4.1) 2026-05-07 17:21:55 +02:00

Opened #460 security(history): scrub admin:admin123 from .claude/skills/transcribe/SKILL.md git history 2026-05-07 17:22:18 +02:00

Opened #461 devops(ci): add SAST/SCA/secret-scan/container-scan gates to .gitea/workflows/ci.yml 2026-05-07 17:22:49 +02:00

Opened #462 feat(observability): add handleError hook with structured stdout sink 2026-05-07 17:23:16 +02:00

Opened #463 feat(resilience): wrap OCR client with Resilience4j retry + circuit-breaker + time-limiter 2026-05-07 17:24:25 +02:00

Opened #464 security(uploads): integrate ClamAV scan before persisting documents to MinIO 2026-05-07 17:24:57 +02:00

Opened #465 refactor(frontend): replace raw fetch with event.fetch in admin/enrich routes (handleFetch bypass) 2026-05-07 17:25:18 +02:00

Opened #466 refactor(api): migrate GlobalExceptionHandler to RFC 9457 ProblemDetail 2026-05-07 17:25:41 +02:00

Opened #467 refactor(document): switch Document.tags + receivers + trainingLabels to LAZY + @EntityGraph 2026-05-07 17:26:13 +02:00

Opened #468 fix(documents): paginate FTS match-set in SQL instead of loading all matching IDs 2026-05-07 17:26:47 +02:00

Opened #469 fix(db): add primary key to group_permissions to prevent duplicate grants 2026-05-07 17:27:46 +02:00

Opened #470 fix(db): add indexes on documents.sender_id and document_comments.author_id 2026-05-07 17:28:06 +02:00

Opened #471 fix(user): replace Math.abs(hashCode()) in AppUser.computeColor (negative on Integer.MIN_VALUE) 2026-05-07 17:28:25 +02:00

Opened #472 fix(build): unbreak production build — /hilfe/transkription prerender unreachable behind /login 2026-05-07 17:28:47 +02:00

Opened #473 fix(api): add explicit @PathVariable name on transcription-block comment endpoints 2026-05-07 17:29:14 +02:00

Opened #474 cleanup(ocr): use %n instead of \n in TrainingDataExportService format string 2026-05-07 17:29:29 +02:00

Opened #476 fix(ci): two persistent CI failures — date-buckets timezone + Testcontainers Docker 2026-05-07 20:26:28 +02:00

Opened #479 feat(documents): keyboard-accessible range zoom for timeline 2026-05-08 10:12:06 +02:00

Opened #480 test(documents): timeline density Playwright coverage 2026-05-08 10:12:20 +02:00

Opened #481 perf(documents): move density aggregation into SQL when documents > 50k 2026-05-08 11:39:30 +02:00

Opened #482 fix(documents): filter inputs don't sync with URL — Sender/Receiver blank on load, fields don't clear on reset 2026-05-08 12:14:41 +02:00

Opened #483 fix(dashboard): align reader dashboard with reader-dashboard-final spec 2026-05-08 16:15:43 +02:00

Opened #496 Increase browser component test coverage to ≥ 80% on all metrics (statements, lines, branches, functions) 2026-05-09 18:43:54 +02:00

Opened #497 devops: production deployment — Caddy, staging env, and Gitea Actions CI/CD 2026-05-10 19:52:35 +02:00

Opened #498 devops: production observability stack — Prometheus, Loki, Grafana, Alertmanager 2026-05-10 20:47:48 +02:00

Opened #500 devops: bootstrap Renovate config for production deps (MinIO, mc, Postgres, Node, Caddy, mailpit) 2026-05-11 13:19:22 +02:00

Opened #501 test(ci): production image smoke-test job — boot frontend + backend images, curl /login 2026-05-11 13:19:38 +02:00

Opened #502 devops: nightly backup pipeline — pg_dump + mc mirror over Tailscale to heim-nas 2026-05-11 13:20:00 +02:00

Opened #503 bug(infra/fail2ban): jail defaults to systemd backend on Debian, never inspects Caddy access log 2026-05-11 14:58:50 +02:00

Opened #506 bug(infra/minio): create-buckets bootstrap.sh bind-mount fails on DooD runner (Is a directory) 2026-05-11 15:31:42 +02:00

Opened #508 bug(workflows): deploy workflows use runs-on: self-hosted but runner advertises ubuntu-latest — jobs never picked up 2026-05-11 16:15:46 +02:00

Opened #510 bug(compose): up -d --wait treats create-buckets exit(0) as failure 2026-05-11 16:32:12 +02:00

Opened #512 bug(caddy): respond @actuator 404 swallowed by catch-all handle; /actuator/health returns 302 2026-05-11 16:34:15 +02:00

Opened #513 bug(user): admin seed ignores APP_ADMIN_USERNAME / PASSWORD — falls back to defaults (HIGH, prod-blocking) 2026-05-11 16:35:26 +02:00

Opened #514 bug(frontend): SvelteKit prerender-crawl bakes redirect-to-login into static HTML for protected routes (HIGH, prod-blocking) 2026-05-11 16:52:24 +02:00

Opened #518 bug(user): UserDataInitializer blind-INSERTs Administrators group; fails on retry (HIGH, prod-blocking) 2026-05-11 17:25:37 +02:00

Opened #520 bug(security): browser-side /api/* requests miss Authorization in production → browser shows Basic-auth popup 2026-05-11 17:31:58 +02:00

Opened #522 tech-debt(auth): replace cookie-promotion glue with a proper session-based auth model 2026-05-11 18:20:55 +02:00

Opened #523 feat(auth): server-side session model replacing Basic-auth cookie promotion 2026-05-11 18:49:05 +02:00

Opened #524 feat(auth): defense-in-depth — CSRF, session revocation, login rate limit 2026-05-11 18:50:20 +02:00

Opened #527 "Unsaved changes" banner appears after creating a group/user — users think save failed 2026-05-11 19:06:41 +02:00

Opened #528 security(import): harden DocumentBuilderFactory against XXE in MassImportService 2026-05-11 20:13:22 +02:00

Opened #529 security(import): validate PDF magic bytes in MassImportService before S3 upload 2026-05-11 20:13:32 +02:00

Opened #530 security(import): reject path-traversal filenames from ODS in MassImportService.processRows 2026-05-11 20:13:41 +02:00

Opened #531 ci(nightly): post-deploy smoke test for /api/admin/import-status 2026-05-11 20:13:52 +02:00

Opened #532 ci(nightly): assert backend container can read /import after deploy 2026-05-11 20:13:57 +02:00

Opened #533 ui(admin/system): improve mass-import status card (loading state, i18n, font size) 2026-05-11 20:14:08 +02:00

Opened #534 spec(import): decide and document mass-import operator policy (3 open questions) 2026-05-11 20:14:22 +02:00

Opened #535 Unit & Component Tests job exits 1 from vitest-browser teardown race — every test green but CI red 2026-05-11 20:54:40 +02:00

Opened #538 bug(test): flaky browser-mode test — admin edit-user unsaved-changes guard 2026-05-11 22:46:07 +02:00

Opened #539 ci: extract Reload Caddy step into a composite action 2026-05-11 22:54:55 +02:00

Opened #541 test: fix flaky browser-mode tests in AnnotationShape and OcrTrainingCard specs 2026-05-12 09:35:57 +02:00

Opened #542 test: share fakePdfjs fixture across viewer test files 2026-05-12 09:39:45 +02:00

Opened #543 UX: PDF viewer has no loading indicator or error state when pdfjs-dist fails to initialise 2026-05-12 09:39:53 +02:00

Opened #545 fix(test): NotificationDropdown "view-all link" test causes iframe navigation crash in CI 2026-05-12 10:20:20 +02:00

Opened #546 test: PdfViewer.svelte.test.ts re-introduces banned vi.mock('pdfjs-dist') factory — restores birpc teardown race 2026-05-12 10:31:13 +02:00

Opened #551 fix(test): NotificationDropdown view-all click navigates iframe — breaks vitest coverage 2026-05-12 16:16:25 +02:00

Opened #553 Unit & Component Tests job exits 1 — birpc teardown race resurfaces from async vi.mock factory with dynamic import 2026-05-12 18:07:05 +02:00

Opened #554 audit: factory mocks → prop injection migration (sveltest pattern) 2026-05-13 10:02:51 +02:00

Opened #556 ci(coverage): drop client-project branches threshold 80 → 70 to unblock CI 2026-05-13 12:57:12 +02:00

Opened #557 ci(devops): downgrade actions/upload-artifact v4 → v3 (re-regression — needs ADR to prevent future re-upgrade) 2026-05-13 12:57:25 +02:00

Opened #560 audit report: factory vi.mock → prop-injection / __mocks__ migration (87 call sites, 12 modules) 2026-05-14 10:37:24 +02:00

Opened #566 feat(admin): assign groups when creating an invite link 2026-05-14 11:41:11 +02:00

21 Unresolved Conversations

Open #83 fix(security): remove hardcoded fallback admin credentials in application.yaml 2026-05-07 17:40:12 +02:00

Open #84 fix(security): validate file upload MIME type from magic bytes, not client header 2026-05-07 17:39:02 +02:00

Open #140 Add Prometheus + Loki + Grafana monitoring stack 2026-05-07 17:38:31 +02:00

Open #142 Add build-and-push and deploy jobs to CI workflow 2026-05-07 17:38:28 +02:00

Open #124 Add Playwright visual regression tests at 320px, 768px, and 1440px breakpoints 2026-05-07 17:38:04 +02:00

Open #87 fix(security): explicitly restrict Spring Boot Actuator endpoints in production config 2026-05-07 17:38:00 +02:00

Open #134 Build production-ready multi-stage Dockerfile for the backend 2026-05-07 17:37:52 +02:00

Open #135 Build production-ready multi-stage Dockerfile for the frontend 2026-05-07 17:37:52 +02:00

Open #137 Add application-prod.yaml with secure Spring Boot production defaults 2026-05-07 17:20:08 +02:00

Open #138 Add automated PostgreSQL backup script with offsite upload 2026-05-07 17:19:54 +02:00

Open #139 Create .env.example and DEPLOYMENT.md for production onboarding 2026-05-07 17:19:54 +02:00

Open #141 Add Hetzner VPS to Tailscale tailnet for private deployment access 2026-05-07 17:19:44 +02:00

Open #116 fix(security): add Content-Security-Policy headers to SvelteKit responses 2026-05-07 17:19:14 +02:00

Open #111 fix(security): add rate limiting to login and password-reset endpoints 2026-05-07 17:18:51 +02:00

Open #86 fix(security): set secure: true on auth cookie for production (HTTPS) 2026-05-07 17:18:30 +02:00

Open #95 bug(mobile): "SAVE & MARK AS REVIEWED" and "MARK FOR REVIEW" buttons wrap to 3 lines at narrow widths 2026-04-24 13:35:17 +02:00

Open #117 fix(a11y): add skip-to-main-content link in layout for keyboard navigation 2026-04-24 13:35:17 +02:00

Open #216 feat: support multiple senders per document 2026-04-24 13:24:55 +02:00

Open #51 As a user I want to split a combined person entry into separate persons so I can clean up incorrectly merged import data 2026-04-24 13:24:55 +02:00

Open #214 feat(parser): support multi-person splitting for Von-column entries 2026-04-24 13:24:55 +02:00

Open #223 feat: add sorting options to person list page 2026-04-24 13:24:55 +02:00