graph health: fix-categories, cap-degree, link-orphans
Three new tools for structural graph health: - fix-categories: rule-based recategorization fixing core inflation (225 → 26 core nodes). Only identity.md and kent.md stay core; everything else reclassified to tech/obs/gen by file prefix rules. - cap-degree: two-phase degree capping. First prunes weakest Auto edges, then prunes Link edges to high-degree targets (they have alternative paths). Brought max degree from 919 → 50. - link-orphans: connects degree-0/1 nodes to most textually similar connected nodes via cosine similarity. Linked 614 orphans. Also: community detection now filters edges below strength 0.3, preventing weak auto-links from merging unrelated communities. Pipeline updated: consolidate-full now runs link-orphans + cap-degree instead of triangle-close (which was counterproductive — densified hub neighborhoods instead of building bridges). Net effect: Gini 0.754 → 0.546, max degree 919 → 50.
This commit is contained in:
parent
6c7bfb9ec4
commit
94dbca6018
5 changed files with 297 additions and 2 deletions
35
src/main.rs
35
src/main.rs
|
|
@ -76,6 +76,9 @@ fn main() {
|
|||
"wrong" => cmd_wrong(&args[2..]),
|
||||
"gap" => cmd_gap(&args[2..]),
|
||||
"categorize" => cmd_categorize(&args[2..]),
|
||||
"fix-categories" => cmd_fix_categories(),
|
||||
"cap-degree" => cmd_cap_degree(&args[2..]),
|
||||
"link-orphans" => cmd_link_orphans(&args[2..]),
|
||||
"decay" => cmd_decay(),
|
||||
"consolidate-batch" => cmd_consolidate_batch(&args[2..]),
|
||||
"log" => cmd_log(),
|
||||
|
|
@ -325,6 +328,38 @@ fn cmd_categorize(args: &[String]) -> Result<(), String> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn cmd_fix_categories() -> Result<(), String> {
|
||||
let mut store = capnp_store::Store::load()?;
|
||||
let before = format!("{:?}", store.category_counts());
|
||||
let (changed, kept) = store.fix_categories()?;
|
||||
store.save()?;
|
||||
let after = format!("{:?}", store.category_counts());
|
||||
println!("Category fix: {} changed, {} kept", changed, kept);
|
||||
println!("\nBefore: {}", before);
|
||||
println!("After: {}", after);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn cmd_link_orphans(args: &[String]) -> Result<(), String> {
|
||||
let min_deg: usize = args.first().and_then(|s| s.parse().ok()).unwrap_or(2);
|
||||
let links_per: usize = args.get(1).and_then(|s| s.parse().ok()).unwrap_or(3);
|
||||
let sim_thresh: f32 = args.get(2).and_then(|s| s.parse().ok()).unwrap_or(0.15);
|
||||
let mut store = capnp_store::Store::load()?;
|
||||
let (orphans, links) = neuro::link_orphans(&mut store, min_deg, links_per, sim_thresh);
|
||||
println!("Linked {} orphans, added {} connections (min_degree={}, links_per={}, sim>{})",
|
||||
orphans, links, min_deg, links_per, sim_thresh);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn cmd_cap_degree(args: &[String]) -> Result<(), String> {
|
||||
let max_deg: usize = args.first().and_then(|s| s.parse().ok()).unwrap_or(50);
|
||||
let mut store = capnp_store::Store::load()?;
|
||||
let (hubs, pruned) = store.cap_degree(max_deg)?;
|
||||
store.save()?;
|
||||
println!("Capped {} hubs, pruned {} weak Auto edges (max_degree={})", hubs, pruned, max_deg);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn cmd_decay() -> Result<(), String> {
|
||||
let mut store = capnp_store::Store::load()?;
|
||||
let (decayed, pruned) = store.decay();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue