Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
0c1bdcd
Enforce per-task file restrictions in implement phase
Feb 26, 2026
d0c17c3
Add gap tests for per-task file restriction enforcement
Feb 26, 2026
b4143f0
Fix formatting and mypy issues in per-task file restriction code
Feb 26, 2026
5073c78
Add check results for issue 912 implement phase
Feb 26, 2026
ce4d80b
Persist statefiles after implement phase
Feb 26, 2026
d8cff9d
Fix checks: apply automated formatting fixes
Feb 26, 2026
e7fd56c
Address review feedback on per-task file restrictions
james-in-a-box[bot] Feb 26, 2026
8d4cd1b
Trigger CI rerun after lint error resolution
james-in-a-box[bot] Feb 26, 2026
11d554c
Merge remote-tracking branch 'origin/main' into egg/issue-912
Feb 26, 2026
bdc1ec0
Fix NameError: rename is_checkpoint_push to is_infrastructure_push
james-in-a-box[bot] Feb 26, 2026
8a40bbd
Address non-blocking review suggestions
james-in-a-box[bot] Feb 26, 2026
c4af2d0
Merge origin/main into egg/issue-912: resolve conflicts in test_sessi…
jwbron Feb 26, 2026
73fec0d
Fix stale timeout in prune_expired_sessions, remove double wait in wo…
james-in-a-box[bot] Feb 26, 2026
8d0e9c0
Add file access escape hatch and role-agnostic enforcement
Feb 26, 2026
e6ebfae
Address PR #939 review: security fixes for file access escape hatch
Feb 26, 2026
754ed62
Trigger review feedback loop
Feb 26, 2026
86c49a5
Merge origin/main into egg/issue-912: resolve conflict in gateway/REA…
jwbron Mar 2, 2026
d8ef3c8
Merge origin/main into egg/issue-912: resolve additive conflict in ga…
jwbron Mar 6, 2026
e0b5f5c
Fix formatting in test_file_request.py
jwbron Mar 6, 2026
366f81b
Fix comment: file_exceptions also bypass phase restrictions
egg-reviewer[bot] Mar 6, 2026
5cb2c62
Merge origin/main into egg/issue-912: resolve additive conflicts in g…
jwbron Mar 13, 2026
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
73 changes: 73 additions & 0 deletions .egg-state/agent-outputs/912-integrator-output.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
{
"issue": 912,
"pipeline_id": "issue-912",
"phase": "implement",
"agent": "integrator",
"status": "pass",
"summary": "All 7084 tests pass. Coder and tester changes integrate cleanly. Only fix needed: ruff formatting (4 files) and 3 unused mypy type-ignore comments in post_agent_commit.py.",
"integration_commit": "6705b6b02",
"test_results": {
"total": 7084,
"passed": 7084,
"failed": 0,
"skipped": 85,
"warnings": 4,
"duration_seconds": 76.37
},
"lint_results": {
"ruff_check": "pass",
"ruff_format": "pass (4 files reformatted by integrator)",
"mypy": "pass (3 unused type-ignore comments removed by integrator)"
},
"issues_found": [
{
"severity": "low",
"component": "gateway",
"description": "4 files had ruff formatting issues (gateway/gateway.py, 3 gap test files). Auto-fixed with ruff format.",
"fix": "Ran ruff format on the 4 files.",
"files": [
"gateway/gateway.py",
"gateway/tests/test_post_agent_commit_gaps.py",
"gateway/tests/test_session_file_restrictions_gaps.py",
"orchestrator/tests/test_container_spawner_gaps.py"
]
},
{
"severity": "low",
"component": "gateway",
"description": "3 unused mypy type-ignore comments in gateway/post_agent_commit.py lines 215-220. The PhaseFileRestriction import fallback chain had stale type annotations that mypy flagged as unnecessary.",
"fix": "Removed the 3 unused type-ignore comments.",
"files": [
"gateway/post_agent_commit.py"
]
}
],
"integration_review": {
"data_flow": "Orchestrator collects files_affected union from contract tasks → passes allowed_files to gateway register_session → gateway stores in Session → enforced at push-time via PhaseFileRestriction with warn-then-block escalation → post-agent auto-commit also filters using same logic.",
"components_verified": [
"gateway/gateway.py: _enforce_session_file_restrictions integrates correctly with push validation",
"gateway/session_manager.py: allowed_files persisted, _warned_files transient",
"gateway/post_agent_commit.py: per-task filtering applied after phase filtering (AND semantics)",
"orchestrator/container_spawner.py: _compute_allowed_files with directory-sibling expansion",
"orchestrator/gateway_client.py: allowed_files threaded through HTTP",
"orchestrator/routes/pipelines.py: route accepts and forwards allowed_files",
"docs/templates/plan.md: enforcement semantics documented"
],
"edge_cases_verified": [
"Empty files_affected falls back to no restriction (correct)",
"Glob patterns (*, **) preserved without double-expansion",
"Directory-sibling expansion: dir/file.py adds dir/* for sibling access",
"PhaseFileRestriction import failure: fails open (safe)",
"Warn-then-block: configurable threshold via EGG_TASK_FILE_WARN_THRESHOLD",
"Checkpoint branch push bypass works correctly",
"_warned_files not persisted across gateway restarts (correct transient behavior)"
],
"test_coverage": {
"coder_tests": "16 tests across 3 files (session_manager, session_file_restrictions, post_agent_commit, container_spawner)",
"tester_gap_tests": "39 tests across 3 files covering escalation, path normalization, glob variants, combined filtering, import fallback",
"total_new_tests": 55
}
},
"recommendation": "approve",
"authored_by": "egg"
}
20 changes: 20 additions & 0 deletions .egg-state/checks/912-implement-results.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"all_passed": true,
"checks": [
{
"name": "lint",
"passed": true,
"output": "==> Ruff check...\nAll checks passed!\n==> Ruff format check...\n439 files already formatted\n==> Mypy...\nSuccess: no issues found in 120 source files\n==> Shellcheck...\n==> Yamllint...\nSKIP: yamllint not installed\n==> Hadolint...\nSKIP: hadolint not installed\n==> Actionlint...\nSKIP: actionlint not installed\n==> Custom checks...\n bin-symlinks...\nOK: All 2 bin/ symlinks are valid\n claude-imports...\nWarning: host-services directory not found at /home/egg/repos/egg/host-services\n container-host-boundary...\nOK: No forbidden host-services imports found in sandbox\n container-paths...\nOK: No problematic sys.path patterns found\n docker-and-claude-invocations...\nOK: No docker/claude invocation violations found\n gh-cli-usage...\nWarning: host-services directory not found at /home/egg/repos/egg/host-services\n hardcoded-ports...\nOK: No hardcoded port numbers found\n llm-api-calls...\nOK: No direct LLM API usage found outside sandbox\n model-versions...\nOK: No non-alias Claude model references found\n reviewer-job-names...\nOK: All reviewer jobs use the required naming prefix\n workflow-secrets...\nOK: No untrusted script execution with secrets found in workflows"
},
{
"name": "test",
"passed": true,
"output": "==> Running unit tests...\npytest tests/ gateway/tests/ orchestrator/tests/ -v\n7084 passed, 85 skipped, 4 warnings in 81.85s (0:01:21)"
},
{
"name": "security",
"passed": true,
"output": "==> Running security scan...\nSKIP: bandit not installed"
}
]
}
Loading
Loading