| ✓ | Plan, validation, atomic commit or rollback, snapshots |
| ✓ | Plain column rename (renamed_from) |
| ✓ | Destructive operations refused without --force: DROP COLUMN, type change, nullable to NOT NULL, reduced length or decimals, DROP FK, new CASCADE FK |
| ☐ | Drop a table when its model disappears: refused without --force, DROP TABLE in up, recreation in down, snapshot removed, reverse FK order |
| ☐ | Destructive changes: state what they affect, relations included |
| ☐ | Real ALTER on a type change (USING on PostgreSQL and MySQL, faithful snapshot; table rebuild on SQLite as an option) |
| ☐ | Nullable to NOT NULL with a default: fill existing NULLs before the constraint |
| ☐ | Column both renamed and modified (today only the rename applies, and the snapshot records the change as done) |
| ☐ | Detect a default value change |
| ☐ | Constraint names read from the database instead of assumed |
| ☐ | Identifier length limit per engine (63 for PostgreSQL, 64 for MariaDB/MySQL) |
| ☐ | Automatic creation and removal of many-to-many relation tables (DSL, migrations, macro) |
| ☐ | Honour cascade, restrict and set_null on those tables |
| ☐ | Table rename (renamed_from), and a clear message for a renamed model |