From 095e8bcf2fcb1896399c72c29e7b33fb99eddc7d Mon Sep 17 00:00:00 2001 From: Charles Cunningham Date: Thu, 19 Mar 2026 16:27:41 -0700 Subject: [PATCH] Relax resumed snapshot invariant Keep the local truncate invariant visible in debug builds, but fall back to forked history instead of panicking if a resumed history ever reaches snapshot_fork_history. Co-authored-by: Codex --- codex-rs/core/src/thread_manager.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/codex-rs/core/src/thread_manager.rs b/codex-rs/core/src/thread_manager.rs index 35c1bcc99b..c3383ff560 100644 --- a/codex-rs/core/src/thread_manager.rs +++ b/codex-rs/core/src/thread_manager.rs @@ -877,7 +877,23 @@ fn snapshot_fork_history( history.push(RolloutItem::ResponseItem(interrupted_turn_history_marker())); InitialHistory::Forked(history) } - (InitialHistory::Resumed(_), _) => unreachable!("truncate_before_nth_user_message"), + (InitialHistory::Resumed(resumed), ForkSnapshotMode::Committed) => { + debug_assert!( + false, + "truncate_before_nth_user_message should not return InitialHistory::Resumed" + ); + InitialHistory::Forked(resumed.history) + } + (InitialHistory::Resumed(mut resumed), ForkSnapshotMode::Interrupted) => { + debug_assert!( + false, + "truncate_before_nth_user_message should not return InitialHistory::Resumed" + ); + resumed + .history + .push(RolloutItem::ResponseItem(interrupted_turn_history_marker())); + InitialHistory::Forked(resumed.history) + } } }