6034c08badc67fb5997b64f4a45100ae70f313ea
The 2026-08-21 crash at material_items printed 'Running upgrade' lines for location_nodes and wp_files and then rolled all three back together - env.py wrapped the entire run in a single transaction. The repair that followed trusted those lines: material_items was hand-created, the version stamped to head, and production ran for two days missing two tables it claimed to have. Found 2026-08-23 when the locations import 500'd on UndefinedTable. transaction_per_migration=True makes the log truthful: a crash keeps every step that completed, and a stamp-to-head repair after a crash repairs ONE migration, not an unknowable prefix of the chain. Verified: the full chain still applies on a fresh scratch SQLite; the offline --sql render is unchanged. The production surgery (creating the two rolled-back tables from the offline postgres render) is recorded in the session; no version stamp is needed there - it is already, now truthfully, at head. Items: BL-027's class, third finding; env.py infrastructure. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Description
No description provided
Languages
Python
49.3%
JavaScript
32.6%
CSS
8.9%
HTML
8.7%
Shell
0.4%