Phase 5. On first launch with a valid vault, migrate legacy SQLite
data into vault sidecars so nothing is lost on upgrade.
- SqliteToSidecarMigrator: documents (+ per-page ink, scratch-links
+ scratchpads, bookmarks) -> notebook folder + <file>.badnote.json;
notes (+ strokes) -> notebook.badnote.json. Reuses existing JSON.
- Idempotent (skips already-migrated targets); missing source files
still get their annotations migrated.
- DB relocates to <vault>/.badnote/index.sqlite; the legacy DB is
renamed to .premigration ONLY after a successful pass, so a failed
migration leaves data intact and the run-once flag unset.
- main.dart runs it once, gated on vaultMigrationDone.
Golden migrator tests (seeded legacy DB -> sidecars, idempotent
re-run, legacy preserved). analyze clean, tests green.