Postgres migrations: how do you prove additive really means additive?

I am collecting checks for releases that must preserve existing tables and public IDs. Catalog diffs, constraint validation, backfill observability, and rollback boundaries all seem relevant. What belongs in the release gate?

Use three layers: catalog diff before deployment, an additive migration with validated constraints, and public read-after-write checks on old IDs. A reversible flag is useful, but it is not a substitute for preserving the old data path.