chore: harmonize Python version at 3.13

The declared floor, the local pin, the lockfile, the image, and CI had all
drifted apart: pyproject said >=3.10, .python-version said 3.11, uv.lock
resolved >=3.11, the Dockerfile ships 3.13, and unified-tests hardcoded 3.12.

Set the server's floor to 3.13 to match the only interpreter that actually
ships, and pin CI to the same version. Three workflows passed
python-version-file: pyproject.toml, which makes setup-python read
requires-python as a range and install the newest match -- run 33108027458
resolved to CPython 3.14.7, so CI tested a Python nobody deploys and the 3.10
floor was never exercised. Pointing them at .python-version installs an exact
version instead.

That promotion makes .python-version load-bearing for CI, so add it to the
path filters in unittest.yml and live-llm-tests.yml. Those keyed on
pyproject.toml for the interpreter before; without this, editing the pin alone
would change which Python CI runs on without retriggering the suites that run
on it. unified-tests.yml is left alone -- it filters on src/** and tests/**
and never keyed on pyproject.toml either.

Re-resolving the lockfile drops async-timeout, tomli, and overrides, which
were backport shims only needed below 3.13.

sdks/python (honcho-ai, >=3.8) and honcho-cli (>=3.11) are left alone; they
publish to PyPI, so those floors are consumer-facing.

Ruff's inferred target-version moves py310 -> py313, which surfaces ~200 new
findings tree-wide (mostly UP017, datetime.timezone.utc -> datetime.UTC).
Ruff runs only via pre-commit, not in any workflow, so CI is unaffected; the
sweep is left for a follow-up rather than adding unrelated churn here.

Fixes DEV-2415

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Eugene Eisenstein 2026-08-27 16:43:23 -04:00
parent 4acd78d45f
commit 83fc0d4260
7 changed files with 14 additions and 879 deletions

View File

@ -12,6 +12,7 @@ on:
- 'tests/live_llm/**'
- 'pyproject.toml'
- 'uv.lock'
- '.python-version'
- '.github/workflows/live-llm-tests.yml'
# Manual trigger for PRs: add the `run-live-llm` label to run the suite
# against the PR's merge commit. The label is purged as soon as the run
@ -111,7 +112,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version-file: "pyproject.toml"
python-version-file: ".python-version"
- name: Install the project
run: uv sync --all-extras

View File

@ -16,7 +16,7 @@ jobs:
- name: "Set up Python"
uses: actions/setup-python@v5
with:
python-version-file: "pyproject.toml"
python-version-file: ".python-version"
- name: Install uv
uses: astral-sh/setup-uv@v2
with:

View File

@ -151,8 +151,8 @@ jobs:
- name: Verify uv and Python
run: |
uv --version
python3.12 --version
which python3.12
python3.13 --version
which python3.13
- name: Install the project
run: uv sync --all-extras

View File

@ -11,6 +11,7 @@ on:
- '**.jsx'
- 'pyproject.toml'
- 'uv.lock'
- '.python-version'
- 'sdks/typescript/package.json'
- 'sdks/typescript/bun.lock'
- '.github/workflows/unittest.yml'
@ -24,6 +25,7 @@ on:
- '**.jsx'
- 'pyproject.toml'
- 'uv.lock'
- '.python-version'
- 'sdks/typescript/package.json'
- 'sdks/typescript/bun.lock'
- '.github/workflows/unittest.yml'
@ -48,6 +50,7 @@ jobs:
- '**.py'
- 'pyproject.toml'
- 'uv.lock'
- '.python-version'
- 'migrations/**'
- 'sdks/typescript/**'
- '.github/workflows/unittest.yml'
@ -85,7 +88,7 @@ jobs:
- name: "Set up Python"
uses: actions/setup-python@v5
with:
python-version-file: "pyproject.toml"
python-version-file: ".python-version"
- name: Install bun
uses: oven-sh/setup-bun@v2

View File

@ -1 +1 @@
3.11
3.13

View File

@ -6,7 +6,7 @@ authors = [
{name = "Plastic Labs", email = "hello@plasticlabs.ai"},
]
readme = "README.md"
requires-python = ">=3.10"
requires-python = ">=3.13"
dependencies = [
"fastapi[standard-no-fastapi-cloud-cli]>=0.131.0",
"python-dotenv>=1.0.0",

875
uv.lock

File diff suppressed because it is too large Load Diff