Canonical intermediate representation of a council topology.
@type edge_t() :: %{ from: String.t(), to: String.t(), kind: :feeds | :aggregates | :contains | :routes_to | :invokes, label: String.t() | nil }
@type node_kind() :: :input | :output | :round | :member | :sub_council | :chair | :router | :tool
@type node_t() :: %{ id: String.t(), kind: node_kind(), label: String.t(), attrs: map() }
@type t() :: %CouncilEx.Diagram.IR{ council: module() | String.t(), edges: [edge_t()], nodes: [node_t()] }