Pre-commit hooks, CI, and the dependency update bot were running different versions of ruff, mypy, and pyupgrade. This PR makes uv.lock the single source of truth for Python dev tools.
Route ruff, mypy, and pyupgrade through local pre-commit hooks (uv run …) instead of remote hook repos with separate version pins
Add explicit [tool.ruff] settings (line length, target version, isort rules) and apply the resulting import sort fixes
Raise dev dependency floors in pyproject.toml so uv lock --upgrade can bump tools without editing pins
Extend the dependency update bot to run pre-commit autoupdate (for remote hooks like prettier), smoke-check upgraded tooling, and commit both uv.lock and .pre-commit-config.yaml
Remote hooks (pre-commit-hooks, prettier) remain on pinned revs and are updated by pre-commit autoupdate in the scheduled bot.
Test plan
pre-commit run --all-files passes locally
uv run ruff check ., uv run ruff format --check ., and uv run mypy . pass
Code quality workflow passes on the PR
Confirm dependency update bot steps (uv lock --upgrade, pre-commit autoupdate, smoke check) are valid in workflow YAML
## Summary
Pre-commit hooks, CI, and the dependency update bot were running different versions of ruff, mypy, and pyupgrade. This PR makes `uv.lock` the single source of truth for Python dev tools.
- Route ruff, mypy, and pyupgrade through local pre-commit hooks (`uv run …`) instead of remote hook repos with separate version pins
- Add explicit `[tool.ruff]` settings (line length, target version, isort rules) and apply the resulting import sort fixes
- Raise dev dependency floors in `pyproject.toml` so `uv lock --upgrade` can bump tools without editing pins
- Extend the dependency update bot to run `pre-commit autoupdate` (for remote hooks like prettier), smoke-check upgraded tooling, and commit both `uv.lock` and `.pre-commit-config.yaml`
Remote hooks (`pre-commit-hooks`, `prettier`) remain on pinned revs and are updated by `pre-commit autoupdate` in the scheduled bot.
## Test plan
- [x] `pre-commit run --all-files` passes locally
- [x] `uv run ruff check .`, `uv run ruff format --check .`, and `uv run mypy .` pass
- [x] Code quality workflow passes on the PR
- [x] Confirm dependency update bot steps (`uv lock --upgrade`, `pre-commit autoupdate`, smoke check) are valid in workflow YAML
Route Python hooks through uv run with versions pinned in uv.lock, add explicit
Ruff settings, and extend the dependency bot to run pre-commit autoupdate.
Co-authored-by: Cursor <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Pre-commit hooks, CI, and the dependency update bot were running different versions of ruff, mypy, and pyupgrade. This PR makes
uv.lockthe single source of truth for Python dev tools.uv run …) instead of remote hook repos with separate version pins[tool.ruff]settings (line length, target version, isort rules) and apply the resulting import sort fixespyproject.tomlsouv lock --upgradecan bump tools without editing pinspre-commit autoupdate(for remote hooks like prettier), smoke-check upgraded tooling, and commit bothuv.lockand.pre-commit-config.yamlRemote hooks (
pre-commit-hooks,prettier) remain on pinned revs and are updated bypre-commit autoupdatein the scheduled bot.Test plan
pre-commit run --all-filespasses locallyuv run ruff check .,uv run ruff format --check ., anduv run mypy .passuv lock --upgrade,pre-commit autoupdate, smoke check) are valid in workflow YAMLTest Coverage Report: