From 5a89bb1c4eefbd8f4897a2cb1c9f1dde06ae98ab Mon Sep 17 00:00:00 2001 From: Friel Date: Mon, 30 Mar 2026 03:07:31 +0000 Subject: [PATCH] test: refresh fork-context expectations --- .../app-server/tests/suite/v2/turn_start.rs | 11 ++++++---- .../src/tools/handlers/multi_agents_tests.rs | 22 ++++++++++++++++++- .../tests/suite/subagent_notifications.rs | 7 +++--- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/codex-rs/app-server/tests/suite/v2/turn_start.rs b/codex-rs/app-server/tests/suite/v2/turn_start.rs index 3155a4be9c..bc3c4750bd 100644 --- a/codex-rs/app-server/tests/suite/v2/turn_start.rs +++ b/codex-rs/app-server/tests/suite/v2/turn_start.rs @@ -1665,12 +1665,15 @@ async fn turn_start_file_change_approval_v2() -> Result<()> { } #[tokio::test] -async fn turn_start_emits_spawn_agent_item_with_model_metadata_v2() -> Result<()> { +async fn turn_start_emits_spawn_agent_item_with_effective_inherited_model_metadata_v2() -> Result<()> +{ skip_if_no_network!(Ok(())); const CHILD_PROMPT: &str = "child: do work"; const PARENT_PROMPT: &str = "spawn a child and continue"; const SPAWN_CALL_ID: &str = "spawn-call-1"; + const INHERITED_MODEL: &str = "gpt-5.2-codex"; + const INHERITED_REASONING_EFFORT: ReasoningEffort = ReasoningEffort::XHigh; const REQUESTED_MODEL: &str = "gpt-5.1"; const REQUESTED_REASONING_EFFORT: ReasoningEffort = ReasoningEffort::Low; @@ -1726,7 +1729,7 @@ async fn turn_start_emits_spawn_agent_item_with_model_metadata_v2() -> Result<() let thread_req = mcp .send_thread_start_request(ThreadStartParams { - model: Some("gpt-5.2-codex".to_string()), + model: Some(INHERITED_MODEL.to_string()), ..Default::default() }) .await?; @@ -1823,8 +1826,8 @@ async fn turn_start_emits_spawn_agent_item_with_model_metadata_v2() -> Result<() assert_eq!(sender_thread_id, thread.id); assert_eq!(receiver_thread_ids, vec![receiver_thread_id.clone()]); assert_eq!(prompt, Some(CHILD_PROMPT.to_string())); - assert_eq!(model, Some(REQUESTED_MODEL.to_string())); - assert_eq!(reasoning_effort, Some(REQUESTED_REASONING_EFFORT)); + assert_eq!(model, Some(INHERITED_MODEL.to_string())); + assert_eq!(reasoning_effort, Some(INHERITED_REASONING_EFFORT)); let agent_state = agents_states .get(&receiver_thread_id) .expect("spawn completion should include child agent state"); diff --git a/codex-rs/core/src/tools/handlers/multi_agents_tests.rs b/codex-rs/core/src/tools/handlers/multi_agents_tests.rs index e2a58653a2..48def14a5e 100644 --- a/codex-rs/core/src/tools/handlers/multi_agents_tests.rs +++ b/codex-rs/core/src/tools/handlers/multi_agents_tests.rs @@ -248,7 +248,12 @@ async fn spawn_agent_uses_explorer_role_and_preserves_approval_policy() { let (mut session, mut turn) = make_session_and_context().await; let manager = thread_manager(); + let root = manager + .start_thread((*turn.config).clone()) + .await + .expect("root thread should start"); session.services.agent_control = manager.agent_control(); + session.conversation_id = root.thread_id; let mut config = (*turn.config).clone(); let provider = built_in_model_providers(/* openai_base_url */ /*openai_base_url*/ None)["ollama"].clone(); @@ -406,7 +411,12 @@ async fn multi_agent_v2_spawn_fork_turns_ignores_child_model_overrides() { async fn spawn_agent_returns_agent_id_without_task_name() { let (mut session, turn) = make_session_and_context().await; let manager = thread_manager(); + let root = manager + .start_thread((*turn.config).clone()) + .await + .expect("root thread should start"); session.services.agent_control = manager.agent_control(); + session.conversation_id = root.thread_id; let output = SpawnAgentHandler .handle(invocation( @@ -1751,7 +1761,12 @@ async fn spawn_agent_reapplies_runtime_sandbox_after_role_config() { let (mut session, mut turn) = make_session_and_context().await; let manager = thread_manager(); + let root = manager + .start_thread((*turn.config).clone()) + .await + .expect("root thread should start"); session.services.agent_control = manager.agent_control(); + session.conversation_id = root.thread_id; let expected_sandbox = pick_allowed_sandbox_policy( &turn.config.permissions.sandbox_policy, turn.config.permissions.sandbox_policy.get().clone(), @@ -1862,13 +1877,18 @@ async fn spawn_agent_allows_depth_up_to_configured_max_depth() { let (mut session, mut turn) = make_session_and_context().await; let manager = thread_manager(); + let root = manager + .start_thread((*turn.config).clone()) + .await + .expect("root thread should start"); session.services.agent_control = manager.agent_control(); + session.conversation_id = root.thread_id; let mut config = (*turn.config).clone(); config.agent_max_depth = DEFAULT_AGENT_MAX_DEPTH + 1; turn.config = Arc::new(config); turn.session_source = SessionSource::SubAgent(SubAgentSource::ThreadSpawn { - parent_thread_id: session.conversation_id, + parent_thread_id: root.thread_id, depth: DEFAULT_AGENT_MAX_DEPTH, agent_path: None, agent_nickname: None, diff --git a/codex-rs/core/tests/suite/subagent_notifications.rs b/codex-rs/core/tests/suite/subagent_notifications.rs index 694637405a..899522ee18 100644 --- a/codex-rs/core/tests/suite/subagent_notifications.rs +++ b/codex-rs/core/tests/suite/subagent_notifications.rs @@ -413,8 +413,7 @@ async fn spawned_child_receives_forked_parent_context() -> Result<()> { } #[tokio::test(flavor = "multi_thread", worker_threads = 2)] -async fn spawn_agent_requested_model_and_reasoning_override_inherited_settings_without_role() --> Result<()> { +async fn spawn_agent_inherits_parent_model_and_reasoning_without_role() -> Result<()> { skip_if_no_network!(Ok(())); let server = start_mock_server().await; @@ -429,10 +428,10 @@ async fn spawn_agent_requested_model_and_reasoning_override_inherited_settings_w ) .await?; - assert_eq!(child_snapshot.model, REQUESTED_MODEL); + assert_eq!(child_snapshot.model, INHERITED_MODEL); assert_eq!( child_snapshot.reasoning_effort, - Some(REQUESTED_REASONING_EFFORT) + Some(INHERITED_REASONING_EFFORT) ); Ok(())