Documentation
¶
Overview ¶
Package score — centrality.go provides Brandes betweenness centrality with source sampling, used by the GRAPH_REPORT generator to surface "bridge nodes": symbols that connect otherwise-distant parts of the graph and therefore drive cross-cutting concerns.
Why sampling: full Brandes is O(V·(V+E)), which is ~4.6×10^11 ops on the go-stablenet self-graph (220K nodes / 2M edges). Source-sampled Brandes (k random sources, default 100) is O(k·(V+E)) — ~200M ops, sub-second in Go. Estimates are unbiased after the V/k scale-up multiplier, accurate to within ~5% for top-N ranking purposes (graphify uses the same approach in nx.betweenness_centrality(k=…)).
Meta nodes (Commit, Hunk — schema 1.4/1.8 G6 Temporal) are excluded from both the source pool AND the output map: they have no semantic edges that would produce meaningful centrality scores, and including them would dilute the V scale factor.
Package score computes per-node graph metrics in place: in/out degree, PageRank (damping=0.85, iterations=30), and usage_score (sum of incoming "calls"/"invokes" edge counts — used to size super-nodes in the viewer).
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ApproxBetweenness ¶
func ApproxBetweenness(nodes []types.Node, edges []types.Edge, k int, seed int64) map[string]float64
ApproxBetweenness returns per-node betweenness centrality using Brandes' algorithm with source sampling. k≤0 or k≥|V| selects every node (exact). The graph is treated as undirected — bridge identification doesn't depend on direction (same convention graphify and most network- analysis libraries follow). Edges from/to meta nodes are dropped before the BFS, so e.g. a Function→Commit changed_in edge doesn't inflate the Function's centrality through history-only links.
seed pins the source-sampling RNG so the report is deterministic across runs against the same graph.
func Compute ¶
Compute populates InDegree, OutDegree, PageRank, and UsageScore for each node.
Meta nodes (Commit, Hunk — schema 1.4/1.8 G6 Temporal) are excluded from PageRank participation per hunk-graph.md §11.7 (decision 2026-05-09): Hunks have ~1 inbound edge each (has_hunk) and would rank near-zero, adding noise to the metric without contributing signal. They keep in/out degree counters populated (those are local, additive, and useful for the viewer's "how many hunks does this commit have" query) but their PageRank stays at the zero-initialised default.
Types ¶
This section is empty.