GossipSeam

constructor(base: Seam, random: Random, clock: () -> Instant, config: HeartbeatConfig = HeartbeatConfig(), spareCount: Int = GossipView.DEFAULT_SPARE_COUNT, jitter: ClosedRange<Duration> = GossipView.DEFAULT_JITTER, initialTtl: Int = DEFAULT_TTL, topology: TopologyPolicy = RandomKRegular(random), policy: DeliveryPolicy = DeliveryPolicy.Reliable, reorderGrace: Duration = DEFAULT_REORDER_GRACE)

Parameters

base

the underlying full-membership seam.

random

seeded RNG, seeded per-peer by the caller (drives view-recompute jitter; with the default topology it also seeds neighbour selection).

clock

injected time source for the per-neighbour detectors; never the wall clock.

topology

the overlay shape — which peers this node eager-floods to (see TopologyPolicy). Defaults to the RandomKRegular partial mesh seeded from random; pass FullFanout for a hub star. Only broadcast dissemination is shaped; sendTo always passes through unwrapped.

jitter

per-peer view-recompute jitter window (see GossipView); a zero range makes recompute synchronous, which deterministic tests rely on.

initialTtl

hop budget stamped on a locally-originated broadcast. Dedup is what terminates the flood; this is only a generous hard cap, comfortably above the overlay diameter at the tens–low-hundreds target scale.

reorderGrace

how long a relayed frame held for an earlier same-origin gap waits before the gap is abandoned and the held run released in order (see GossipDedup). Multi-path relay reordering resolves within a few hops' latency, so a gap older than this is a genuine flood drop (anti-entropy backstops it) or a pre-join seq (a late joiner first sights an origin mid-stream) — either way the held frames must not wait forever. Measured on the seam's own sweep ticker (dispatcher time — virtual under a test dispatcher), never on clock, which is the liveness time source and may be frozen (#1309).