Message flow: causal order, left to right

Laid out by elkjs (algorithm "layered", pinned 0.9.3), node order FORCED to the causal column below rather than derived from edges, because the graph has a real cycle (RuggedizedSwitch and MissionProcessor exchange traffic in both directions, and TelemetryMsg runs backward against the main flow). Counts shown are from fix1-window-4t-traces; structure is identical across all three runs, checked before this page was built.
Solid edge: observed at the switch, every frame carries src/dst/ethertype. Dashed edge: RF, from the model's wiring, never touches the switch, not observed in any trace. Curved dashed edge: TelemetryMsg, drawn separately from the forward layout because it runs against the causal flow, status going back rather than data going forward.
Loading elkjs and computing layout…
HealthMsg (ethertype 0x88B8) is declared in the model and never sent. No source or destination for it was found in the model authoring source, so it is named here rather than drawn: drawing an edge for it would assert an endpoint pair nobody has confirmed, and that is worse than not drawing it.

Rf_DetectionA and Rf_DetectionB are two separate links here, matching the model's own wiring. The topology page (ims-twin.html) currently shows one merged Rf_DetectionA bus carrying both receivers' signals, because the twin's generator merges them; this page reads the model directly, so the two are kept apart.

Generated by make_elk_flow.py from message_routes and direct_links in fix1-window-4t-traces/frames.json (innexis-vsi 0e2a6e9). See also the frame-by-frame timeline (when things happened), the baseline-vs-fix comparison (what changed and why), and the physical topology (what is actually wired to what, read from the model rather than a run).