chore: move to python 3.14 - #98
Merged
Merged
Conversation
Supersedes #53, which bumped .python-version and the Dockerfile alone and so would have split the project three ways: Docker and local dev on 3.14, CI and releases still on 3.13 via the hardcoded PYTHON_VERSION, and published metadata claiming support only up to 3.13. Moves all five together: .python-version 3.13 -> 3.14 Dockerfile (both stages) python:3.13-slim -> python:3.14-slim pyproject.toml add the 3.14 classifier ci.yaml, release.yaml PYTHON_VERSION 3.13 -> 3.14 requires-python already allowed >=3.11, so no constraint changes. Verified on 3.14.6: uv sync --frozen resolves, 3024 tests pass, ruff clean, uv build produces sdist and wheel, and the Docker image builds and runs (entrypoint reports 0.1.48, the MCP server module imports against the capped mcp 1.26.0). #53 itself was never verified — .python-version and Dockerfile sit outside the CI path filter, so every job skipped. Tests surface 14 new DeprecationWarnings for asyncio.iscoroutinefunction, removed in 3.16. Pre-existing debt that 3.14 makes visible, not a regression; inspect.iscoroutinefunction is the replacement. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
Supersedes #53.
Why not just merge #53
#53 changes
.python-versionand theDockerfileonly. Merging it as-is splits the project three ways:PYTHON_VERSION: "3.13"It also received no verification at all:
.python-versionandDockerfilesit outside the CI path filter, so every job skipped (see #97, which fixes that).Change
All five moved together:
.python-version3.13→3.14Dockerfile(both stages)python:3.13-slim-bookworm→python:3.14-slim-bookwormpyproject.tomlProgramming Language :: Python :: 3.14ci.yamlPYTHON_VERSION→3.14release.yamlPYTHON_VERSION→3.14requires-pythonalready allowed>=3.11, so no constraint changes.Verification
On Python 3.14.6:
uv sync --frozen(exact CI command)uv run pytestuvx ruff@0.15.0 check src/ tests/uvx ruff@0.15.0 format --check src/ tests/uv builddocker buildpython:3.14-slim-bookwormpython 3.14.6; entrypoint reportscocosearch 0.1.48;cocosearch.mcp.serverimports against the cappedmcp 1.26.0One thing to know
The suite surfaces 14 new
DeprecationWarnings forasyncio.iscoroutinefunction, slated for removal in Python 3.16, atsrc/cocosearch/mcp/server.py:2001and two test sites. Pre-existing debt that 3.14 makes visible rather than a regression —inspect.iscoroutinefunctionis the drop-in replacement. Not blocking, worth a follow-up before 3.16.Follow-up worth considering
CI tests exactly one interpreter, so moving the pin to 3.14 leaves 3.11–3.13 untested while
requires-pythonand the classifiers claim them. That gap predates this PR and widens with it; a version matrix inunit-testswould close it properly.Note on ordering
Touches
.github/workflows/ci.yaml, as does #97. Different regions of the file, so they merge cleanly in either order — whichever lands second may want a trivial rebase.🤖 Generated with Claude Code