From 660395c47d0c02b42adedfaf676b62f0de72c21c Mon Sep 17 00:00:00 2001 From: Owen Lin Date: Thu, 9 Jul 2026 21:55:48 -0700 Subject: [PATCH] codex: fix CI failure on PR #31859 --- codex-rs/rollout/src/ordinal.rs | 13 ++++++------- codex-rs/rollout/src/recorder_tests.rs | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/codex-rs/rollout/src/ordinal.rs b/codex-rs/rollout/src/ordinal.rs index c87b32c02b..7325b29793 100644 --- a/codex-rs/rollout/src/ordinal.rs +++ b/codex-rs/rollout/src/ordinal.rs @@ -53,7 +53,9 @@ pub(crate) async fn ordinal_state_for_rollout(path: &Path) -> io::Result io::Result { - let history_mode = read_history_mode(path)?; + let Some(history_mode) = read_history_mode(path)? else { + return Ok(RolloutOrdinalState::Legacy); + }; if matches!(history_mode, ThreadHistoryMode::Legacy) { return Ok(RolloutOrdinalState::Legacy); } @@ -82,7 +84,7 @@ fn ordinal_state_for_rollout_blocking(path: &Path) -> io::Result io::Result { +fn read_history_mode(path: &Path) -> io::Result> { let reader = BufReader::new(File::open(path)?); for line in reader.lines() { let line = line?; @@ -101,10 +103,7 @@ fn read_history_mode(path: &Path) -> io::Result { path.display() ))); }; - return Ok(session_meta.meta.history_mode); + return Ok(Some(session_meta.meta.history_mode)); } - Err(io::Error::other(format!( - "rollout at {} contains no records", - path.display() - ))) + Ok(None) } diff --git a/codex-rs/rollout/src/recorder_tests.rs b/codex-rs/rollout/src/recorder_tests.rs index a5efbaafa1..bece7643d7 100644 --- a/codex-rs/rollout/src/recorder_tests.rs +++ b/codex-rs/rollout/src/recorder_tests.rs @@ -608,6 +608,30 @@ async fn recorder_omits_ordinals_from_legacy_rollouts() -> std::io::Result<()> { recorder.shutdown().await } +#[tokio::test] +async fn resumed_empty_rollout_omits_ordinals() -> std::io::Result<()> { + let home = TempDir::new().expect("temp dir"); + let config = test_config(home.path()); + let rollout_path = home.path().join("rollout.jsonl"); + File::create(&rollout_path)?; + + let recorder = + RolloutRecorder::new(&config, RolloutRecorderParams::resume(rollout_path.clone())).await?; + recorder + .record_canonical_items(&[agent_message_item("legacy")]) + .await?; + recorder.flush().await?; + + let text = fs::read_to_string(rollout_path)?; + let values = text + .lines() + .map(serde_json::from_str::) + .collect::, _>>()?; + assert!(values.iter().all(|value| value.get("ordinal").is_none())); + + recorder.shutdown().await +} + #[tokio::test] async fn persist_reports_filesystem_error_and_retries_buffered_items() -> std::io::Result<()> { let home = TempDir::new().expect("temp dir");