eliminate schema_fit: it's clustering coefficient

schema_fit was algebraically identical to clustering_coefficient
(both compute 2E/(d*(d-1)) = fraction of connected neighbor pairs).
Remove the redundant function, field, and metrics column.

- Delete schema_fit() and schema_fit_all() from graph.rs
- Remove schema_fit field from Node struct
- Remove avg_schema_fit from MetricsSnapshot (duplicated avg_cc)
- Replace all callers with graph.clustering_coefficient()
- Rename ReplayItem.schema_fit to .cc
- Query: "cc" and "schema_fit" both resolve from graph CC
- Low-CC count folded into health report CC line

Co-Authored-By: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
ProofOfConcept 2026-03-03 12:21:04 -05:00
parent fb7aa46e03
commit ec8b4b2ed2
5 changed files with 33 additions and 83 deletions

View file

@ -145,8 +145,6 @@ pub struct Node {
#[serde(default)]
pub clustering_coefficient: Option<f32>,
#[serde(default)]
pub schema_fit: Option<f32>,
#[serde(default)]
pub degree: Option<u32>,
}
@ -925,7 +923,6 @@ impl Store {
position: 0,
community_id: None,
clustering_coefficient: None,
schema_fit: None,
degree: None,
}
}
@ -1505,13 +1502,11 @@ impl Store {
pub fn update_graph_metrics(&mut self) {
let g = self.build_graph();
let communities = g.communities();
let fits = graph::schema_fit_all(&g);
for (key, node) in &mut self.nodes {
node.community_id = communities.get(key).copied();
node.clustering_coefficient = Some(g.clustering_coefficient(key));
node.degree = Some(g.degree(key) as u32);
node.schema_fit = fits.get(key).copied();
}
}
@ -1874,7 +1869,6 @@ fn read_content_node(r: memory_capnp::content_node::Reader) -> Result<Node, Stri
position: r.get_position(),
community_id: None,
clustering_coefficient: None,
schema_fit: None,
degree: None,
})
}