Search now covers handwriting, the PDF text layer, AND scanned
(rasterized) PDFs.
- PdfTextIndexer runs at import: sums the embedded text layer across
pages; if present it stores that as the document body, otherwise the
PDF is rasterized and its rendered pages are OCR'd in the background.
The result lands in the sidecar `pageText` field (distinct from
`ocrText`, the handwriting OCR). Idempotent (skips a sidecar that
already has pageText); degrades gracefully with no OCR engine.
- pdfrx_page_text_source abstracts text/render so it's testable.
- VaultSearchIndex now harvests title + typed text + handwriting OCR +
PDF pageText, so search finds notes, typed PDFs and scanned PDFs.
analyze clean, 409 tests green.
Phase 6 (final storage phase).
- SidecarRepositoryRegistry tracks every open repo; SidecarFlushObserver
(a WidgetsBindingObserver in main) flushes them all on
inactive/hidden/paused/detached, awaiting each flush — the last
strokes can't be lost on app close, not just on the 800ms timer.
- VaultSearchIndex rebuilds by scanning vault sidecars (the source of
truth) — note titles, OCR text and document names — and search_provider
queries it, so search spans notes + PDFs. Rebuilt on launch / after
import.
The vault file-based storage migration (Phases 0-6) is complete:
annotations travel with the file, picked vault folder, atomic autosave,
one Import-file entry, SQLite migrated to sidecars. analyze clean,
tests green.