Operations over the generic property-graph model defined in
code-ranker-plugin-api: cycle detection, Henry-Kafura coupling, aggregate
stats, id relativization, and the serializable [Snapshot] artifact.
Everything here is language-agnostic. Plugins emit a pure
api::Graph (structure only); this crate
and the orchestrator enrich it (writing computed values into node attrs
by id) and assemble the snapshot. Which edge kinds count as information
flow is read from the level's edge_kinds (EdgeKindSpec.flow), passed in
as a flow_kinds set — there is no hardcoded uses/contains knowledge.