Wip sip23 √

@richdougherty I see `transform` and `transformWith` as more canonical than `onComplete`