fix: declare a PyYAML floor that installs on Python 3.14 - #129
Merged
Merged
Conversation
`PyYAML>=6` resolves to 6.0 at the bottom of the range, and 6.0 ships no cp314 wheel: on 3.14 the resolver falls through to the sdist, whose build fails. 6.0.3 is the first release with a cp314 wheel, so the floor is marked per interpreter rather than raised for everyone. A `floors` job installs the declared floors binary-only on the oldest and newest supported interpreters. Every other job resolves highest, which is why nothing reported this. Closes #126
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.
Closes #126.
Reproduced, then measured rather than guessed
The issue's repro fails exactly as described —
PyYAML>=6resolves to 6.0, which has no cp314 wheel, so uv falls through to the sdist:The issue says to find the fixed version by installing candidates rather than guessing, and that turned out to matter — the obvious answer is wrong. On 3.14:
--only-binary6.0.1 and 6.0.2 install on this machine, so a floor of
>=6.0.1would look green here and in CI. They install by compiling the sdist, and only because a toolchain happens to be present. The README's pitch is "installs and runs in minimal Python images", where it is not. 6.0.3 is the first release with a cp314 wheel (confirmed against the PyPI index:cp310, cp311, cp312, cp313, cp314, cp38, cp39), and that is the floor a user of such an image can actually install.The fix
Marked per interpreter, as the issue proposes, rather than raised for everyone — 6.0 works fine below 3.14 and an older interpreter has no reason to lose the lower floor:
Verified both ends, binary-only, with
--resolution lowest-direct:The gate, because "nothing reports it" is the actual bug
The floor was unsatisfiable for as long as 3.14 has been supported and no gate noticed, because every job here resolves highest. A one-instance fix leaves that intact, so this adds a
floorsjob:uv pip install --resolution lowest-direct --only-binary PyYAML ".[yaml]"on the oldest and newest supported interpreters, then an import.--only-binaryis the load-bearing part. Without it this job would have gone green on a>=6.0.1floor that no minimal image can install — the table above is what that flag buys.3.14t is deliberately out of the matrix. No PyYAML release ships a
cp314twheel, so a binary-only floor check there would fail on upstream's gap rather than on this repo's floor. Free-threaded users build PyYAML from source today regardless of what this project declares; that is unchanged by this PR and not something it can fix.This is beyond the issue's literal ask, which was the marker alone. Flagging it explicitly: if you would rather ship the two-line fix and track the gate separately, say so and I will split it.
Verification
just lint,just test-ci: green, 100% line coverage held.