From 9d1d690f175e4b4b03f06cd9afb623d7f9c98bc4 Mon Sep 17 00:00:00 2001 From: ProofOfConcept Date: Wed, 11 Mar 2026 17:09:19 -0400 Subject: [PATCH] connectivity: suggest link-add commands for islands MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When connectivity shows isolated nodes, print copy-pasteable poc-memory graph link-add commands targeting the highest-degree node in the largest cluster. Closes the diagnose→fix loop. --- poc-memory/src/query.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/poc-memory/src/query.rs b/poc-memory/src/query.rs index 9ff2a89..fdc76b9 100644 --- a/poc-memory/src/query.rs +++ b/poc-memory/src/query.rs @@ -579,9 +579,20 @@ fn print_connectivity(results: &[QueryResult], graph: &Graph) { let result_set: std::collections::HashSet<&str> = keys.iter().copied().collect(); + // Find the largest cluster to use as link-add target for islands + let largest_cluster = components.iter() + .max_by_key(|c| c.len()) + .and_then(|c| if c.len() > 1 { + // Pick highest-degree node in largest cluster as link target + c.iter().max_by_key(|k| graph.degree(k)).cloned() + } else { None }); + + let mut islands: Vec<&str> = Vec::new(); + for (i, component) in components.iter().enumerate() { if component.len() == 1 { println!(" island: {}", component[0]); + islands.push(&component[0]); } else { println!(" cluster {} ({} nodes):", i + 1, component.len()); for node in component { @@ -604,4 +615,14 @@ fn print_connectivity(results: &[QueryResult], graph: &Graph) { } } } + + // Suggest link-add commands for islands + if !islands.is_empty() { + if let Some(ref hub) = largest_cluster { + println!("\nFix islands:"); + for island in &islands { + println!(" poc-memory graph link-add {} {}", island, hub); + } + } + } }