Skip to content

chore: move to python 3.14 - #98

Merged
VioletCranberry merged 1 commit into
mainfrom
chore/python-3.14
Jul 30, 2026
Merged

chore: move to python 3.14#98
VioletCranberry merged 1 commit into
mainfrom
chore/python-3.14

Conversation

@VioletCranberry

Copy link
Copy Markdown
Owner

Supersedes #53.

Why not just merge #53

#53 changes .python-version and the Dockerfile only. Merging it as-is splits the project three ways:

  • Docker and local dev on 3.14
  • CI and releases still on 3.13 — both workflows hardcode PYTHON_VERSION: "3.13"
  • Published metadata claiming support only up to 3.13 — the classifier list stops there

It also received no verification at all: .python-version and Dockerfile sit outside the CI path filter, so every job skipped (see #97, which fixes that).

Change

All five moved together:

File Change
.python-version 3.133.14
Dockerfile (both stages) python:3.13-slim-bookwormpython:3.14-slim-bookworm
pyproject.toml add Programming Language :: Python :: 3.14
ci.yaml PYTHON_VERSION3.14
release.yaml PYTHON_VERSION3.14

requires-python already allowed >=3.11, so no constraint changes.

Verification

On Python 3.14.6:

Check Result
uv sync --frozen (exact CI command) resolves cleanly
uv run pytest 3024 passed
uvx ruff@0.15.0 check src/ tests/ All checks passed
uvx ruff@0.15.0 format --check src/ tests/ 248 files already formatted
uv build sdist + wheel built
docker build image builds on python:3.14-slim-bookworm
image smoke test python 3.14.6; entrypoint reports cocosearch 0.1.48; cocosearch.mcp.server imports against the capped mcp 1.26.0

One thing to know

The suite surfaces 14 new DeprecationWarnings for asyncio.iscoroutinefunction, slated for removal in Python 3.16, at src/cocosearch/mcp/server.py:2001 and two test sites. Pre-existing debt that 3.14 makes visible rather than a regression — inspect.iscoroutinefunction is 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-python and the classifiers claim them. That gap predates this PR and widens with it; a version matrix in unit-tests would 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

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>
@VioletCranberry
VioletCranberry merged commit 8fb59bb into main Jul 30, 2026
5 checks passed
@VioletCranberry
VioletCranberry deleted the chore/python-3.14 branch July 30, 2026 20:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant