Skip to content

Conversation

@RobbieMcKinstry
Copy link
Contributor

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: 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.
@RobbieMcKinstry RobbieMcKinstry merged commit 93bf51c into trunk Jan 24, 2026
5 checks passed
@RobbieMcKinstry RobbieMcKinstry deleted the claude/implement-migration-integrity-BE9wA branch January 24, 2026 21:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants