Part of #61 (Tier 1).
Problem. Gates (ruff, ruff-format, vulture@80, strict mypy, pytest) run only locally via pre-commit/pre-push. No CI enforcement, coverage tracking, or security scanning.
Goal. GitHub Actions running the same gates on every PR + coverage report + Dependabot + SAST/dependency scan + SBOM + automated, signed releases.
Acceptance. PRs blocked on red gates; coverage published; vulnerable deps flagged; releases reproducible.
Part of #61 (Tier 1).
Problem. Gates (ruff, ruff-format, vulture@80, strict mypy, pytest) run only locally via pre-commit/pre-push. No CI enforcement, coverage tracking, or security scanning.
Goal. GitHub Actions running the same gates on every PR + coverage report + Dependabot + SAST/dependency scan + SBOM + automated, signed releases.
Acceptance. PRs blocked on red gates; coverage published; vulnerable deps flagged; releases reproducible.