Ah ood I worked it out.
If you fail, the ##failuse: block is run from the boulder.. and it does need the print and can have any other failing type code you like.
If you succeed its just a standard 'if second of use then someblockname;' in the boulder.. no extra checking or requirement for a specially named block.
I have the boulder setup like this (moved the difficultdata block to the bottom so its not cluttering up the code).