diff --git a/codex-rs/core/tests/common/test_codex.rs b/codex-rs/core/tests/common/test_codex.rs index 53ab552333..f36444a1f0 100644 --- a/codex-rs/core/tests/common/test_codex.rs +++ b/codex-rs/core/tests/common/test_codex.rs @@ -1260,6 +1260,11 @@ pub fn test_codex() -> TestCodexBuilder { .features .disable(Feature::Apps) .expect("test config should allow Apps override"); + // Snapshot tests opt in explicitly; avoid spawning login shells for every test. + config + .features + .disable(Feature::ShellSnapshot) + .expect("test config should allow ShellSnapshot override"); })], auth: CodexAuth::from_api_key("dummy"), pre_build_hooks: vec![], diff --git a/codex-rs/core/tests/suite/approvals.rs b/codex-rs/core/tests/suite/approvals.rs index da822652ba..571acd086a 100644 --- a/codex-rs/core/tests/suite/approvals.rs +++ b/codex-rs/core/tests/suite/approvals.rs @@ -5,6 +5,7 @@ use anyhow::Result; use codex_config::types::ApprovalsReviewer; use codex_core::CodexThread; use codex_core::config::Constrained; +use codex_core::config::ThreadStoreConfig; use codex_core::sandboxing::SandboxPermissions; use codex_features::Feature; use codex_protocol::approvals::NetworkApprovalProtocol; @@ -1846,8 +1847,13 @@ async fn run_scenario(scenario: &ScenarioSpec) -> Result<()> { let model_override = scenario.model_override; let model = model_override.unwrap_or("gpt-5.4"); let policy_src = scenario.action.policy_src(); + let thread_store_id = format!("approval-scenario-{}", scenario.name); let mut builder = test_codex().with_model(model).with_config(move |config| { + // These scenarios assert tool behavior, not rollout persistence. + config.experimental_thread_store = ThreadStoreConfig::InMemory { + id: thread_store_id, + }; config.permissions.approval_policy = Constrained::allow_any(approval_policy); config .set_legacy_sandbox_policy(sandbox_policy.clone())