Pretty easy pit to fall in to when trying out conditional outputs for the first time - warn to guide users in the right direction.
we could also interpret None here as a desire to skip if the output is not required and log an info/warn to point at yield Output(None) if they wanted to pass None downstream
This seems reasonable/helpful to me. My gut is that this is better than the alternative you suggested of skipping on None. I can definitely imagine that there are some edge cases where someone wants to be able to pass a None through an optional input. And generally seems less difficult to debug something not executing when you expect it to than executing when you don't expect it to.
I haven't thought through all the edge cases though, so someone else might have more perspective.