feat(atlas-action): add Atlas Action Service (FastAPI control plane, runner, policy gate, docs)#433
feat(atlas-action): add Atlas Action Service (FastAPI control plane, runner, policy gate, docs)#433
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 31c73efb06
ℹ️ 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".
| def run_step(self, job_spec: AtlasJobSpec, repo_dir: Path, command: str, env: Dict[str, str]): | ||
| network_flag = "none" if job_spec.execution_domain in {"read", "code"} else "bridge" | ||
| docker_cmd = [ |
There was a problem hiding this comment.
Enforce egress based on capabilities, not execution_domain
The runner decides network access solely from execution_domain (read/code => --network none, else bridge), but the policy gate only checks job.capabilities.network_egress for allowlisting (see atlas_action_service/atlas_actiond/policy/guards.py lines 35–37). This mismatch lets a job request execution_domain="network" while keeping capabilities.network_egress=false, which bypasses the allowlist guard and still runs with network access. In any environment where job specs can be supplied by external adapters or users, this is an easy privilege escalation path for egress.
Useful? React with 👍 / 👎.
Motivation
AtlasJobSpecto standardize job definitions and enable adapters from existing workflow formats.Description
POST /webhooks/github,GET /jobs/{job_id}, andGET /healthzendpoints underatlas_action_service/atlas_actiondand a top-levelDockerfileanddocker-compose.ymlfor local runs.AtlasJobSpecPydantic models and a JSON Schema atatlas_action_service/docs/atlas_job_spec.schema.jsonto canonicalize job payloads.PolicyGateand guard implementations (egress_allowlist,write_contract, etc.) inatlas_action_service/atlas_actiond/policyto evaluate job capabilities before enqueueing.JobQueue, an audit logger that records hash-chained entries, artifact helpers, arunnerthat consumes Redis Streams and executes steps in isolated Docker containers, and convenience scripts and sample config underatlas_action_service/.Testing
Codex Task