Skip to content

permissions: canonicalize workspace_roots and danger-full-access names#22624

Merged
bolinfest merged 1 commit into
mainfrom
pr22624
May 14, 2026
Merged

permissions: canonicalize workspace_roots and danger-full-access names#22624
bolinfest merged 1 commit into
mainfrom
pr22624

Conversation

@bolinfest
Copy link
Copy Markdown
Collaborator

@bolinfest bolinfest commented May 14, 2026

Why

This is a small precursor to the larger permissions-migration work. Both the comparison stack in #22401 / #22402 and the alternate stack in #22610 / #22611 / #22612 are easier to review if the terminology is already settled underneath them.

Because :project_roots and :danger-no-sandbox have not shipped as stable user-facing surface area, carrying them forward as aliases would just add more migration logic to the later stacks. This PR removes that ambiguity now so the follow-on work can rely on one spelling for each built-in concept.

What Changed

  • renamed the config-facing special filesystem key from :project_roots to :workspace_roots
  • dropped unpublished :project_roots parsing support in core/src/config/permissions.rs, so new config only recognizes :workspace_roots
  • renamed the built-in full-access permission profile id from :danger-no-sandbox to :danger-full-access
  • dropped unpublished :danger-no-sandbox support entirely, including the old active-profile canonicalization path, and added explicit rejection coverage for the legacy id
  • introduced shared built-in permission-profile id constants in codex-rs/protocol/src/models.rs
  • updated core, app-server, and tui call sites that special-case built-in profiles to use the shared constants and canonical ids
  • updated tests and the Linux sandbox README to use :workspace_roots / :danger-full-access

Verification

I focused verification on the three places this rename can regress: config parsing, active-profile identity surfaced back out of core, and user/server call sites that special-case built-in profiles.

Targeted checks:

  • config::tests::default_permissions_can_select_builtin_profile_without_permissions_table
  • config::tests::default_permissions_read_only_applies_additional_writable_roots_as_modifications
  • config::tests::default_permissions_can_select_builtin_full_access_profile
  • config::tests::legacy_danger_no_sandbox_is_rejected
  • workspace_root filtered codex-core tests
  • request_processors::thread_processor::thread_processor_tests::thread_processor_behavior_tests::requested_permissions_trust_project_uses_permission_profile_intent
  • suite::v2::turn_start::turn_start_rejects_invalid_permission_selection_before_starting_turn
  • status::tests::status_snapshot_shows_auto_review_permissions
  • status::tests::status_permissions_full_disk_managed_with_network_is_danger_full_access
  • app_server_session::tests::embedded_turn_permissions_use_active_profile_selection

@bolinfest bolinfest requested a review from a team as a code owner May 14, 2026 06:51
@bolinfest bolinfest changed the title permissions: canonicalize workspace roots and full access names permissions: canonicalize workspace_roots and danger-full-access names May 14, 2026
@bolinfest bolinfest requested a review from viyatb-oai May 14, 2026 06:53
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: 250f3176e1

ℹ️ 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".

Comment on lines +627 to 630
":workspace_roots" => Some(FileSystemSpecialPath::project_roots(/*subpath*/ None)),
":tmpdir" => Some(FileSystemSpecialPath::Tmpdir),
_ if path.starts_with(':') => {
Some(FileSystemSpecialPath::unknown(path, /*subpath*/ None))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P1 Badge Preserve legacy :project_roots configs

When upgrading with an existing config that uses the previously documented [permissions.<profile>.filesystem.":project_roots"] key, this parser now falls through to FileSystemSpecialPath::Unknown, and the comment above notes unknown paths are warned and ignored. That means those profiles silently stop granting/denying the intended workspace-root permissions after upgrade; please keep :project_roots as a legacy alias while canonicalizing display/config output to :workspace_roots.

Useful? React with 👍 / 👎.

@bolinfest bolinfest merged commit 01d93fd into main May 14, 2026
75 of 94 checks passed
@bolinfest bolinfest deleted the pr22624 branch May 14, 2026 15:45
@github-actions github-actions Bot locked and limited conversation to collaborators May 14, 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