docs: ADR-028 CI security scanning strategy + frontend pnpm audit job#75
Conversation
- record the decision to adopt two-layer scanning (SCA now, Semgrep SAST deferred) so the scan-OSS/black-box question is not re-litigated - document the previously undocumented backend pip-audit job and the rejected/deferred alternatives (DAST, API fuzzing) with explicit revisit conditions
- mirror the backend pip-audit gate so frontend dependency CVEs fail CI automatically once frontend/package.json exists (ADR-028) - adding the dormant conditional job now removes the need to remember it when frontend development begins
Qodo reviews are paused for this user.Troubleshooting steps vary by plan Learn more → On a Teams plan? Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center? |
There was a problem hiding this comment.
Review Summary
This PR adds comprehensive CI security scanning documentation via ADR-028 and implements a dormant frontend-security CI job. The implementation is technically sound and ready to merge.
Changes Reviewed:
- ✅ New
frontend-securityjob correctly implementspnpm audit --prod --audit-level high - ✅ Job uses proper conditional pattern (
needs.validate.outputs.frontend-exists) - ✅ ADR-028 thoroughly documents security scanning strategy with clear rationale
- ✅ ADR index properly updated
No blocking issues found. The implementation correctly follows the existing CI patterns, uses appropriate security audit flags, and the dormant job will activate automatically when frontend/package.json is created.
You can now have the agent implement changes and create commits directly on your pull request's source branch. Simply comment with /q followed by your request in natural language to ask the agent to make changes.
There was a problem hiding this comment.
Code Review
This pull request introduces ADR-028, which establishes a two-layer CI security scanning strategy using Software Composition Analysis (SCA) for both backend and frontend dependencies, while deferring Static Application Security Testing (SAST) until application code is present. Feedback was provided on the backend SCA documentation to ensure that the uv run command includes the --no-dev flag, preventing development dependencies from being audited.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
|
|
||
| ### 1. SCA — dependency audit (both ends) | ||
|
|
||
| - **Backend**: keep the existing `backend-security` job — `uv run pip-audit --desc --fail-on high` against production dependencies only (`uv sync --no-dev`). |
There was a problem hiding this comment.
In uv, running uv run pip-audit will automatically re-sync the environment and install development dependencies by default, overriding a previous uv sync --no-dev step. To ensure only production dependencies are audited, the --no-dev flag should be passed directly to uv run.
| - **Backend**: keep the existing `backend-security` job — `uv run pip-audit --desc --fail-on high` against production dependencies only (`uv sync --no-dev`). | |
| - **Backend**: keep the existing `backend-security` job — `uv run --no-dev pip-audit --desc --fail-on high` against production dependencies only. |
Summary
pip-auditCI job, and record rejected/deferred alternatives (DAST, API fuzzing) with explicit revisit conditions so the "scan OSS repos / black-box testing" question is not re-litigated.frontend-securityCI job (pnpm audit --prod --audit-level high), mirroringbackend-security; it activates automatically oncefrontend/package.jsonexists.Changed Files
docs/adr/028-ci-security-scanning.mddocs/adr/README.md.github/workflows/ci.ymlfrontend-securityjob (pnpm audit)Test Plan
ci.ymlparses as valid YAML (verified locally via Ruby YAML parser)needs.validate.outputs.frontend-exists) — skipped on this PR sincefrontend/package.jsondoes not existrun:commands (workflow injection check)docs/adr/README.md