The setup-python + `pip install semgrep` step errored on the Gitea runner. Switch to `container: docker.io/semgrep/semgrep` (semgrep preinstalled) — the documented way to run Semgrep in CI, and the exact execution verified locally (306 rules / 450 files, 27 findings, exit 0). Fully-qualified image name so short-name resolution works under Docker or podman. Still report-only (no --error); WP-30 tracks flipping to blocking. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>