Never exit directly from commands.dispatch(), but pass return code to caller.
Usually the caller is commands.run().
Some extensions still use sys.exit(), this is catched, too.
Fixed wrong return statement in commands.recover() yielding a zero exit code.
%% Should show unknown
? unknown
removing b
%% Should show unknown and b removed
R b
? unknown
%% Should show a and unknown
a
unknown