ci: resolve the floors wheel-only; fix the 3.13 pydantic floor - #190
Merged
Merged
Conversation
`uv sync --resolution lowest-direct` builds a missing wheel from source, so the `lowest` leg went green on a floor that still fails anywhere without a build toolchain. `--no-build` makes that a resolution error instead. It immediately found one: `pydantic>=2.8` on 3.13 is a wheel-coverage floor that does not cover the wheel. 2.8.0 carries pydantic-core 2.20.0, which ships no cp313 wheel; 2.8.1 carries 2.20.1, which does. The matrix gains 3.12. Its floors resolve to the same versions as 3.11, which is why it was left out, but wheel coverage is per-interpreter and version equality does not imply it.
Benchmark gate✅ gate passed
Gated (fails the build): |
This was referenced Sep 20, 2026
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.
Follow-up to #188.
The gap
uv sync --resolution lowest-directfalls back to building a sourcedistribution when a package has no wheel for the running interpreter. So the
lowestleg answers "do the floors resolve and pass on a machine with acompiler", which is not the question. A user installing into a slim image has
no toolchain, and for them a floor with no wheel is a hard install failure that
CI reports as green.
uv syncspells the fix--no-build("don't build source distributions"). Theleg already passes
--no-install-project, so this constrains dependencies only.What it found
pydantic>=2.8; python_version == '3.13'is a floor that exists for wheelcoverage and does not achieve it. Against main, wheel-only:
Bisected on a verified 3.13.15 interpreter:
So the floor moves to
>=2.8.1, and the comment above it, which asserted 2.8,is corrected to match what the wheels actually show.
The matrix gains 3.12
#188 omitted it on the grounds that its floors resolve to the same versions as
3.11's. That is true and it is not sufficient: wheel coverage is per-interpreter,
so two legs resolving identical versions can still disagree on whether those
versions install. 3.12 passes today, but nothing was checking. The comment
justifying the omission is replaced rather than patched.
Verified
All four legs, wheel-only, with the corrected floor:
The 107 skips are the Postgres tests, which run in CI.
just lint-ciclean.Credit
The failure mode came from a parallel session working on
compose2pod, whichmeasured the same thing for PyYAML:
6.0.1and6.0.2install by compilingthe sdist, so a floor of
>=6.0.1passes CI and still fails in a minimal image,while
6.0.3is the first with a cp314 wheel. Same class of bug, same fix.