The default of die is to, er, die. You can resume after a die, but only if you do so explicitly, in which case you are responsible for overriding the expectations of whoever wrote the die and likely did not expect it to return.
> p6 'sub a($a) { $a(); CATCH { default { say "default"; .resume } }; 42 }; say > a( -> { die } )' default 42 Here's the problem with that: > p6 'sub a($a) { $a(); CATCH { default { say "default"; .resume } }; 42 }; say > a( -> { die unless $*INVARIANT; } )'default 42 Okay so far, but suppose we violate the invariant... > p6 'sub a($a) { $a(); CATCH { default { say "default"; .resume } }; 42 }; say > a( -> { die unless $*INVARIANT; say "assume $*INVARIANT" } )' default default default This exception is not resumable in block at -e:1 in block <unit> at -e:1 So resuming is never going to be the default for die. (That's why we have warn, after all.)