Summary
Raise requires-python from >=3.9 to >=3.10 and remove all python_version < '3.10' conditional dependencies and version-pinning workarounds.
Motivation
Python 3.9 reached end-of-life on 2025-10-31 (EOL ~5 years after release). It no longer receives security fixes. The major supported runtimes (3.10+) all remain active, with 3.14 out since 2025-10.
Supporting 3.9 currently imposes concrete maintenance tax on this repo:
- 6 dependency entries in
pyproject.toml are duplicated under python_version < '3.10' / >= '3.10' markers (aiohttp, pytest, sqlfluff, typing-extensions, tombi, setuptools).
typing-extensions is pulled in solely to backport ParamSpec / TypeAlias / PEP 604 union syntax to 3.9.
- CI must keep a 3.9 job alive, and every new language feature decision has to gate on "does 3.9 support this?".
Dropping 3.9 lets us:
- Collapse the duplicated dependency lines into single constraints.
- Remove the
typing_extensions backport dependency entirely.
- Adopt 3.10+ syntax natively:
X | Y unions, match statements, ParamSpec from typing, TypeAlias, parenthesized context managers, better error messages.
Summary
Raise requires-python from >=3.9 to >=3.10 and remove all python_version < '3.10' conditional dependencies and version-pinning workarounds.
Motivation
Python 3.9 reached end-of-life on 2025-10-31 (EOL ~5 years after release). It no longer receives security fixes. The major supported runtimes (3.10+) all remain active, with 3.14 out since 2025-10.
Supporting 3.9 currently imposes concrete maintenance tax on this repo:
pyproject.tomlare duplicated underpython_version < '3.10' / >= '3.10'markers (aiohttp,pytest,sqlfluff,typing-extensions,tombi,setuptools).typing-extensionsis pulled in solely to backportParamSpec/TypeAlias/ PEP 604 union syntax to 3.9.Dropping 3.9 lets us:
typing_extensionsbackport dependency entirely.X | Yunions, match statements,ParamSpecfrom typing,TypeAlias, parenthesized context managers, better error messages.