From 5b1375b8408da52457ebcebb0458cc07285e87d0 Mon Sep 17 00:00:00 2001 From: Josh Bowyer Date: Thu, 21 May 2026 09:12:36 -0500 Subject: [PATCH] fix(compact): flatten prior highlights to prevent nested compaction growth Each compaction round was re-nesting the previous summary under '- Previously compacted context:', causing the summary to grow by ~depth * overhead per compaction cycle. After 20+ compactions the summary was 30+ levels deep and 500KB+. The fix flattens prior compaction highlights directly into the top-level list (prefixed with '-'), while keeping the current round's highlights under '- Newly compacted context:'. This means compaction summary size is now O(depth) rather than O(depth^2). --- rust/crates/runtime/src/compact.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/rust/crates/runtime/src/compact.rs b/rust/crates/runtime/src/compact.rs index 7b0f5f95ed..48726b2dae 100644 --- a/rust/crates/runtime/src/compact.rs +++ b/rust/crates/runtime/src/compact.rs @@ -291,13 +291,11 @@ fn merge_compact_summaries(existing_summary: Option<&str>, new_summary: &str) -> let mut lines = vec!["".to_string(), "Conversation summary:".to_string()]; + // Flatten prior highlights directly — do NOT re-nest them under + // "- Previously compacted context:" or the nesting compounds with each + // compaction cycle, inflating the summary by ~depth * overhead per turn. if !previous_highlights.is_empty() { - lines.push("- Previously compacted context:".to_string()); - lines.extend( - previous_highlights - .into_iter() - .map(|line| format!(" {line}")), - ); + lines.extend(previous_highlights.into_iter().map(|line| format!("- {line}"))); } if !new_highlights.is_empty() {