From 8933a816eb5a8cedd31716b2e778afcd4e4c33a3 Mon Sep 17 00:00:00 2001 From: jif Date: Fri, 18 Sep 2026 12:46:05 +0000 Subject: [PATCH] Replay guardian checkpoints into a fresh session in tests (#46514) ## Why Replaying a checkpoint into the original session can let preserved live state mask missing checkpoint data. ## What changed Update `guardian_checkpoint_preserves_live_context_without_storage` to restore forked history into a fresh session with the matching guardian context mode. Keep the existing context restoration assertions for both `Legacy` and `ThreadOwned` modes. GitOrigin-RevId: 211b567f6b33ffca6dc51110a208aec234004b98 --- codex-rs/core/src/session/guardian_checkpoint_tests.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/codex-rs/core/src/session/guardian_checkpoint_tests.rs b/codex-rs/core/src/session/guardian_checkpoint_tests.rs index f6ba9dc340..88d26dc04b 100644 --- a/codex-rs/core/src/session/guardian_checkpoint_tests.rs +++ b/codex-rs/core/src/session/guardian_checkpoint_tests.rs @@ -87,10 +87,14 @@ async fn guardian_checkpoint_preserves_live_context_without_storage(mode: Guardi session .replace_history(Vec::new(), /*reference_context_item*/ None) .await; - session - .record_initial_history(InitialHistory::Forked(items)) + // Replay into a fresh session so preserved live state cannot mask missing checkpoint data. + let (mut fork, _) = make_session_and_context().await; + fork.guardian_context_mode = mode; + fork.state.lock().await.history = + ContextManager::with_guardian_context_mode(mode, &SessionSource::default()); + fork.record_initial_history(InitialHistory::Forked(items)) .await; - let restored = session.clone_history().await; + let restored = fork.clone_history().await; assert_eq!(restored.annotated_items(), expected.annotated_items()); assert_eq!(restored.retained_context(), expected.retained_context()); assert_eq!(