Classes

Resolves the model classes to use for modifications/approvals/disapprovals, honoring the approvals.models.* config so consuming apps can swap in their own subclasses without forking the package.

Undoes a whole decision from inside its transaction when one of its items couldn't be applied, so approve() can't leave a modification half decided. Never reaches the caller.