237fd62e-90a1-483c-a40a-d62e6e6dcf24
Ran for 1m 25s (finished about 2 months ago)
State
Statussucceeded
Current statesuccess
Trace ided73665c9ba34a9ebf47653ad4b98f51
Error—
Agent timeline
- post-comment1 attempt
- review1 attempt
- status-failure-review1 attempt
- status-pending-review1 attempt
Event trace (0)
No events yet.
Scratchpad
Expand JSON
{
"repo": "Levanto/Levanto-Aion",
"review": {
"summary": "This PR fixes a real set of CI-pipeline correctness bugs (changed-files scoping, mypy hyphenated-dir crash, writable cache dirs, state-name rename, webhook changed_files population) and adds genuine prompt-injection framing to the review-agent. However, two major issues block approval: the injection defense is bypassable via unescaped closing-marker injection in PR content, and the build-agent reports passed=True when its host-repo env var is unset, turning the build gate into a false green. Confidence is high — findings are confirmed against the actual source files, not just the PR description.",
"verdict": "changes_requested",
"findings": [
{
"file": "agents/review-agent/agent.py",
"lens": "security",
"line": 108,
"finding": "The new prompt-injection defense inlines attacker-controlled pr_title, pr_body, and diff hunks between <UNTRUSTED-PR-DATA> markers without escaping or neutralizing literal occurrences of the closing marker, so a PR containing '</UNTRUSTED-PR-DATA>' followed by injected instructions can break out of the data region the system prompt protects and flip the merge-gating verdict.",
"severity": "major"
},
{
"file": "agents/build-agent/agent.py",
"lens": "operational",
"line": 110,
"finding": "When BUILD_AGENT_HOST_REPO is unset (the documented default), the agent returns BuildReport(passed=True), so the aion/build merge gate reports green without building any image — a false-positive gate that lets broken Dockerfiles pass CI; a skipped/neutral status would be safer than passed=True.",
"severity": "major"
},
{
"file": "apps/worker-runtime/Dockerfile",
"lens": "security",
"line": 60,
"finding": "The pinned docker CLI tarball is piped from download.docker.com straight into tar with no SHA256 checksum or signature verification, so the build trusts transport security alone for a binary placed on PATH inside the privileged worker image.",
"severity": "minor"
},
{
"file": "apps/orchestrator-api/app/api/routes/webhooks.py",
"lens": "operational",
"line": 128,
"finding": "Push-event changed_files is derived from payload commits[*].{added,modified,removed}, but GitHub truncates/omits commits for large pushes (>20 commits / >2000 files), so CI can be scoped to an incomplete file set and silently skip linting files that actually changed.",
"severity": "minor"
},
{
"file": "agents/ci-quality-agent/agent.py",
"lens": "operational",
"line": 105,
"finding": "Whole-repo mode (empty changed_files, e.g. manual workflow submissions) skips mypy entirely and reports it as passed, so type checking is silently dropped for an entire class of runs rather than degraded with a clear non-passing signal.",
"severity": "minor"
}
]
},
"base_ref": "main",
"head_sha": "6b2916da82cb96abfa775216fa80c0c5db50c022",
"pr_number": 16,
"post-comment": {
"posted": {
"posted": true,
"pr_number": 16,
"body_chars": 2790,
"comment_id": 4529899127
}
},
"changed_files": [
"agents/build-agent/agent.py",
"agents/ci-quality-agent/agent.py",
"agents/ci-quality-agent/tests/test_agent.py",
"agents/review-agent/agent.py",
"agents/review-agent/prompts/system.md",
"apps/orchestrator-api/app/api/routes/webhooks.py",
"apps/worker-runtime/Dockerfile",
"docs/MODEL_ROUTING.md",
"docs/QUICKSTART.md",
"docs/README.md",
"infra/scripts/sync-claude-credentials.sh",
"pyproject.toml",
"workflows/ci-pipeline/workflow.py"
],
"dashboard_url": "http://aion.levanto.in/runs/237fd62e-90a1-483c-a40a-d62e6e6dcf24",
"status-failure-review": {
"posted": {
"sha": "6b2916da82cb96abfa775216fa80c0c5db50c022",
"state": "failure",
"posted": true,
"context": "aion/review",
"target_url": "http://aion.levanto.in/runs/237fd62e-90a1-483c-a40a-d62e6e6dcf24"
}
},
"status-pending-review": {
"posted": {
"sha": "6b2916da82cb96abfa775216fa80c0c5db50c022",
"state": "pending",
"posted": true,
"context": "aion/review",
"target_url": "http://aion.levanto.in/runs/237fd62e-90a1-483c-a40a-d62e6e6dcf24"
}
}
}