fix(#670): self-healing recovery for installer-migration checksum drift
Backport of #675 to the 1.3.1 hotfix. An already-applied installer migration whose recorded checksum drifted (e.g. a shipped body was edited in #615) is now detected and reconciled on the next install instead of hard-aborting the upgrade ("applied migration checksum changed"). Adds a CI baseline lock that fails on any shipped-migration body drift. Fixes #670 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -121,9 +121,17 @@ Required fields:
|
||||
}
|
||||
```
|
||||
|
||||
The checksum is calculated from the migration definition. If an applied
|
||||
migration's checksum changes, the installer must warn and refuse to silently
|
||||
re-run it. Fix-forward migrations should use a new migration id.
|
||||
The checksum is calculated from the migration definition.
|
||||
|
||||
An already-applied migration is never re-run, so a drifted checksum is
|
||||
tolerated at runtime: it is collected in `plan.checksumDrift` and reconciled
|
||||
into install state on the next write, rather than aborting the user's upgrade
|
||||
(this unblocks upgrades — see issue #670).
|
||||
|
||||
The "shipped migration bodies are immutable" rule is enforced in CI by a
|
||||
committed checksum-baseline test in `tests/installer-migrations.test.cjs`.
|
||||
If you need to change the behaviour of a released migration, add a NEW
|
||||
fix-forward migration id instead of editing the shipped body.
|
||||
|
||||
## Migration Record
|
||||
|
||||
|
||||
Reference in New Issue
Block a user