Context
After #939, the CI matrix is:
- test-linux: 3.9 / 3.11 / 3.13
- test-windows: 3.11
- test-macos: 3.11
- lint: 3.11
pyproject.toml declares requires-python = ">=3.9".
Why revisit
As of April 2026:
| Version |
Status |
| 3.9 |
EOL since Oct 2025 |
| 3.10 |
security-only |
| 3.11 |
active until Oct 2027 |
| 3.12 |
active until Oct 2028 |
| 3.13 |
active until Oct 2029 |
3.11 is mid-life. 3.13 is already on the Linux matrix and gives ~3.5 years of upstream support.
Proposed scope
Option A — CI only. Bump Windows and macOS jobs from 3.11 to 3.13. Keep requires-python = ">=3.9". Smallest change; matches the top of the Linux matrix.
Option B — Drop 3.9 floor. Raise requires-python to >=3.11 (or >=3.10). Removes the tomli>=2.0.0; python_version < '3.11' shim in pyproject.toml (3.11+ has tomllib built-in). Drop 3.9 from the Linux matrix. Larger scope, requires a release-note entry; users still on a Python that Python itself no longer supports would need to upgrade.
Notes
- Option A is reversible and low-risk.
- Option B is a one-way door for old users but reduces shim surface.
- Neither blocks the other; A can land first.
Context
After #939, the CI matrix is:
pyproject.tomldeclaresrequires-python = ">=3.9".Why revisit
As of April 2026:
3.11 is mid-life. 3.13 is already on the Linux matrix and gives ~3.5 years of upstream support.
Proposed scope
Option A — CI only. Bump Windows and macOS jobs from 3.11 to 3.13. Keep
requires-python = ">=3.9". Smallest change; matches the top of the Linux matrix.Option B — Drop 3.9 floor. Raise
requires-pythonto>=3.11(or>=3.10). Removes thetomli>=2.0.0; python_version < '3.11'shim inpyproject.toml(3.11+ hastomllibbuilt-in). Drop 3.9 from the Linux matrix. Larger scope, requires a release-note entry; users still on a Python that Python itself no longer supports would need to upgrade.Notes