Repository navigation
Closed
Labels
breaking-changeChanges public behaviour or API; needs a minor/major releaseChanges public behaviour or API; needs a minor/major releaseciCI workflows, test suite and toolingCI workflows, test suite and tooling
Milestone
Description
Why
Python 3.10 reached end of life in October 2026. We still declare requires-python = ">=3.10", and dependencies are starting to leave 3.10 behind:
- The filelock security fixes (4.2.1+, Dependabot alerts chore(deps): update astral-sh/setup-uv action to v8.3.2 #45-chore(deps): lock file maintenance #54) need Python 3.11+, so the 3.10 fork of
uv.lockis stuck at filelock 4.1.0. filelock is dev-only (tox, virtualenv), but the alerts can't be closed while 3.10 is in the lock. - zensical 0.1 needs 3.11+, so the
docsgroup carries apython_version >= '3.11'marker (chore(deps): refresh dependencies; zensical 0.1, Node 26 for the Renovate validator #490). uv lockkeeps a separate< 3.11fork for several packages (cachetools, platformdirs, pyproject-api, tox, ...), so 3.10 gets older versions than every other interpreter.
Proposed policy
Drop a Python version in the first minor release after its end-of-life date, with a runtime warning in the release line before it (the same rule as any breaking change). State the policy in the docs so future drops (3.11 in October 2027) follow it without a new discussion.
Plan
0.5.x (warn first)
- On import under Python 3.10, emit a
FutureWarning(visible by default, unlikeDeprecationWarning) saying 0.6.0 requires Python 3.11+. Add a test, and make surefilterwarnings = ["error"]does not break the 3.10 CI job. - Changelog fragment (deprecation).
Done in #493. It ships in the next 0.5.x release, which has to be cut before the first 0.6.0 change below is merged: release.yml releases only from master.
0.6.0 (drop)
-
pyproject.toml:requires-python = ">=3.11", drop the 3.10 classifier, mypypython_version = "3.11", and remove the zensical marker. - Remove the import-time warning (
_warn_python_310infastapi_cachex/__init__.py, itsfilterwarningsentry inpyproject.toml, andtests/test_python_support.py). - CI: drop 3.10 from the
test.ymlmatrix.lowest.ymlandtox -e lowestrun on 3.11 (tox.inienv_list,base_python, gh-actions map). Recheck the lowest dependency floors on 3.11. - Code: let ruff's pyupgrade rules remove 3.10-only shims, such as
typing_extensionsimports that are stdlib in 3.11 andsys.version_infobranches. - Docs, in English and zh-TW:
MIGRATING_FROM_FASTAPI_CACHE2.md,COMPARISON.md,DEVELOPMENT.md(tox section, Zensical note) andCLAUDE.md. - Add
docs/MIGRATING_0_6.mdwith a zh-TW copy and nav entries, containing a "Python 3.11 or later" section. (feat: warn on import under Python 3.10, which 0.6.0 drops #493). In 0.6.0, reword it from "will require" to "requires", but keep the silencing recipes and the#python-311anchor: the 0.5.x warning links toen/stable/MIGRATING_0_6/#python-311, and once 0.6.0 is out,stableserves the 0.6.0 page to everyone still on 0.5.x and Python 3.10. - Write down the support policy above, for example in
SECURITY.mdor the README. - Changelog fragment (removal).
Metadata
Metadata
Assignees
Labels
breaking-changeChanges public behaviour or API; needs a minor/major releaseChanges public behaviour or API; needs a minor/major releaseciCI workflows, test suite and toolingCI workflows, test suite and tooling
Activity
feat: warn on import under Python 3.10, which 0.6.0 drops (#493)
docs: do not name the last 0.5.x release (#491)
feat!: require Python 3.11 (#491)
docs: security policy and project notes for master carrying 0.6.0 (#491)
docs: do not name the last 0.5.x release (#491)
feat!: require Python 3.11 (#491) (#518)