Actually error on database fails
It turns out the default 'fail' parameter value (throw exception) doesn't work at all, because FireApp calls it, and swallows the exception with no notice. Oops. The default behavior should instead be to log the error.