Add schema compatibility probe to prevent silent migration failures (bd-ckvw)
- Implement comprehensive schema probe in sqlite.New() that verifies all expected tables and columns after migrations - Add retry logic: if probe fails, retry migrations once - Return clear fatal error with missing schema elements if probe still fails - Enhance daemon version gating: refuse RPC if client has newer minor version - Improve checkVersionMismatch messaging: verify schema before claiming upgrade - Add schema compatibility check to bd doctor command - Add comprehensive tests for schema probing This prevents the silent migration failure bug where: 1. Migrations fail silently 2. Database queries fail with 'no such column' errors 3. Import logic misinterprets as 'not found' and tries INSERT 4. Results in cryptic UNIQUE constraint errors Fixes #262 Amp-Thread-ID: https://ampcode.com/threads/T-0d7ae2c0-9f12-4f9b-85d1-1291488af150 Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
@@ -78,6 +78,21 @@ func New(path string) (*SQLiteStorage, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Verify schema compatibility after migrations (bd-ckvw)
|
||||
// First attempt
|
||||
if err := verifySchemaCompatibility(db); err != nil {
|
||||
// Schema probe failed - retry migrations once
|
||||
if retryErr := RunMigrations(db); retryErr != nil {
|
||||
return nil, fmt.Errorf("migration retry failed after schema probe failure: %w (original: %v)", retryErr, err)
|
||||
}
|
||||
|
||||
// Probe again after retry
|
||||
if err := verifySchemaCompatibility(db); err != nil {
|
||||
// Still failing - return fatal error with clear message
|
||||
return nil, fmt.Errorf("schema probe failed after migration retry: %w. Database may be corrupted or from incompatible version. Run 'bd doctor' to diagnose", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Convert to absolute path for consistency (but keep :memory: as-is)
|
||||
absPath := path
|
||||
if path != ":memory:" {
|
||||
|
||||
Reference in New Issue
Block a user