Router authority
The swarm's coherence invariant: routing is decided once, on the backbone — workers only receive expert ids.
The invariant: the only discrete decision inside the network is MoE routing (top-8 of 256). Kvasir runs the router exactly once, on the backbone, and dispatches only the selected expert ids to workers. A heterogeneous swarm may differ slightly in each expert's output *magnitude* — it never differs in *which experts run*.
Engine status, 2026-09-21. Expert-grain sharding was built and demonstrated on Kvasir's previous engine, and the results below are from that work. Carrying it onto [p4](/wiki/p4) is partly done. Live: a device proves a wallet, is told which expert window is scarcest, claims it, opens a relay, and is credited for the bytes it carries. Not yet: the endpoint that hands it the weights for that window, and — more fundamentally — any path in the p4 stage adapter for dispatching expert work to a remote device. The market and the transport run; the data path and the engine hook do not. Where a detail below names a tool or a route, it is the one that ran on the previous engine.
Without this rule, each backend would re-run the router and pick different experts for borderline tokens — genuine, catastrophic divergence, because from that token on the computation forks like a different random seed. With it, hardware differences reduce to bounded continuous error that the probability-weighted combine absorbs.
Divergence modes closed by one decision point
| Divergence mode | Without authority | With authority |
|---|---|---|
| Routing mismatch | Backends pick different top-8 at boundaries | Ids decided once, dispatched to owners |
| Trajectory fork | One flipped token forks the whole sequence | Decode/sampling pinned to one node |
| Verification | Bit-compare across backends (impossible) | Tolerance checks on well-defined residuals |
The cost is negligible: the backbone was already computing ffn_norm and the router logits; what crosses the wire is just the hidden rows plus selected ids — about 6 KB per decode step.