///|
/// Child invocation results do not conflate an interrupted scope with a
/// completed business outcome. A propagated cancel is not proof of rollback.
#derive(Eq, Debug)
pub(all) enum InvocationResult {
  Completed(ToolOutcome)
  Interrupted(
    reason~ : String,
    cancellation~ : CancelDisposition,
    side_effects_possible~ : Bool
  )
}

///|
pub extend InvocationResult with Eq::{equal, not_equal}

///|
pub extend InvocationResult with Debug::{to_repr}