Skip to content

fix: align core approvals with split sandbox policies#14171

Merged
viyatb-oai merged 4 commits intomainfrom
codex/viyatb/permissions-core-consumers
Mar 12, 2026
Merged

fix: align core approvals with split sandbox policies#14171
viyatb-oai merged 4 commits intomainfrom
codex/viyatb/permissions-core-consumers

Conversation

@viyatb-oai
Copy link
Copy Markdown
Collaborator

@viyatb-oai viyatb-oai commented Mar 10, 2026

Stack

fix: fail closed for unsupported split windows sandboxing #14172
fix: preserve split filesystem semantics in linux sandbox #14173
-> fix: align core approvals with split sandbox policies #14171
refactor: centralize filesystem permissions precedence #14174

Why This PR Exists

This PR is intentionally narrower than the title may suggest.

Most of the original split-permissions migration already landed in the earlier #13434 -> #13453 stack. In particular:

  • #13439 already did the broad runtime plumbing for split filesystem and network policies.
  • #13445 already moved apply_patch safety onto filesystem-policy semantics.
  • #13448 already switched macOS Seatbelt generation to split policies.
  • #13449 and #13453 already handled Linux helper and bubblewrap enforcement.
  • #13440 already introduced the first protocol-side helpers for deriving effective filesystem access.

The reason this PR still exists is that after the follow-on [permissions] work and the new shared precedence helper in #14174, a few core approval paths were still deciding behavior from the legacy SandboxPolicy projection instead of the split filesystem policy that actually carries the carveouts.

That means this PR is mostly a cleanup and alignment pass over the remaining core consumers, not a fresh sandbox backend migration.

What Is Actually New Here

  • make unmatched-command fallback decisions consult FileSystemSandboxPolicy instead of only legacy DangerFullAccess / ReadOnly / WorkspaceWrite categories
  • thread file_system_sandbox_policy into the shell, unified-exec, and intercepted-exec approval paths so they all use the same split-policy semantics
  • keep apply_patch safety on the same effective-access rules as the shared protocol helper, rather than letting it drift through compatibility projections
  • add loader-level regression coverage proving legacy sandbox_mode config still builds split policies and round-trips back without semantic drift

What This PR Does Not Do

This PR does not introduce new platform backend enforcement on its own.

  • Linux backend parity remains in #14173.
  • Windows fail-closed handling remains in #14172.
  • The shared precedence/model changes live in #14174.

Files To Focus On

  • core/src/exec_policy.rs: unmatched-command fallback and approval rendering now read the split filesystem policy directly
  • core/src/tools/sandboxing.rs: default exec-approval requirement keys off FileSystemSandboxPolicy.kind
  • core/src/tools/handlers/shell.rs: shell approval requests now carry the split filesystem policy
  • core/src/unified_exec/process_manager.rs: unified-exec approval requests now carry the split filesystem policy
  • core/src/tools/runtimes/shell/unix_escalation.rs: intercepted exec fallback now uses the same split-policy approval semantics
  • core/src/safety.rs: apply_patch safety keeps using effective filesystem access rather than legacy sandbox categories
  • core/src/config/config_tests.rs: new regression coverage for legacy sandbox_mode no-drift behavior through the split-policy loader

Notes

  • core/src/codex.rs and core/src/codex_tests.rs are just small fallout updates for RequestPermissionsResponse.scope; they are not the point of the PR.
  • If you reviewed the earlier #13439 / #13445 stack, the main review question here is simply: “are there any remaining approval or patch-safety paths that still reconstruct semantics from legacy SandboxPolicy instead of consuming the split filesystem policy directly?”

Testing

  • cargo test -p codex-core legacy_sandbox_mode_config_builds_split_policies_without_drift
  • cargo test -p codex-core request_permissions
  • cargo test -p codex-core intercepted_exec_policy
  • cargo test -p codex-core restricted_sandbox_requires_exec_approval_on_request
  • cargo test -p codex-core unmatched_on_request_uses_split_filesystem_policy_for_escalation_prompts
  • cargo test -p codex-core explicit_
  • cargo clippy -p codex-core --tests -- -D warnings

@viyatb-oai viyatb-oai marked this pull request as ready for review March 10, 2026 04:37
Copy link
Copy Markdown
Contributor

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ef8cb44979

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@viyatb-oai viyatb-oai force-pushed the codex/viyatb/permissions-core-consumers branch 2 times, most recently from a6ed2e6 to d4f22d3 Compare March 12, 2026 01:12
Base automatically changed from codex/viyatb/permissions-precedence to main March 12, 2026 01:35
viyatb-oai added a commit that referenced this pull request Mar 12, 2026
## Stack

   fix: fail closed for unsupported split windows sandboxing #14172
   fix: preserve split filesystem semantics in linux sandbox #14173
   fix: align core approvals with split sandbox policies #14171
-> refactor: centralize filesystem permissions precedence #14174

## Summary
- add a shared per-path split filesystem precedence helper in
`FileSystemSandboxPolicy`
- derive readable, writable, and unreadable roots from the same
most-specific resolution rules
- add regression coverage for nested `write` / `read` / `none` carveouts
and legacy bridge enforcement detection

## Testing
- cargo test -p codex-protocol
- cargo clippy -p codex-protocol --tests -- -D warnings
@viyatb-oai viyatb-oai force-pushed the codex/viyatb/permissions-core-consumers branch from d4f22d3 to 441353d Compare March 12, 2026 01:44
@viyatb-oai viyatb-oai enabled auto-merge (squash) March 12, 2026 02:13
@viyatb-oai viyatb-oai merged commit c2d5458 into main Mar 12, 2026
35 of 36 checks passed
@viyatb-oai viyatb-oai deleted the codex/viyatb/permissions-core-consumers branch March 12, 2026 02:23
@github-actions github-actions bot locked and limited conversation to collaborators Mar 12, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants