From 5929f058b04301e7eea7fd9a2d85c2b5ea531c51 Mon Sep 17 00:00:00 2001 From: Charles Cunningham Date: Sun, 15 Feb 2026 21:13:40 -0800 Subject: [PATCH] compact: snapshot reinjection above last summary --- codex-rs/core/src/compact.rs | 16 ++++++++++++++++ ...story_reinject_above_last_summary_shapes.snap | 10 ++++++++++ 2 files changed, 26 insertions(+) create mode 100644 codex-rs/core/src/snapshots/codex_core__compact__tests__process_compacted_history_reinject_above_last_summary_shapes.snap diff --git a/codex-rs/core/src/compact.rs b/codex-rs/core/src/compact.rs index ba50727942..bc7d2fc7e5 100644 --- a/codex-rs/core/src/compact.rs +++ b/codex-rs/core/src/compact.rs @@ -1660,6 +1660,22 @@ keep me updated }, ]; assert_eq!(refreshed, expected); + + let refreshed_value = + serde_json::to_value(&refreshed).expect("serialize refreshed history"); + let Value::Array(refreshed_items) = refreshed_value else { + panic!("expected refreshed history to serialize as array"); + }; + + assert_snapshot!( + "process_compacted_history_reinject_above_last_summary_shapes", + context_snapshot::format_labeled_items_snapshot( + "When compaction output has multiple summary-only user messages and no real user message, canonical context is reinserted above the last summary.", + &[("Refreshed History Layout", refreshed_items.as_slice())], + &ContextSnapshotOptions::default() + .render_mode(ContextSnapshotRenderMode::KindWithTextPrefix { max_chars: 64 }), + ) + ); } #[test] diff --git a/codex-rs/core/src/snapshots/codex_core__compact__tests__process_compacted_history_reinject_above_last_summary_shapes.snap b/codex-rs/core/src/snapshots/codex_core__compact__tests__process_compacted_history_reinject_above_last_summary_shapes.snap new file mode 100644 index 0000000000..906f79b55f --- /dev/null +++ b/codex-rs/core/src/snapshots/codex_core__compact__tests__process_compacted_history_reinject_above_last_summary_shapes.snap @@ -0,0 +1,10 @@ +--- +source: core/src/compact.rs +expression: "context_snapshot::format_labeled_items_snapshot(\"When compaction output has multiple summary-only user messages and no real user message, canonical context is reinserted above the last summary.\",\n&[(\"Refreshed History Layout\", refreshed_items.as_slice())],\n&ContextSnapshotOptions::default().render_mode(ContextSnapshotRenderMode::KindWithTextPrefix\n{ max_chars: 64 }),)" +--- +Scenario: When compaction output has multiple summary-only user messages and no real user message, canonical context is reinserted above the last summary. + +## Refreshed History Layout +00:message/user:\nolder summary +01:message/developer:fresh permissions +02:message/user:\nlatest summary