GameSession
A running game session: the consensus node plus any named application channels riding the same fabric.
Returned by gameNode, gameHost, and gameJoin. Drive the game through node (typically wrapped in a TurnSequencer); ride extra application traffic — chat, cursors, voice signalling — over appChannel.
App channels share the consensus fabric. Each appChannel is a NamedMux view nested under a reserved internal channel, so application frames travel over the very same Seam as Raft without a second connection and without violating the ADR-034 single-collection contract (the session owns the sole collector). The app wire-layout is identical across all three bootstrap paths. The application owns the entire appChannel name namespace — there are no reserved names, because internal channels never live in it.
App-channel delivery is best-effort (replay = 0, like the underlying mux): a frame sent before the peer subscribes to that name is not replayed. Layer your own reliability on top if you need at-least-once delivery.
Functions
Local teardown: stops the consensus node's loops, then closes the underlying fabric. Idempotent — a second call is a no-op.