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_jobruns in parallel withlint_job(ruff) in the lint stage — adds no extra pipeline time - Pre-commit hook uses
pass_filenames: falsewith explicit source paths to avoid scanningvenv/and.venv/ -
[tool.vulture]inpyproject.tomlconfigures 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
-
Activate the virtual environment:
source venv/bin/activate -
Run vulture directly:
vulture app.py modes/ gitlab_utils/ --min-confidence 100 -
Or run via pre-commit:
pre-commit run vulture --all-files -
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.