Skip to main content

Security Scanning

The checked-in CI configuration actively scans secrets. Dependency updates are managed by Dependabot. No image vulnerability scanner, dependency vulnerability scanner, or SAST job is defined in the repository workflows or justfile; this page does not claim coverage that CI does not provide.

See Three-Plane CI Setup for runner placement and the CircleCI nightly schedule.

Coverage matrix​

AreaConfigurationCurrent behaviorGate and evidence
Secret scanning.github/workflows/security.yml and .gitleaks.tomlGitleaks v8.30.1 scans the full Git history on pushes to main and pull requests targeting main. The repository allowlist is limited to verified placeholders in docs/examples and named test fixtures.Blocking. A non-zero Gitleaks exit code fails the job; inspect the redacted output in the GitHub Actions log.
Dependency vulnerability review.github/dependabot.ymlDependabot checks the root Python dependencies, frontend npm dependencies, and GitHub Actions weekly. It groups minor and patch updates for the Python and frontend ecosystems.Review the update pull requests. No pip-audit job or recipe is defined in the checked-in workflows or justfile.
Image scanningNo checked-in workflow or justfile recipeTrivy image scanning and runtime smoke checks were removed. The heavy-plane Blacksmith runner and image-security job no longer exist.No image vulnerability result is produced by the repository CI configuration. Treat image scanning as an explicit coverage gap.
SASTNo checked-in workflow or justfile recipeSemgrep, CodeQL analysis, and another source-code analysis job are not configured here.No SAST result is produced by the repository CI configuration. Treat SAST as an explicit coverage gap rather than assuming the secret scan replaces it.

The CircleCI commercial-license audit job checks license policy, not dependency vulnerabilities or source-code security. just check runs the product version check, Ruff format check, lint, and typecheck; it does not run a security scanner.

Gitleaks behavior​

.github/workflows/security.yml checks out the repository with fetch-depth: 0 and runs the open-source Gitleaks CLI in Docker:

docker run --rm -v "$PWD:/repo" ghcr.io/gitleaks/gitleaks:v8.30.1 \
git /repo --config /repo/.gitleaks.toml --redact --verbose --exit-code 1

.gitleaks.toml extends the default rules. Its allowlist is deliberately narrow: it covers known placeholder credentials in named documentation/example paths and specific placeholder strings. Do not turn it into a blanket exclusion for tests, source, or an entire directory. A finding fails the blocking job and remains visible in the GitHub Actions log.

Local checks​

Run the repository's quality and lockfile checks separately from the security job:

just version-check
uv lock --check
uv sync --frozen --all-extras --dev
just check

To exercise the same Gitleaks command locally, run it from the repository root with the checked-in .gitleaks.toml shown above.

The checked-in justfile has no local pip-audit, Semgrep, or Trivy recipe. GitHub Actions remains the authoritative source for the configured Gitleaks scan; Dependabot update pull requests are the dependency-review evidence.