Rapid progress...shared deepening of understanding...
And inevitably a philosophical point arises:
--- conversation channels are internal ("pure names").
--- participants are external (bound to some real things).
This is rephrased into more concrete:
--- conversation channels are managed inside a conversation at runtime.
--- participants are not: they need be bound to external addresses.
Or into more technical:
--- conversation channels in a protocol are bound once they are declared.
--- declaration of participants does not induce binding.
(see for example this wikipedia article for binding and bound variables)
A conversation as an interface --- simultaneously insulating and connecting the implementation-free abstraction of interactional behaviour from/with the outside, the world, that expanse, implementation design, efficiency.
For example suppose zero or more participants can dynamically join a conversation one by one, to interact there. Then the most abstract layer of conversation descriptions, its signature (protocol), does not have to say how this join is done --- since it is about the outside. But how they may interact once they have joined, that should be described in a protocol description. And this subtle event where an outside and an inside meet, namely how joining is done, we can naturally describe by going up one level, when we treat a model. In a model, we treat externals. Since we can. Since we want. Since we already have a core called signature...