starOverlay

fun CoroutineScope.starOverlay(base: Seam, random: Random = Random.Default, clock: () -> Instant): Seam

Wrap base in the star-relay policy layer: a GossipSeam with FullFanout and zero recompute jitter, started on the receiver scope. A thin alias for policyOverlay(base, FullFanout, …) — the star is the full-fanout special case; the general form (policyOverlay) drives any TopologyPolicy with the same started-seam interior and the same zero-jitter determinism.

This is the relay interior every hub-star composition shares — hostedOverlay applies it to an accept-pumped mesh, and a per-room game composition applies it to each us.tractat.kuilt.core.RoomHubSeam (and, spoke-side, to each session-mux channel). Wrapped this way, a spoke's broadcast is re-flooded by the hub to every other spoke while Seam.sendTo passes through unwrapped — the tested unicast invariant that keeps per-recipient traffic off the flood path.

Zero jitter is deliberate, not tuning: the FullFanout view is deterministic (everyone), so the anti-lockstep jitter buys nothing and only opens a window where a freshly admitted spoke is missing from the flood targets — a broadcast in that window would skip the spoke and leave a per-origin seq gap it then reorder-holds behind (#1309). The view recomputes synchronously with each roster change instead.

Parameters

base

the star's local endpoint — the hub's fanout seam, or a spoke's link to the hub.

random

RNG for overlay bookkeeping; tests inject a seeded instance.

clock

Clock for the overlay's per-neighbour liveness detectors. Required — no wall-clock default, so a virtual-time caller can never silently fall through to the system clock. Production callers pass { kotlin.time.Clock.System.now() }.