Hi Adam,
All of your suggestions are perfectly valid things to do (and are in fact things I've done in the past). This particular project uses data migrations fairly heavily, and the developers haven't been particularly good about making sure they run cleanly on fresh databases. We are using Django's test framework, but a) with migrations disabled for performance reasons and b) using --keepdb, which masks these types of problems.
It just got me thinking that if you've gone out of your way to mark an operation as basically "safe to delete", it seems unimportant to run them during an initial migration. Bad programming aside, it seems like an easy performance bump for projects that use these types of operations. I think of elidable as a "soft delete" option that gets garbage collected next squash. This would just be an optimization step to ignore what is already marked for death. Maybe it's not an optimization we want to reason about, or maybe it isn't a big enough use case to be worth coding for, but I figured I'd put it out there.
Regards,
Dan