What
`ruff check src/ tests/` currently reports 66 errors on `main` (46 auto-fixable with `--fix`, 14 more with `--unsafe-fixes`). Mostly unused imports in test files (e.g. `tests/test_uninstall.py`, `tests/test_validate_cross_device.py`).
Why this wasn't caught
`.github/workflows/ci.yml` has no ruff/lint step — `CONTRIBUTING.md` documents `ruff check src/ tests/` as a pre-push convention ("Run before pushing") but nothing enforces it in CI, so it drifted silently.
Found during
External-readiness audit, 2026-07-13 (verified identical error count on `origin/main` before any other changes — this is pure pre-existing debt, unrelated to that audit's docs/packaging fixes).
Acceptance criteria
- Run `ruff check --fix src/ tests/` (safe fixes) and review the remaining `--unsafe-fixes` candidates individually.
- `ruff check src/ tests/` exits 0.
- Optional but recommended: add a ruff step to `ci.yml` so this can't silently re-accumulate.
complexity:low
What
`ruff check src/ tests/` currently reports 66 errors on `main` (46 auto-fixable with `--fix`, 14 more with `--unsafe-fixes`). Mostly unused imports in test files (e.g. `tests/test_uninstall.py`, `tests/test_validate_cross_device.py`).
Why this wasn't caught
`.github/workflows/ci.yml` has no ruff/lint step — `CONTRIBUTING.md` documents `ruff check src/ tests/` as a pre-push convention ("Run before pushing") but nothing enforces it in CI, so it drifted silently.
Found during
External-readiness audit, 2026-07-13 (verified identical error count on `origin/main` before any other changes — this is pure pre-existing debt, unrelated to that audit's docs/packaging fixes).
Acceptance criteria
complexity:low