Make deny canonical for filesystem permission entries (#23493)

## Why
Filesystem permission profiles used `none` for deny-read entries, which
is less direct than the action the entry actually represents. This
change makes `deny` the canonical filesystem permission spelling while
preserving compatibility for older configs that still send `none`.

## What changed
- rename `FileSystemAccessMode::None` to `Deny`
- serialize and generate schemas with `deny` as the canonical value
- retain `none` only as a legacy input alias for temporary config
compatibility
- update filesystem glob diagnostics and regression coverage to use the
canonical spelling
- refresh config and app-server schema fixtures to match the new wire
shape

## Validation
- `cargo test -p codex-protocol`
- `cargo test -p codex-app-server-protocol`
- `cargo test -p codex-core config_toml_deserializes_permission_profiles
--lib`
- `cargo test -p codex-core
read_write_glob_patterns_still_reject_non_subpath_globs --lib`

Earlier in the session, a broad `cargo test -p codex-core` run reached
unrelated pre-existing failures in timing/snapshot/git-info tests under
this environment; the targeted surfaces touched by this PR passed
cleanly.
This commit is contained in:
viyatb-oai authored and GitHub committed 2026-05-19 11:03:47 -07:00
1 parent 05b8ce4354
commit 3c76081876
44 files changed
+165 -148

No files matched your search

+1 -1
View File
@@ -294,7 +294,7 @@ mod tests {
path: FileSystemPath::GlobPattern {
pattern: "**/.env".to_string(),
},
access: FileSystemAccessMode::None,
access: FileSystemAccessMode::Deny,
},
],
glob_scan_max_depth: None,
@@ -960,7 +960,7 @@ pub(crate) fn format_additional_permissions_rule(
.entries
.iter()
.flatten()
.filter(|entry| entry.access == FileSystemAccessMode::None),
.filter(|entry| entry.access == FileSystemAccessMode::Deny),
);
if !denied_reads.is_empty() {
parts.push(format!("deny read {denied_reads}"));
@@ -1820,7 +1820,7 @@ mod tests {
path: FileSystemPath::GlobPattern {
pattern: "**/*.env".to_string(),
},
access: FileSystemAccessMode::None,
access: FileSystemAccessMode::Deny,
},
]),
glob_scan_max_depth: None,
@@ -112,7 +112,7 @@ async fn submission_includes_configured_active_permission_profile() {
path: FileSystemPath::GlobPattern {
pattern: "/home/user/project/secrets/**".to_string(),
},
access: FileSystemAccessMode::None,
access: FileSystemAccessMode::Deny,
},
],
glob_scan_max_depth: None,
@@ -245,7 +245,7 @@ async fn session_configured_syncs_widget_config_permissions_and_cwd() {
path: FileSystemPath::GlobPattern {
pattern: "**/.secret".to_string(),
},
access: FileSystemAccessMode::None,
access: FileSystemAccessMode::Deny,
},
],
glob_scan_max_depth: None,