Summary
tools/security-tracker-stats-dashboard/pyproject.toml declares three different
Python version floors across its own settings.
Background
requires-python and ruff say 3.9, mypy says 3.10. mypy therefore type-checks
against a version the package claims to support running below, so a 3.10-only
construct type-checks clean and fails at import on 3.9. The >=3.9 floor also
means PEP 604 X | Y unions must stay in annotations guarded by
from __future__ import annotations, never in runtime positions.
Where to look
pyproject.toml line 27 (requires-python = ">=3.9"), line 36 (ruff
target-version = "py39"), line 44 ([tool.mypy] python_version = "3.10").
- Sibling
tools/*/pyproject.toml show what floor the rest of the repo settles on.
Acceptance criteria
Estimated effort
~1 hour for someone new to the codebase, plus a look for runtime unions.
Summary
tools/security-tracker-stats-dashboard/pyproject.tomldeclares three differentPython version floors across its own settings.
Background
requires-pythonand ruff say 3.9, mypy says 3.10. mypy therefore type-checksagainst a version the package claims to support running below, so a 3.10-only
construct type-checks clean and fails at import on 3.9. The
>=3.9floor alsomeans PEP 604
X | Yunions must stay in annotations guarded byfrom __future__ import annotations, never in runtime positions.Where to look
pyproject.tomlline 27 (requires-python = ">=3.9"), line 36 (rufftarget-version = "py39"), line 44 ([tool.mypy] python_version = "3.10").tools/*/pyproject.tomlshow what floor the rest of the repo settles on.Acceptance criteria
uv run --directory tools/security-tracker-stats-dashboard --group dev pytestpasses.Estimated effort
~1 hour for someone new to the codebase, plus a look for runtime unions.