Panel 2 — the live network graph paired with an inspector.
The graph (Bloccs.Web.Components.Graph) shows node state, throughput, and
packets moving along active edges. The side panel inspects either the whole
network (setup + live totals) or a clicked node — its primitive (kind, ports,
effects), live metrics, and the code that implements it (the author's
pure_core / effect_shell plus any retry/idempotency/window policy). The
contract fields are read defensively, so this works against any bloccs that
predates them. Selection is the ?node= URL param (shareable).
Summary
Functions
Human one-liners for whichever primitive blocks a node declares (batch,
join, rate, delay). Values may be Bloccs.Manifest.* structs, which do
not implement Access, so they're read with Map.get/2, not bracket syntax.
Attributes
network(:any) (required)base_path(:string) (required)states(:map) - Defaults to%{}.frame(:map) - Defaults to%{nodes: %{}, updated_at: nil}.flow(:map) - Defaults to%{events: [], rate: 0, series: []}.selected(:any) - Defaults tonil.