Erik,
Actually cogen doesn't decompose or flatten out a generator hierarchy - it certainly looks like that but all the generators are wrapped in a Coroutine class that does a bit of bookkeeping and simulates a callstack in combination with the other components in cogen (the operation - the coroutine class is also an operation - and the scheduler). That means yielding another coroutine sets the active coroutine to that and sets the caller on it.
From what I see all the communication in and out of the generators in weightless is with data and instructions come from the context.
cogen is the other way (look like you've seen that) and all the communication goes out of the generators through special "magic" polymorphic objects (the Operation classes) that acts as request, asynchronous completion token, completion handler. The result that goes back in the generator also comes from them. They are tightly coupled with the scheduler (that means they can change the scheduler's state).
Do you have any examples/docs on the pipeline/observable stuff because the unittests don't speak much :) ?
What are your plans for other multiplexing mechanisms like poll, epoll or kqueue ?