is_empty has a better failure message
engine should use the reason from failures
make use of reason of failures in exception msg