Store migration
The on-disk format has a version. It has moved twice - at 1.0.0 and again at 2.0.0 - and a 2.4.x binary will offer to upgrade an older store in place. Upgrades are forward-only; keep a copy of anything you cannot rebuild before you confirm.
Format history
| Format | Shipped in | What changed |
|---|---|---|
| 1 | 0.1.0 | First layout: payload + flat metadata file per version. |
| 2 | 1.0.0 | Metadata became manifest.json; digests moved to the sha256: prefix form. |
| 4 | 2.0.0 | Detached manifest.sig added; format jumped to 4 to leave room, 3 was never shipped. |
Yes, there is no format 3. An internal build used the number and it was easier to skip it than to argue about it.
Upgrading
anvil migrate --store /srv/artifacts --dry-run # reports what will be rewritten anvil migrate --store /srv/artifacts # rewrites in place, prints new format
A dry run walks every version directory and prints the ones that need rewriting, without touching them. The real run rewrites metadata and, for the 2→4 step, generates signatures with your configured key. Payloads are never rewritten; their digests are what anchors the whole thing.
Downgrade
There is none. An old binary pointed at a format-4 store exits 6 and says so rather than guessing. If you must run an old client, migrate a copy of the store, not the original.