Repository navigation
fix!: Support Python 3.10 through 3.14 - #119
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by @drafty
🔴 Review tier: HIGH — human review required
.github/workflows/ci.yml; branch/PR workflows execute on the canonical repository. Matrix is exactly Python 3.10–3.14.major_version_zero = truekeeps breaking changes on 0.x until someone deliberately cuts 1.0. The current breaking subject previews 0.15.0 (MINOR).What / why
requires-python = ">=3.10"; classifiers, README badge and CI explicitly cover 3.10, 3.11, 3.12, 3.13 and 3.14 only. No 3.15 job or classifier.py310and mypy3.10. Replace obsolete typing backports with standard-library Annotated, TypeAlias, TypeGuard, TypeVar and TypedDict; no sweeping syntax modernization and no version guards were present.uv lock, thenuv lock --upgrade-package orjson --upgrade-package pydantic --upgrade-package coverage. Original orjson 3.10.15 lacked a Python 3.14 wheel and its source build failed (missing C linker); old pydantic-core also needed a source build. Updated lock uses orjson 3.13.0, Pydantic 2.14.2/core 2.50.2, typing-extensions 4.16.0 and typing-inspection 0.4.4. Coverage resolves to 7.16.2 on Python 3.10 and 7.17.0 on newer versions. Unsupported-old-Python lock forks were removed. Published runtime metadata now uses Python-conditional minimums: Python >=3.14 requires orjson>=3.11.3 and pydantic[email]>=2.12; Python 3.10–3.13 retains orjson>=3.9.10 and pydantic[email]>=2.10.4. orjson 3.11.3 publishes CPython 3.14 wheels. The follow-up lock regeneration changes dependency markers only, not resolved package versions.Release note
Python 3.8 and 3.9 are no longer supported. Upgrade to Python 3.10 or newer before upgrading this SDK. Python 3.13 and 3.14 now receive CI coverage. Recommend a minor version bump because this breaks installation compatibility for older Python users.
How tested
python -m coverage run -m pytest -q: 183 passed on each version (915 total).ruff check asknews_sdk,ruff check .,git diff --check: passed.uv build --wheel: passed; wheel Requires-Python and exact classifiers validated.Python 3.10 follow-up
No current locked runtime dependency requires Python >=3.11, and the full locked runtime/test environment succeeds on 3.10. Native dependencies orjson, pydantic-core and cffi now require >=3.10. Coverage 7.17.0 requires >=3.11, but it is development-only and the lock correctly selects 7.16.2 on 3.10. A future 3.10 removal should be mechanically straightforward (metadata/classifier/matrix/tool targets/README plus regenerated lock and full tests), but is a separate breaking support-policy change; it is not included here.
Risk / rollback
Human review required for CI and the release boundary. Published consumers resolve dependency ranges rather than this lock; Python 3.14 now has compatible declared minimums, while older supported Python bounds remain unchanged. Breaking changes remain minor 0.x releases until a deliberate 1.0 release; this changes future release behavior. Revert before merge to undo; after publication a corrective release is required. No release workflows, credentials, endpoint contracts or production systems were modified.
Review-blocker validation
uv pip install .installations on Python 3.14 and 3.10 succeeded.--resolution lowest-directselected orjson 3.11.3 and Pydantic 2.12.0.git diff --check, wheel build and installed Requires-Dist marker inspection passed.cz bump --dry-run:uvversion provider; the successful preview used current Commitizen in isolation. No version, changelog or tag was changed.