Support Python 3.14#2871
Merged
adamtheturtle merged 31 commits intomainfrom Apr 26, 2026
Merged
Conversation
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 8.2.3 to 9.1.0. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/master/CHANGES.rst) - [Commits](sphinx-doc/sphinx@v8.2.3...v9.1.0) --- updated-dependencies: - dependency-name: sphinx dependency-version: 9.1.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Use modulo arithmetic to map job index to secrets file index, ensuring that adding Python versions to the matrix doesn't break the secrets file lookup. Each test pattern maps to the same secrets file regardless of Python version. The number of secrets files is determined dynamically from the extracted tarball.
This reverts commit 9a342f4.
Beartype requires imports to be available at runtime, not just under `if TYPE_CHECKING`. See beartype/beartype#594 for when beartype 0.23 will add support for TYPE_CHECKING imports. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Python 3.14's deferred annotation evaluation (PEP 649) causes `_Stringifier.__format__` to raise a TypeError when beartype inspects function signatures at test collection time. This is a workaround until beartype 0.23 is released with full Python 3.14 support. See: - beartype/beartype#594 - beartype/beartype#440 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
# Conflicts: # .github/workflows/test.yml # ci/test_custom_linters.py
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 49b6aa0. Configure here.
# Conflicts: # ci/test_custom_linters.py
….14 full-suite runs
… in ci/test_custom_linters.py
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.

Add Python 3.14 to the test matrix and classifiers.
Note
High Risk
Raises the minimum supported Python to 3.14 and updates CI/docs build matrices accordingly; additionally changes
exceptclauses in runtime code, which could introduce syntax/runtime failures if incorrect.Overview
Updates the project to target Python 3.14: bumps
requires-python, PyPI classifiers, README minimum version, and all GitHub Actions workflows (lint/test/docs publish/coverage) to run on 3.14.Refreshes build/runtime tooling to match (Docker base image to
uvPython 3.14,pyproject-fmtmax Python, and a small dev dependency bump), and adjusts linting/spelling config (adds RuffTC00xignores and new dictionary words).Tweaks exception handling in
healthcheck.pyandtarget_raters.pyby changing multi-exceptionexceptclauses.Reviewed by Cursor Bugbot for commit 9702313. Bugbot is set up for automated code reviews on this repo. Configure here.