New undo/1

I think the new undo/1 is a great feature to have! Alllows much cleaner code when we need side-effects. I had a question, in the test code you have:

test(error, throws(x)) :-
    (   undo(throw(x)),
        fail
    ;   ok                              % true is a VMI
    ).

why does it make a difference to have ok vs true?