Skip to content

ci: cover 3.14t in the floors leg - #64

Merged
lesnik512 merged 1 commit into
mainfrom
ci/floors-3.14t
Sep 23, 2026
Merged

lesnik512 merged 1 commit into
mainfrom
ci/floors-3.14t

Conversation

@lesnik512

Copy link
Copy Markdown
Member

Follow-up to #63, which landed the floors job. One line: the leg's matrix gains 3.14t.

Why

standard.md §7 asks for the floors job on every entry of the same matrix pytest uses, and that is not incidental wording — the section spells out the reason:

wheel coverage is per interpreter, so two interpreters that resolve the same versions can still disagree on whether those versions install

pytest here runs six entries; the floors leg runs five. The one it omits is 3.14t, which is the entry most likely to be the odd one out: a free-threaded build is where a floor's cp314t wheel can be missing while cp314 is fine and every other entry stays green. Covering five of six leaves that gap open silently — the leg passes and says nothing.

Verification

In a clean worktree off main, uv.lock deleted before each resolve (a stale lock makes uv sync skip re-resolution and gives a false pass):

uv python pin 3.14t
uv sync --all-extras --no-install-project --resolution lowest-direct --no-build
uv run --no-sync pytest .

Resolves wheel-only and 20 passed, on a genuinely free-threaded interpreter (sys._is_gil_enabled() is False). Same for 3.13 and 3.14. So this entry is green today; it is added to keep it that way. Local runs are macOS/arm64 — CI is the verdict on manylinux coverage.

What this deliberately leaves alone

The job is named lowest; §7's job table names it floors. That is a rename across the org, not this repo's to decide unilaterally, and it is being tracked separately — left out here so this stays a one-line change.

On #62

Closing #62 in favour of this. Its diff also bounded pydantic in [project.dependencies], and that was wrong: the failure it was reacting to came from the lint group's unbounded typing-extensions, not from the shipped floor. uv runs one resolution across every group, so a low typing-extensions holds pydantic back to a build whose pydantic-core has no wheel for the interpreter under test. #63 fixed it at the right layer, in the group where the unbounded name actually lives.

Checked directly — a clean 3.13, 3.14 and 3.14t venv each:

uv pip install --no-build --resolution lowest-direct 'faststream>=0.7,<0.8' 'modern-di>=3,<4'

installs on all three, resolving faststream==0.7.0 with pydantic==2.13.5. The shipped floor was never the problem, and #62 would have constrained every user's pydantic to buy a CI-only artifact.

`pytest` runs six matrix entries; the floors leg runs five. 3.14t is the one
it omits, and wheel coverage is per-interpreter — a free-threaded build is
exactly where a floor's wheel can be missing while every other entry is green,
which is what §7's "every matrix entry" is for.

Verified locally: the floors resolution and the suite both pass on 3.14t
against the current declarations.
@lesnik512
lesnik512 merged commit 50819d3 into main Sep 23, 2026
14 checks passed
@lesnik512
lesnik512 deleted the ci/floors-3.14t branch September 23, 2026 22:22
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