Implement migration integrity verification for migrate up/down commands#68
Merged
RobbieMcKinstry merged 3 commits intoJan 24, 2026
Merged
Conversation
FEATURE: Add comprehensive integrity verification before migration execution This commit implements the migration integrity verification design: Schema verification: - Add verify_schema_checksum() method to MigrationTracker that computes the live database schema's xxhash3 checksum and compares against the expected value stored in tern.migrations - Add get_schema_hash() method to retrieve a migration's schema checksum - Verify schema integrity before executing migrate up/down commands - Detect when database has been modified outside of Tern migrations Migration hash verification: - Verify migration file content matches what was originally applied - Add MigrationModified error for detecting modified migration files - Check migration hash before reverting in migrate down Error handling: - Add SchemaDrift error variant with detailed diagnostic help - Add MigrationModified error variant with resolution steps - Both errors include expected vs actual checksums and guidance CLI updates: - Add --force flag to migrate up and migrate down commands to skip integrity verification in emergency situations - Display warning when --force is used - Update tern verify to compare against database's schema_hash instead of local state.json (with --include-local-state flag for backwards compatibility) The design follows the principle of detecting both: 1. Database modifications made outside of Tern (via schema checksum) 2. Migration file tampering after application (via migration hash)
FEATURE: Improve --force flag behavior for better transparency Previously, --force would skip integrity verification entirely. Now: - Verification is always performed even when --force is used - If verification fails with --force: print warning and proceed - If verification passes with --force: print "force was unnecessary" - Without --force: error on verification failure (unchanged) This gives users better visibility into the state of their database while still allowing emergency overrides when needed. Changes: - Add check_integrity() method to MigrationExecutor for explicit verification without execution - Add VerificationStatus, SchemaMismatch, and HistoryDivergence types to capture verification results - Update migrate up CLI to call check_integrity() when --force is used - Update migrate down CLI to always verify but decide based on --force whether to error or warn
CHORE: Remove design document after implementation complete The migration integrity verification feature has been fully implemented, so the design document is no longer needed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
FEATURE: Add comprehensive integrity verification before migration execution
This commit implements the migration integrity verification design:
Schema verification:
the live database schema's xxhash3 checksum and compares against the
expected value stored in tern.migrations
Migration hash verification:
Error handling:
CLI updates:
integrity verification in emergency situations
of local state.json (with --include-local-state flag for backwards
compatibility)
The design follows the principle of detecting both: