Matt,
The original (and standing) reason is that most "toy" projects can get away with running migrations on every deploy, but for larger organisations, and more complicated projects which use Capistrano we expect professional developers to know what they are doing, and not run migrations (which can quite easily take a system offline) at deploy time unless they ask for it.
Possibly destructive changes to a database which might cause downtime should always be opt-in, not opt out.
Naturally if someone is using Capistrano with Git/Subversion/other - then no changes to the code are destructive, resources can be rebuilt, etc; but the database holds such a massive potential for downtime that it's not worth risking it.
At this point in Capistrano's history (some 5 years after it was first gaining wide acceptance) - I think it would be foolish and unwise to change the default, as at least I rely on the behaviour.
It's certainly even a difference between PostgreSQL and MySQL, the two behave very differently regarding large table changes, there is no "safe" default.
I would suggest a compromise that a variable be made available that would cause migrations to run after you `deploy`, if that would help ease the transition for everyone.
It's worth pointing out that the API is flexible enough that you can easily hook migrations to `after('deploy:update_code')`, which is effectively what `deploy:migrations` does.
Thanks for brining this up Matt, I'd look forward to a patch, or further discussion if you are so inclined!
- Lee