> Migrations first, not schema first.
> Migrations are specified in a declarative format, not in SQL.
Strongly disagree about this. Consider how Terraform works. You declare what the end state should look like and it decides what the "migrations" should be to get you there (the plan). With a relational DB, we would declare the end-state DDL and execute a "plan" that will derive the migration for you and, preferably, derive corresponding types in whatever language you are using.