diff --git a/codex-rs/core/src/exec_policy.rs b/codex-rs/core/src/exec_policy.rs index dbc175deb..981b2d11d 100644 --- a/codex-rs/core/src/exec_policy.rs +++ b/codex-rs/core/src/exec_policy.rs @@ -111,6 +111,12 @@ pub(crate) fn child_uses_parent_exec_policy(parent_config: &Config, child_config } exec_policy_config_folders(parent_config) == exec_policy_config_folders(child_config) + && parent_config + .config_layer_stack + .ignore_user_and_project_exec_policy_rules() + == child_config + .config_layer_stack + .ignore_user_and_project_exec_policy_rules() && parent_config.config_layer_stack.requirements().exec_policy == child_config.config_layer_stack.requirements().exec_policy } diff --git a/codex-rs/core/src/exec_policy_tests.rs b/codex-rs/core/src/exec_policy_tests.rs index c1abca5cf..fe4560a78 100644 --- a/codex-rs/core/src/exec_policy_tests.rs +++ b/codex-rs/core/src/exec_policy_tests.rs @@ -161,6 +161,22 @@ async fn child_uses_parent_exec_policy_when_non_exec_policy_layers_differ() { assert!(child_uses_parent_exec_policy(&parent_config, &child_config)); } +#[tokio::test] +async fn child_does_not_use_parent_exec_policy_when_ignore_rules_differs() { + let (_home, parent_config) = test_config().await; + let mut child_config = parent_config.clone(); + child_config.config_layer_stack = child_config + .config_layer_stack + .with_user_and_project_exec_policy_rules_ignored( + /*ignore_user_and_project_exec_policy_rules*/ true, + ); + + assert!(!child_uses_parent_exec_policy( + &parent_config, + &child_config + )); +} + #[tokio::test] async fn child_does_not_use_parent_exec_policy_when_requirements_exec_policy_differs() { let (_home, parent_config) = test_config().await;