outputs can be perform on success and/or failure

there is no default; callers must be updated to specify 'success' for
the previous behavior.

also, outputs no longer get their matching input's version; this is an
odd coupling without a real use case that drove it out.

[#77921140] [finishes #77990398]