An agent writes the forward migration, it applies cleanly on the branch, and the PR body reads 'schema updated.' What it leaves out: how the change reverses, what happens to existing rows, and how you prove a read after the write still works. A migration that only runs one direction is a draft, not a finished change.
A forward-applied migration is not a done migration
The green checks that cover the code branch usually run against an empty or seeded development database, so 'applies cleanly' proves almost nothing about production. A column added, a type widened, a value moved from one field to another: the forward path is one line in the migration file. The operational risk lives in what the forward file cannot show, which is old rows, partial deployments, and the moment you need to back out.
The three missing pieces
A rollback that runs. The down migration must be tested, not just written.…