A normalized, runtime view of a running network — the single shape an
observability tool reads. Assembled by Bloccs.Introspect.network/1 from the
generated supervisor and each node's compiled manifest.
Summary
Types
Primitive config declared on the node ([batch]/[join]/[rate]/[delay]).
A node's implementation contract: the functions that run + per-message policy.
The declared detail per effect axis (nil when the axis isn't declared): db
carries its allow scopes ("table:read", "table:insert", …), http its
allowed hosts + methods.
A node's notation glyph (see Bloccs.Introspect.glyph/1).
A node's drawable identity: kind + the canonical notation glyph.
Types
@type config_view() :: %{ batch: map() | nil, join: map() | nil, rate: map() | nil, delay_ms: pos_integer() | nil }
Primitive config declared on the node ([batch]/[join]/[rate]/[delay]).
@type contract_view() :: %{ pure_core: String.t() | nil, effect_shell: String.t() | nil, timeout_ms: pos_integer() | nil, retry: map() | nil, idempotency: map() | nil }
A node's implementation contract: the functions that run + per-message policy.
@type effect_detail_view() :: %{ http: %{allow: [String.t()], methods: [String.t()]} | nil, db: %{allow: [String.t()]} | nil, time: String.t() | nil, random: String.t() | nil }
The declared detail per effect axis (nil when the axis isn't declared): db
carries its allow scopes ("table:read", "table:insert", …), http its
allowed hosts + methods.
@type glyph() ::
:node
| :node_effect
| :source
| :sink
| :split
| :batch
| :join
| :throttle
| :delay
A node's notation glyph (see Bloccs.Introspect.glyph/1).
@type node_view() :: %{ id: atom(), kind: :source | :transform | :router | :sink, glyph: glyph(), ports_in: [port_view()], ports_out: [port_view()], effects: [:http | :db | :time | :random], effect_detail: effect_detail_view(), reply: boolean(), concurrency: pos_integer(), doc: %{intent: String.t() | nil, owner: String.t() | nil}, contract: contract_view(), config: config_view() }
A node's drawable identity: kind + the canonical notation glyph.
@type port_view() :: %{name: atom(), schema: String.t(), buffer: pos_integer() | nil}
@type summary() :: %{ id: atom(), version: String.t(), node_count: non_neg_integer(), edge_count: non_neg_integer(), started_at: integer(), supervisor: module() }
@type t() :: %Bloccs.Introspect.Network{ edges: [edge_view()], expose: %{in: map(), out: map()}, id: atom(), nodes: [node_view()], started_at: integer() | nil, supervision: %{ strategy: atom(), max_restarts: non_neg_integer(), max_seconds: pos_integer() }, supervisor: module(), version: String.t() }