# V1 Data Migration and Recovery Guidance This document defines migration/backfill and rollback guidance for the V1 SQLite baseline. ## Purpose - provide safe procedures for local schema evolution and recovery - reduce data-loss risk during version upgrades - establish repeatable pre-change and post-change checks ## Current Baseline - canonical relational store: SQLite - default DB path: `./transcription.db` - schema bootstrap may apply compatibility updates for dev/test scenarios ## Pre-Change Checklist Before changing runtime version or schema behavior: 1. Stop the app process. 2. Create a timestamped DB backup copy. 3. Capture current app commit/version. 4. Export a quick status inventory: - job counts by status - total documents/sources/revisions 5. Ensure sufficient disk space. ## Backup Procedure (SQLite) Minimum procedure: 1. Stop app. 2. Copy DB file to a safe location with timestamp. 3. Store backup path in release notes or change log. ## Upgrade Procedure (V1) 1. Perform pre-change checklist. 2. Deploy updated app version. 3. Start app and observe startup logs. 4. Verify schema bootstrap completes (if enabled). 5. Run smoke flow: - upload valid file - observe terminal status - open job detail ## Backfill Guidance V1 backfill is limited and conservative: - for records missing newly introduced non-null defaults, use explicit one-time SQL updates only after backup - avoid destructive rewrites of `Job.text` or `Revision.text` - never backfill by overwriting original immutable transcription output ## Rollback Procedure If upgrade fails or causes data inconsistency: 1. Stop app. 2. Restore prior DB backup file. 3. Revert app version to last known-good commit. 4. Restart app. 5. Run smoke flow and confirm stability. ## Recovery Scenarios ### Stale processing jobs after crash/restart - restart app and allow stale-job recovery to re-queue timed-out `processing` jobs - monitor for terminal progression ### Schema mismatch symptoms - errors during startup or writes indicating missing columns/indexes - rollback to last good DB + app version - reattempt with documented upgrade path ## Validation Evidence For each upgrade rehearsal, capture: - backup filename/path - pre and post job status counts - smoke test result - rollback rehearsal result (recommended) ## Operational Constraints - treat DB backups as required before non-trivial upgrades - do not perform in-place DB edits while app is running - do not skip post-upgrade smoke validation