From ca84df34b8d4106e7ac85e14f3adf4137aeb9b0e Mon Sep 17 00:00:00 2001 From: Charles Cunningham Date: Wed, 18 Feb 2026 02:22:07 -0800 Subject: [PATCH] edge case --- codex-rs/core/src/compact.rs | 50 +++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/codex-rs/core/src/compact.rs b/codex-rs/core/src/compact.rs index ba2875cc15..7eef5b5306 100644 --- a/codex-rs/core/src/compact.rs +++ b/codex-rs/core/src/compact.rs @@ -378,7 +378,7 @@ pub(crate) fn process_compacted_history( /// - prefer the last real (non-summary) user message; /// - otherwise fall back to the last summary user message. /// -/// If no user anchor exists, this is a no-op. +/// If no user anchor exists, append initial context at the end. pub(crate) fn insert_initial_context_before_last_user_anchor( compacted_history: &mut Vec, initial_context: Vec, @@ -396,6 +396,8 @@ pub(crate) fn insert_initial_context_before_last_user_anchor( }); if let Some(index) = insertion_index { compacted_history.splice(index..index, initial_context); + } else { + compacted_history.extend(initial_context); } } @@ -1334,4 +1336,50 @@ keep me updated ]; assert_eq!(compacted_history, expected); } + + #[test] + fn insert_initial_context_before_last_user_anchor_appends_when_no_user_anchor_exists() { + let mut compacted_history = vec![ResponseItem::Message { + id: None, + role: "assistant".to_string(), + content: vec![ContentItem::OutputText { + text: "assistant only".to_string(), + }], + end_turn: None, + phase: None, + }]; + let initial_context = vec![ResponseItem::Message { + id: None, + role: "developer".to_string(), + content: vec![ContentItem::InputText { + text: "fresh permissions".to_string(), + }], + end_turn: None, + phase: None, + }]; + + insert_initial_context_before_last_user_anchor(&mut compacted_history, initial_context); + + let expected = vec![ + ResponseItem::Message { + id: None, + role: "assistant".to_string(), + content: vec![ContentItem::OutputText { + text: "assistant only".to_string(), + }], + end_turn: None, + phase: None, + }, + ResponseItem::Message { + id: None, + role: "developer".to_string(), + content: vec![ContentItem::InputText { + text: "fresh permissions".to_string(), + }], + end_turn: None, + phase: None, + }, + ]; + assert_eq!(compacted_history, expected); + } }