Handlers are atomic; errors have kinds
Pitfall 24 of writing Soma, the programming language: a habit from another language, or a rule that surprises, with what the Soma compiler answers and the form to write.
A handler that raises leaves nothing behind: its writes and transitions are rolled back (a failing try { } block too, to where it began). Do not write compensation code. Raise with fail("kind", "detail") or require cond else Tag; catch with let r = try { … } and branch on r.kind ("not_found", "invalid_transition", "guard_failed", "invariant", …); fail(r) re-raises.