diff --git a/.github/workflows/_checks.yml b/.github/workflows/_checks.yml index d1b5853..5726aa1 100644 --- a/.github/workflows/_checks.yml +++ b/.github/workflows/_checks.yml @@ -37,6 +37,8 @@ jobs: - "3.13" - "3.14" - "3.14t" + - "3.15" + - "3.15t" steps: - uses: actions/checkout@v6 - uses: extractions/setup-just@v4 @@ -48,7 +50,7 @@ jobs: - run: uv python pin ${{ matrix.python-version }} - run: just install - name: Confirm the interpreter is free-threaded - if: matrix.python-version == '3.14t' + if: endsWith(matrix.python-version, 't') run: uv run --no-sync python -c "import sys; assert not sys._is_gil_enabled(), 'GIL is enabled'" - run: just test-ci floors: diff --git a/AGENTS.md b/AGENTS.md index 611586e..09e9e9c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -65,7 +65,7 @@ Transport mocking is `httpx2.MockTransport` passed as `transport=`, never `respx targets `httpx` rather than `httpx2` and patches its internals. Concurrency-sensitive components carry Hypothesis property tests in `test_*_props.py`, and `stress`-marked tests drive real thread parallelism: they run under the GIL for coverage, but the proof comes from the free-threaded -`3.14t` CI job. +`3.14t` and `3.15t` CI jobs. ## Workflow diff --git a/pyproject.toml b/pyproject.toml index 48d641a..ac22ed7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,6 +25,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Programming Language :: Python :: Free Threading :: 2 - Beta", "Typing :: Typed", "Topic :: Software Development :: Libraries",