Skip to content

ci: add vulture dead code detection to pipeline and pre-commit

Overview

Added vulture dead code detection to the CI pipeline and pre-commit hooks. Vulture scans all Python source files and fails the build if any unused code is found at 100% confidence. Also cleaned up old issue/MR templates.

What does this MR do and why?

The codebase had no automated dead code detection. Unused variables, functions, and imports accumulate silently making the code harder to maintain. This MR adds vulture to both the CI lint stage and local pre-commit hooks so dead code is caught early.

Changes Made

File Action Purpose
.gitlab-ci.yml Modify Added dead_code_job in lint stage running vulture at 100% confidence
.pre-commit-config.yaml Modify Fixed vulture hook to scan only app.py, modes/, gitlab_utils/ (not venv)
pyproject.toml Modify Added vulture to dev dependencies, set min_confidence = 100
uv.lock Modify Regenerated with vulture v2.16
modes/compliance_mode.py Modify Renamed unused classification param to _classification
.gitlab/issue_templates/* Delete Removed 5 old generic issue templates
.gitlab/merge_request_templates/* Delete Removed 5 old generic MR templates

Technical Details

  • Vulture runs at --min-confidence 100 — only flags dead code it is absolutely certain about
  • dead_code_job runs in parallel with lint_job (ruff) in the lint stage — adds no extra pipeline time
  • Pre-commit hook uses pass_filenames: false with explicit source paths to avoid scanning venv/ and .venv/
  • [tool.vulture] in pyproject.toml configures vulture for local use outside pre-commit

Type of Change

  • Configuration change
  • Refactor (no functional changes)

Related Issues / References

  • Related to: CI/CD pipeline quality improvements

How to Set Up and Validate Locally

  1. Activate the virtual environment:

    source venv/bin/activate
  2. Run vulture directly:

    vulture app.py modes/ gitlab_utils/ --min-confidence 100
  3. Or run via pre-commit:

    pre-commit run vulture --all-files
  4. Expected: no output, exit code 0

Testing Done

  • Manual testing completed
  • Vulture scan passes locally
  • Pre-commit hooks all pass (pre-commit run --all-files)

Test Cases Covered:

Scenario Expected Result Status
Vulture scan at 100% confidence Exit code 0, no findings pass
Pre-commit vulture hook Scans only source code, passes pass
_classification param fix Not flagged by vulture pass
All pre-commit hooks Ruff, format, vulture, whitespace all pass pass

Code Quality Checklist

Code Standards

  • Code follows project conventions
  • No debug statements left in code
  • No unused imports, variables, or functions
  • Ruff linting passes
  • Ruff formatting passes
  • Vulture dead code check passes

Known Limitations / Technical Debt

  • At 100% confidence, vulture may miss some dead code it's less certain about. Lower to 80 if stricter checks are desired.
  • Old issue/MR templates were removed — new templates should be created when the team agrees on a format.

Merge request reports

Loading