Broadcast
Every seat answers the same moderator message at once. The orchestrator starts one asyncio.create_task per seat, each consuming that brain's reply stream, and funnels every event into a single asyncio.Queue that it drains to the browser. A reply renders the moment its first tokens land, and nobody waits for the slowest sister. Every seat gets the active branch cut at the same round, so the comparison stays fair even though the answers arrive in any order, and the round freezes a snapshot of the roster it ran with.
Point
One seat gets the floor. This is its own round type with its own route: the round records type: "point" and a single turn. The chosen seat hears a solo-turn line in its addendum, and Dad's comment, if he wrote one, is its user message. The other seats learn what happened on their next call, when the point round shows up in their active branch. When two seats share a brain, the seat's slot_id is what tells them apart.
Point-only
A point turn with no comment. The chosen seat's user message becomes a floor signal, [Your turn to respond. {moderator_name} stayed silent.], filled in with whatever that seat calls its moderator (아빠, for the sisters). The council can unfold without Dad writing filler for every turn, and the round keeps its empty prompt, which is how a transcript read later tells a deliberate pass from a missing turn.