Stream and settle
AsyncIterable and owns an outcome promise. Keep both.
A UI can ignore an event kind it does not render, but it must not infer
success from the last kind it recognized.
Buffer when progress is not visible
runToEnd() drains the same iterator and returns the accumulated events.
It is convenient for a worker, test or command whose interface does not need
live progress.
Let the caller cancel
Exit contract
Continue
Run events
Design an additive event reducer.
Errors and exits
Keep refusal classes separate.
Receipts
Preserve proof after the stream closes.
Method index
Scan every local and remote method.