Ok, so the DataMapper guys left a comment on my post, and I’ve talked to them on IRC. They were remarkably pleasant about it. It turns out that in DataMapper 1.0 there will be functionality to make saves throw exception on failure. It’s off by default, but you can turn it on globally, on a per class level, or on a per instance level.
While I still think the default behaviour is inherently broken, being able to unbreak it with a single line is definitely good enough for me and I can understand not wanting to make quite such a huge breaking API change.
So, well done to the DataMapper guys.