Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion src/autoskillit/execution/backends/codex.py
Original file line number Diff line number Diff line change
Expand Up @@ -584,7 +584,14 @@ def capabilities(self) -> BackendCapabilities:
inspector_capable=False,
supports_context_window_suffix=False,
has_unguarded_filesystem_access=True,
git_metadata_writable=False,
# Codex workspace-write sandbox mounts .git/ read-only.
# Evidence: codex-rs/protocol/src/permissions.rs hardcodes
# .git in PROTECTED_METADATA_PATH_NAMES; enforced via
# Seatbelt (macOS) and bwrap/landlock (Linux).
# Consumers: _auto_overrides.py, fleet/_api.py gate on this
# field; rules_backend_compat.py emits ERROR for
# git_metadata_write skills on backends where this is False.
git_metadata_writable=False, # sandbox excludes .git metadata path
skill_sigil="$",
session_dir_persistent=True,
)
Expand Down
6 changes: 4 additions & 2 deletions tests/arch/test_subpackage_isolation.py
Original file line number Diff line number Diff line change
Expand Up @@ -992,7 +992,7 @@ def test_data_directories_are_not_python_packages() -> None:
"and write-target boundary guards add defense-in-depth gate checks",
),
"execution/backends/codex.py": (
1114,
1125,
"REQ-CNST-010-E9: Codex backend β€” skill_sigil capability threading adds multi-line "
"keyword args to _ensure_skill_prefix call sites and _has_prefix guard; "
"write_guard_tool_names env injection adds 7 lines to _codex_exec_extras; "
Expand All @@ -1011,7 +1011,9 @@ def test_data_directories_are_not_python_packages() -> None:
"for T5-P4-A3-WP3 guard-hook backend dispatch"
"; _materialize_profile_skills function (~43 lines) for T5-P4-A4-WP2 profile skill "
"materialization into Codex session directories"
"; debug-level symlink failure log in _materialize_profile_skills (+5 net lines)",
"; debug-level symlink failure log in _materialize_profile_skills (+5 net lines)"
"; evidence comment above git_metadata_writable=False citing permissions.rs sandbox "
"protection and consumer path (+7 net lines) for T5-P6-A11-WP1",
),
}

Expand Down
5 changes: 5 additions & 0 deletions tests/execution/backends/test_codex_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -1748,3 +1748,8 @@ def test_developer_instructions_preserves_markdown_structure(self) -> None:
assert "# wp-elaborator" in body
assert "## Tool Constraints" in body
assert "```json" in body

def test_no_git_subdir_created(self) -> None:
self._write_all_source_files()
CodexBackend().setup_session_dir(self.session_dir)
assert not (self.session_dir / ".git").exists()
5 changes: 5 additions & 0 deletions tests/execution/backends/test_codex_capabilities_fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,8 @@ def test_default_skill_sandbox_mode(self):
from autoskillit.execution.backends.codex import CodexBackend

assert CodexBackend().capabilities.default_skill_sandbox_mode == "workspace-write"

def test_git_metadata_writable(self):
from autoskillit.execution.backends.codex import CodexBackend

assert CodexBackend().capabilities.git_metadata_writable is False
Loading