Why this matters
Allows safe deploy/rollback workflows.
Prefer reversible change or explicit up/down to support rollbacks.
Allows safe deploy/rollback workflows.
Side-by-side examples engineers can pattern-match during review.
def change; execute("UPDATE...") enddef up; execute("UPDATE..."); end
def down; execute("UPDATE...") # reverse op
endirreversible change without commentreversible { dir.up { ... }; dir.down { ... } }From the same buckets as this rule.
Review SQL/database migrations for operations that can lock large tables or cause downtime. Examples: creating indexes without CONCURRENTLY (Postgres), ALTER COLUMN TYPE on big tables, adding NOT NULL without backfill, long-running updates without batching. Require an online migration strategy (CONCURRENTLY, backfill in batches, dual-write/expand-contract) and a rollback plan.