Some additional thoughts about bridging Reactor-based APIs to Coroutines based on your previous experiment.
For streaming use case, Flux<T> -> suspending function which returns ReceivableChannel<T> should be fine. On that topic, it seems that channel operators are coming on Coroutine side.
For non streaming use cases, maybe most of the time translating Flux<T> -> suspending function which returns List<T> via a preliminary call to Flux.collectList() will be more efficient and more familiar with the programming model people have in non-Reactive world and in line with the goal of Coroutines to provide a simplified imperative like programming model.
Mono<T> could translate to suspending function which returns T (most of the time) or T? depending on the context (should be specified in the Javadoc, if not please raise an issue).
Mono<Void> could translate to suspending function which returns Unit.