Use a success predicate instead of success codes

Interestingly this does not break the tests.

This ticks the next box of #824.
This doesn't check the position of the args right? Would be nice if that can be done.