Conversation
`pydantic>=2.8.1; python_version == '3.13'` never binds. The `aiohttp>=3.10.5` marker on the same interpreter already rules out aiogram 3.2, whose `aiohttp~=3.9.0` pin is incompatible with it; the lowest aiogram that survives is 3.11.0, and it requires `pydantic>=2.4.1,<2.9`, which resolves to 2.8.2 — above the 2.8.1 the line asks for. Removing it changes no resolution the package's own declarations produce. The aiohttp markers stay: without them the floor resolution lands on aiohttp 3.9.5, which has no cp313 wheel, and the job fails. That one is load-bearing. Verified on all six matrix entries with `uv.lock` deleted before each resolve: the floors sync succeeds wheel-only and the suite passes 27/27. The resolved-newest path is unchanged (`just install && just lint-ci && just test-ci`).
This branch has not been deployed
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 #30. One of the four marked bounds that commit added to
[project.dependencies]does not do anything. Removing it.-"pydantic>=2.8.1; python_version == '3.13'", "pydantic>=2.12; python_version >= '3.14'", "aiohttp>=3.10.5; python_version == '3.13'", "aiohttp>=3.13; python_version >= '3.14'",Why it never binds
The
aiohttp>=3.10.5marker on the same interpreter does the work. aiogram 3.2.0 pinsaiohttp~=3.9.0, which that bound excludes, so the lowest aiogram the resolver can reach on 3.13 is 3.11.0 — and aiogram 3.11.0 declarespydantic>=2.4.1,<2.9. pydantic is not a direct dependency on 3.13 once this line is gone, so it resolves highest-in-range: 2.8.2, already above the 2.8.1 the line asks for.The two bounds are not symmetric, and it is worth being precise about which is carrying the weight. Dropping each in isolation on 3.13:
pydantic>=2.8.1aiohttp>=3.10.5aiohttp==3.9.5 ... marked as `--no-build` but has no binary distributionSo
aiohttp>=3.10.5is load-bearing and stays.pydantic>=2.8.1is downstream of it.Why removing it is worth doing
This package does not import pydantic. A bound on a name you do not import is a claim you have taken on maintaining, and this one buys nothing on any path a user actually takes — a plain
uv pip install 'aiogram>=3.2,<4' 'aiohttp>=3.10.5' modern-dion 3.13 resolves pydantic 2.13.5, six minor versions clear of the floor.The one case it does affect is a user who overrides pydantic themselves, e.g.
pydantic==2.4.1. Without this line that resolution is still refused, by pydantic-core's own wheel coverage:The line changes which package reports that, not whether the install is possible. That is not worth narrowing every 3.13 user's pydantic range for.
Verification
Worktree off
main,uv.lockdeleted before each resolve — a stale lock fromjust installmakesuv syncskip re-resolution and gives a false pass.Floors path,
uv sync --all-extras --no-install-project --resolution lowest-direct --no-buildthenpytest, all six matrix entries:Resolved-newest path unchanged:
just install && just lint-ci && just test-ci— clean, 27 passed, 100% coverage. Local runs are macOS/arm64; CI is the verdict on manylinux coverage.Not changed here
pydantic>=2.12; python_version >= '3.14'is, by the same test, also not load-bearing: dropping it leaves 3.14 and 3.14t resolving aiogram 3.23.0 and pydantic 2.12.5 anyway, again becauseaiohttp>=3.13has already forced aiogram up. It predates #30 and reads as a deliberate belt-and-braces bound on the interpreter with the least wheel history, so it is left alone rather than swept up in a PR about a different line. Happy to remove it in a second pass if you want the symmetry.The comment above the block is edited only to drop the clause describing the removed line.