feat(nvim,telemetry): implement ADR-0102 circuit breaker and ADR-0103 knowledge graph projection

This commit is contained in:
Riz Ashraf committed 2026-10-07 17:40:30 +01:00
1 parent 3d77e60a02
commit ec977c24dd
7 files changed
+692 -11

No files matched your search

+61
View File
@@ -2841,3 +2841,64 @@ mod tests {
assert!(pre_res.contains("active_tasks"));
}
#[tokio::test]
async fn test_tech_debt_priority_aware_eviction() {
let dir = tempfile::tempdir().unwrap();
let state = Arc::new(MemoryState::new(dir.path().to_str().unwrap()));
let handler = TechDebtHandler;
// Populate 300 tech debts: 1 critical, 1 resolved, 298 low
state.code.tech_debts.modify(|debts| {
debts.push(crate::models::TechDebt {
id: "critical-debt".to_string(),
namespace: "global".to_string(),
description: "Critical security issue".to_string(),
severity: Some("critical".to_string()),
is_resolved: false,
created_at: 100,
..Default::default()
});
debts.push(crate::models::TechDebt {
id: "resolved-debt".to_string(),
namespace: "global".to_string(),
description: "Old resolved issue".to_string(),
severity: Some("high".to_string()),
is_resolved: true,
created_at: 50,
..Default::default()
});
for i in 0..298 {
debts.push(crate::models::TechDebt {
id: format!("low-debt-{}", i),
namespace: "global".to_string(),
description: format!("Low debt {}", i),
severity: Some("low".to_string()),
is_resolved: false,
created_at: 200 + i,
..Default::default()
});
}
});
// Add 301st item: should evict the resolved debt first
let res = handler
.execute(
serde_json::json!({
"action": "log",
"description": "New medium debt",
"severity": "medium"
}),
state.clone(),
)
.await
.unwrap();
assert_eq!(res, "Tech debt logged");
state.code.tech_debts.read_with(|debts| {
assert_eq!(debts.len(), 300);
assert!(debts.iter().any(|d| d.id == "critical-debt"), "Critical unresolved debt must be retained");
assert!(!debts.iter().any(|d| d.id == "resolved-debt"), "Resolved debt should have been evicted first");
});
}
}