2.1 KiB
M12-01G Status
status: done task: preserve the old catalog index when an IndexedDB migration fails updated: 2026-08-17 America/New_York enablingTask: true parityStateChange: false
Scope
The production IndexedDB migration prepares schema v2 with the existing schema v1 parser and
migrator before opening a write transaction. It then rechecks the source row and atomically
writes the v2 index and migration receipt while deleting the v1 row. A concurrent source change
returns REVISION_CONFLICT; a transaction failure returns STORAGE_TRANSACTION.
The browser suite injects failures after the v2 target write and after the v1 source delete. After each abort it closes and reopens the database, proving the database version, complete v1 index, unrelated legacy migration row, absent v2 row, and absent receipt are byte-for-byte equivalent to the baseline. A subsequent retry commits the v2 index and receipt together.
Evidence
WEB_TEST_PORT=5593 npm --prefix web run test:asset-catalog-indexeddb-migrationpassed the M12-01D production migration unit suite 3/3, the M12-01G artifact binding unit 1/1, and Chromium 1/1.- Both
AFTER_TARGET_PUTandAFTER_SOURCE_DELETEreturnedSTORAGE_TRANSACTION; reopening IndexedDB after either fault produced the exact pre-migration snapshot. - The successful retry preserved revision 7 and the M12-01D source/target hashes, removed only the v1 row, and retained the unrelated migration row.
- Typecheck and
git diff --checkpassed.
Artifact Hashes
- production IndexedDB migration:
283a08bccb5ea301bd2aef8f01d4496972e3962f75e340479336c50e3539ba57 - browser suite:
82c40f38898277b4053a9654537ec9c21bc01a784d1091831e139361575a81e9 - artifact unit:
a4366a16f28b91b3ff213e0232308eaecd392731f27972cfa49a11568eb0feca - manifest:
2596067956211698f1b7a07d9423411e2db830b72e6b78593354953a568738e7
Next Task
M12-01H: prove catalog ordering and asset identity survive page and Worker restarts.
Rollback
Remove the IndexedDB migration module, M12-01G unit/browser suites, manifest, package command,
and this status entry. Restore M12-01G to pending and nextTask to M12-01G. No parity ledger
rollback is required.