rosterSnapshot
Returns a Flow of the current peer set derived from Seam.peers, suitable for passing to WarpNode as its rosterFlow.
This is the eventual roster source: the ring tracks who is currently connected to the seam. Under hub-spoke / churn the seam's peer view differs between nodes, introducing some ring disagreement and duplicate executions (backstopped by the Results ORMap). Use RaftNode.rosterSnapshot for a strongly-consistent alternative.
Returns a Flow of voter PeerIds derived from this RaftNode's current us.tractat.kuilt.raft.ClusterConfig, suitable for passing to WarpNode as its rosterFlow.
This is the strong roster source: the ring tracks Raft's replicated voter set. Under stable membership the ring is identical on every peer, eliminating duplicate executions from ring disagreement. Use Seam.rosterSnapshot for a cheaper, eventually-consistent alternative when you don't already have a Raft cluster.
"Stable" is load-bearing. us.tractat.kuilt.raft.RaftNode.membership adopts a config on append, not on commit, so while a membership change is in flight a peer that has not yet received the config entry still rings on the old voter set, and an uncommitted config can be truncated and superseded. The rings converge once the entry has replicated everywhere; duplicate executions during that window are absorbed by the Results backstop as usual.
The emitted PeerId values are derived from us.tractat.kuilt.raft.NodeId.value by wrapping each in a PeerId — callers must ensure the WarpNode.selfId passed to WarpNode matches the corresponding voter's us.tractat.kuilt.raft.NodeId.value.