One generic type reused across every operation (T =
OperationOutcome for copy/move/compress, SyncOutcome for sync)
rather than a handle type per operation.
Aggregate result of running an ExecutionPlan. Replaces a bare
Result<(), Error> because ErrorStrategy::ContinueAndCollect can
finish with a mix of successes and failures that a single Result
can’t represent.
#[non_exhaustive]: an output type, built by this crate and read by
the caller, so blocking downstream construction costs nothing —
Default and ..-destructuring both still work. Adding duration
was a breaking change for exhaustive struct literals; marked now so
the next field isn’t, same reasoning as Progress.
Discrete per-entry events rather than a cumulative snapshot;
EntryFailed carries only the Entry, not the Error — Error isn’t
Clone (it wraps std::io::Error), and the failure detail is already
available from the operation’s final OperationOutcome.failed once the
handle resolves.
#[non_exhaustive]: adding a variant here is otherwise a breaking
change for any downstream exhaustive match, which is exactly what
adding Planned was. Marked now so the next addition isn’t.