events

val events: Flow<TurnEvent<A>>

A hot Flow of TurnEvents in index order, emitted on every node in the cluster.

Each Committed.Entry surfaces as TurnEvent.Committed carrying the decoded action, its log index, and the proposer-stamped IndexedAction.dedupKey (always present — fold it through a us.tractat.kuilt.raft.ClientSessionTable for exactly-once). Each Committed.Install surfaces as TurnEvent.Reset carrying the raft us.tractat.kuilt.raft.Snapshot directly. The internal §5.4.2 election no-op never appears. Both event kinds share this one stream so a reset always arrives in order relative to the entries around it.

Replay=0. Late collectors miss events emitted before they subscribed.

Multicast semantics. The backing RaftNode.committed on a real node is a MutableSharedFlow, so multiple collectors share one upstream subscription. Do NOT wrap this property in shareIn — doing so would add an unnecessary extra layer of buffering and change cancellation behaviour. If FakeRaftNode is used in tests, note that its committed is backed by a Channel.receiveAsFlow() (single-collection), so two concurrent collectors of this flow against a fake node will race for events rather than both receiving every event.