Three months ago I merged a migration that added a null: false column with no default value. The table had 800k rows. Production broke, and the worst part wasn't the bug itself — it was that nothing in our workflow could have caught it. I was staring at a GitHub diff, reading raw Ruby DSL, trying to mentally reconstruct what the table looked like before this migration and whether the change would