graph: community isolation scoring + sort:isolation query
Add community_isolation() to Graph — computes per-community ratio of internal vs total edge weight. 1.0 = fully isolated, 0.0 = all edges external. New query: sort:isolation — sorts nodes by their community's isolation score, most isolated first. Useful for aiming organize agents at poorly-integrated knowledge clusters. New CLI: poc-memory graph communities [N] [--min-size M] — lists communities sorted by isolation with member preview. Reveals islands like the Shannon theory cluster (3 nodes, 100% isolated, 0 cross-edges) and large agent-journal clusters (20-30 nodes, 95% isolated). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
d0f126b709
commit
e6613f97bb
4 changed files with 141 additions and 0 deletions
|
|
@ -167,6 +167,7 @@ pub enum SortField {
|
|||
ContentLen,
|
||||
Degree,
|
||||
Weight,
|
||||
Isolation,
|
||||
}
|
||||
|
||||
/// Numeric comparison operator.
|
||||
|
|
@ -307,6 +308,7 @@ impl Stage {
|
|||
"content-len" => SortField::ContentLen,
|
||||
"degree" => SortField::Degree,
|
||||
"weight" => SortField::Weight,
|
||||
"isolation" => SortField::Isolation,
|
||||
_ => return Err(format!("unknown sort field: {}", value)),
|
||||
};
|
||||
Stage::Transform(Transform::Sort(field))
|
||||
|
|
@ -548,6 +550,19 @@ pub fn run_transform(
|
|||
db.cmp(&da) // desc
|
||||
});
|
||||
}
|
||||
SortField::Isolation => {
|
||||
// Score nodes by their community's isolation.
|
||||
// Most isolated communities first (highest internal edge ratio).
|
||||
let iso = graph.community_isolation();
|
||||
let comms = graph.communities();
|
||||
items.sort_by(|a, b| {
|
||||
let ca = comms.get(&a.0).copied().unwrap_or(0);
|
||||
let cb = comms.get(&b.0).copied().unwrap_or(0);
|
||||
let sa = iso.get(&ca).copied().unwrap_or(1.0);
|
||||
let sb = iso.get(&cb).copied().unwrap_or(1.0);
|
||||
sb.total_cmp(&sa) // most isolated first
|
||||
});
|
||||
}
|
||||
SortField::Priority => {
|
||||
// Pre-compute priorities to avoid O(n log n) calls
|
||||
// inside the sort comparator.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue