sclass RunResultWithTimestamps extends OKOrError {
settable Timestamp started;
settable Timestamp ended;
settable CharSequence printOutput;
selfType run(IF0 f) {
ret setPrintOutput(hijackPrint_tee(r {
started(tsNow());
set(okOrError(f));
ended(tsNow());
}));
}
bool hasRun() { ret ended != null; }
// legacy
OKOrError result() { this; }
}