• v0.6.6-rc4 9468ce3314

    v0.6.6-rc4
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/tag Build is passing
    Stable

    admin-mrrm released this 2026-06-07 01:37:45 +02:00 | 166 commits to main since this release

    Folge-RC zu rc3: nachdem rc3 auf dem Gerät 0 Chunks AND 0 Fehler meldete, hängt höchstwahrscheinlich der Embedder still beim Modell-Download (~120 MB ONNX) oder beim Laden. rc4 routet den embeddingService-Lifecycle (idle / downloading N% / loading / ready / error) durch einen neuen EmbedderStatusPort an die Debug-Bar, damit man auf dem Gerät genau sieht wo es klemmt.

    Highlights

    • feat(search): EmbedderStatusPort an SearchPorts (#122) — Debug-Bar zeigt jetzt 'embedder: downloading 47%' / 'ready' / 'error: …' und entlarvt damit silent failures, die in der Release-APK sonst unsichtbar bleiben (Hermes strippt console).
    • Lazy-Native-Boundary bleibt intakt: die Route importiert embeddingService nicht direkt, sondern bekommt nur den Port — vitest fasst onnxruntime-react-native weiterhin nie an.
    Downloads
  • v0.6.6-rc3 8cbea0b5f1

    v0.6.6-rc3
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/tag Build is passing
    Stable

    admin-mrrm released this 2026-06-06 23:22:10 +02:00 | 168 commits to main since this release

    Folge-RC zu rc2: nachdem der Debug-Indexier-Button erfolgreich Events publisht, die Suche aber leer bleibt, ergänzt rc3 in der gelben Debug-Bar einen Counter (Chunks indexed) + Fehler-Anzeige (last error). Notwendig weil Release-APKs Hermes-console.log strippen und logcat damit blind ist — ohne diese Bar gibt es keinerlei On-Device-Sichtbarkeit für Embedder- oder Vector-Store-Failures.

    Highlights

    • feat(search): Debug-Bar abonniert ports.indexing.onProgress (#122) — running totals für chunk-indexed + error events, plus letzte Fehlermeldung mit sourceType-Präfix.
    • Reine Diagnose-Iteration: keine Logik-Änderung an Embedder / IndexingService / VectorStore. Wird mit rc-Cleanup vor dem Phase-1-Final entfernt.
    Downloads
  • v0.6.6-rc2 c9dbccc69c

    v0.6.6-rc2
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/tag Build is passing
    Stable

    admin-mrrm released this 2026-06-06 19:08:48 +02:00 | 172 commits to main since this release

    Folge-RC zu rc1: ergänzt einen temporären Debug-Button auf der Suche-Route, der für alle Shopping-Listen und Notizen des Users 'created'-Events in die IndexingService-Queue feuert. Notwendig weil der api-client noch keine Mutation-Observer-Hooks publisht (kommt als Task B / Folge-PR) — ohne diesen Button bleibt der Index auf einem echten Gerät leer und das Stack-Wireup lässt sich nicht validieren.

    Highlights

    • feat(search): Debug-Index-Button (#122) — gelbe Bar oberhalb der Suche-Eingabe; ruft ports.debugIndexAll() auf und meldet, wie viele Listen/Notizen in die Queue gewandert sind.
    • search-ports erweitert um debugIndexAll() — fächert publish('created') über ShoppingListDataSource und NoteDataSource auf; Mail bleibt ausgeklammert bis #438 die sourceId-Enumeration löst.
    • Wird mit der ordentlichen Mutation-Observer-Wireup-Iteration (Task B, Folge-PR gegen #122) entfernt — bis dahin auf jedem Device-Test-Build sichtbar.
    Downloads
  • v0.6.6-rc1 1728f15c88

    v0.6.6-rc1
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/tag Build is passing
    Stable

    admin-mrrm released this 2026-06-06 18:01:37 +02:00 | 174 commits to main since this release

    Erste verdrahtete Vorabversion von Phase 1 der KI-Foundation (#122): on-device Embedding-Modell + sqlite-vec + Background-Indexing + Suche-UI. Reiner Device-Test-Build — vor Merge nach main muss der Physical-Device-Pass laut apps/mobile/docs/ai-foundation-verification.md grün sein.

    Highlights

    • feat(ai): Phase-1-Wireup (#122, PR #444) — verdrahtet EmbeddingService + VectorStore + DataSourceRegistry + IndexingService hinter der Suche-Route; native Bindings (op-sqlite + onnxruntime) werden lazy beim Route-Render konstruiert.
    • Sub-Issues #439–#443 abgeschlossen: multilingual-e5-small on-device, sqlite-vec via op-sqlite, IDataSource-Adapter für Mails/Listen/Notizen, IndexingService mit Hash-Dedup + Backoff, Suche-UI mit Filter-Chips + Privacy-Hinweis.
    • Initial-Index-Backfill bewusst noch deaktiviert — wartet auf den Ladung + Wifi-Trigger (#438); RC1 indiziert ausschließlich inkrementell auf jede Mutation.
    Downloads
  • v0.6.5 287e525172

    v0.6.5
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/tag Build is passing
    Stable

    admin-mrrm released this 2026-06-03 01:53:04 +02:00 | 188 commits to main since this release

    Lint-Konfiguration vereinheitlicht: alle 11 Workspaces nutzen jetzt das gleiche @mrrmlab/config Flat-Config-Preset (base/node/react). CI lintet wieder das gesamte Monorepo statt nur api + shared-types.

    Highlights

    • chore(lint): ESLint v9 Flat-Config in feature-lists, feature-shopping-list, feature-tracking, ui, api-client, auth, mobile (#409) — 7 neue eslint.config.mjs, alle dünn (re-export aus @mrrmlab/config) — kein eigenes Regelwerk pro Paket.
    • Aufgesammelte Lint-Errors gefixt: ungenutzte Imports (Spinner, z, storeSchema, TagChip), unescaped Quotes in JSX (5x), useless escape im Regex, leere Interface-Augmentation (tamagui.config), import()-Type-Annotation in mail/hooks.
    • .drone.yml lint-Step linst jetzt alle Pakete (entfernter --filter), shared-types/api eslint.config.js → .mjs gegen MODULE_TYPELESS-Warnings.
    Downloads
  • v0.6.4 33559dd88b

    v0.6.4
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/tag Build is passing
    Stable

    admin-mrrm released this 2026-06-02 01:04:40 +02:00 | 192 commits to main since this release

    Vor parseText sieht der User die von ML Kit erkannten Zeilen-Boxen auf dem Foto und kann sie kuratieren: einzelne Boxen ignorieren, zwei zu einer mergen, fehlende Boxen per '+' selbst aufziehen oder bestehende per Drag-Handles in Größe/Position anpassen. Re-OCR läuft automatisch nur auf den geänderten oder neu erzeugten Boxen.

    Highlights

    • feat(ocr): Lines-Review-Screen zwischen ML Kit und Review (#327) — Tap = ignore, Long-press = Edit-Modus mit 4 Resize-Handles + Verschieben per Body-Drag, Toolbar mit Aktivieren/Mit-mergen/Löschen, '+ Box' für fehlende Zeilen.
    • Pure line-curation Modul (apps/mobile/src/services/line-curation.ts) — fromOcrLines / toggleIgnore / mergeLines / resizeLine / createLine / deleteLine + dirty-Tracking; 17 Vitest-Cases.
    • crop-math: imageRectToContainer als Inverse von containerToImageRect (für Box-Positionierung im Container-Space) — 11 Tests.
    • Re-OCR via ML Kit auf jeder dirty Box (neu/resized/merged) vor parseText, fällt auf Originaltext zurück wenn nichts erkannt wird.
    Downloads
  • v0.6.3 e75b40b811

    v0.6.3
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/tag Build is passing
    Stable

    admin-mrrm released this 2026-05-31 02:28:07 +02:00 | 194 commits to main since this release

    Der User kann vor der Analyse einen Rahmen über das Foto ziehen, um nur den Zettel-Bereich an die OCR zu geben. Tischrand, Hintergrund und Nachbar-Zettel landen nicht mehr im ML-Kit-Input — saubere Erkennung ohne Cluster-Filter-Heuristik als Krücke.

    Highlights

    • feat(ocr): Pre-Crop-UI im Image-Preview (#326) — vier Eck-Handles auf Reanimated SharedValues + Gesture-Handler, dimmed Maske außerhalb des Rahmens, axis-aligned Rechteck mit MIN_RECT=40 und Bounds-Clamping.
    • Pure Crop-Math als testbares Modul (apps/mobile/src/services/crop-math.ts) mit 10 Vitest-Cases für computeDisplayedImage / containerToImageRect / clampRectInImage / isFullImageRect.
    • Crop wird vor ML-Kit und Server-OCR via expo-image-manipulator angewendet; bei Rotation wird der Rahmen zurückgesetzt.
    Downloads
  • v0.6.2 45f841bc72

    v0.6.2
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/tag Build is passing
    Stable

    admin-mrrm released this 2026-05-29 13:36:07 +02:00 | 196 commits to main since this release

    Bei abgelaufenem ID-Token zeigt die App keine alten Daten mehr an, sondern landet zuverlässig auf dem Login. Vorher: API gab korrekt 401 zurück, aber TanStack Query behielt die gecachten Listen, sodass der User trotz fehlender Auth weiter Daten sah.

    Highlights

    • fix(auth): clear cache + force re-auth on 401 (#408, #429) — typed AuthError im api-client, globaler 401-Handler in @mrrmlab/ui macht qc.clear() + Logout-Redirect.
    • Integration-Test für expired JWT → 401 ergänzt; Vitest-Infra in @mrrmlab/api-client und @mrrmlab/ui nachgezogen.
    Downloads
  • v0.6.1 e7f7658ba5

    v0.6.1
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/tag Build is passing
    Stable

    admin-mrrm released this 2026-05-29 00:02:25 +02:00 | 199 commits to main since this release

    Manuelle OCR-Korrektur wird einfacher: jedes erkannte Item zeigt im Review-Screen den dazugehörigen Bildausschnitt seiner handschriftlichen Zeile. Branding-Spalten (Logos, Footer) werden automatisch aus dem ML-Kit-Output gefiltert, bevor parseText läuft.

    Highlights

    • feat(ocr): per-line crops + main-cluster filter (#428) — pro ML-Kit-Zeile ein eigener Bild-Crop via expo-image-manipulator; filterToMainCluster() splittet Zeilen nach X-Position und behält nur den Cluster mit größter vertikaler Ausdehnung.
    • Folge-UX als #427 dokumentiert: User markiert Listenbereich vor OCR (Pre-Crop-Rechteck).
    Downloads
  • v0.6.0 48dc3fcfe3

    v0.6.0
    All checks were successful
    continuous-integration/drone/push Build is passing
    continuous-integration/drone/tag Build is passing
    Stable

    admin-mrrm released this 2026-05-28 19:30:10 +02:00 | 202 commits to main since this release

    Texterkennung läuft jetzt komplett on-device über Google ML Kit Text Recognition v2 (Latin Script). Bilder verlassen das Gerät nicht mehr, Erkennung erfolgt sofort ohne API-Call. Server-OCR (EasyOCR) bleibt als Backup verfügbar.

    Highlights

    • feat(ocr): on-device OCR via Google ML Kit Text Recognition v2 (#423, #424) — ML-Kit-Modell ~20 MB on-demand über Google Play Services, kein APK-Bloat, Inferenz lokal.
    • feat(ocr): ML-Kit-Integration in den Image-Preview-Flow (#425, #426) — mlkit/de als Default-Modell, neuer POST /lists/parse-text Endpoint wiederverwendet History-Fuzzy-Match auf erkanntem Text.
    • Pivot weg von TrOCR-handwritten (#421/#422 verworfen) — IAM-Korpus-Bias machte das Modell unbrauchbar für deutsche Handschrift.
    Downloads