Iter 25 — converts iter 23's NodeSyncSnapshot from "exists in the JSON"
to "documented for UI integrators". Adds a new subsection
'Per-node mesh sync (ADR-110)' under WebSocket Streaming with:
- Full sample sensing_update payload showing the optional `sync` object
- Field-by-field table (offset_us / is_leader / is_valid / smoothed /
sequence / csi_fps_ema / csi_fps_samples) with type, bench-derived
reference values, and links back to §A0.10
- Explicit "when sync is omitted" rules — backwards compat for
pre-iter-23 UI clients
- Rendering recommendations for UI authors (Leader badge / Sync lost /
Calibrating / jitter histogram)
- Step-by-step recipe for recovering a mesh-aligned timestamp for any
CSI frame from its sequence number + the sync snapshot, so
ADR-029/030 multistatic consumers have a quick reference
The sample JSON values match iter 24's serialization tests byte-for-byte,
so the docs and tests can't drift independently.
Co-Authored-By: claude-flow <ruv@ruv.net>