Skip to content

ci: resolve the declared dependency floors on every matrix entry - #28

Merged
lesnik512 merged 1 commit into
mainfrom
ci/floors-gate
Sep 21, 2026
Merged

lesnik512 merged 1 commit into
mainfrom
ci/floors-gate

Conversation

@lesnik512

Copy link
Copy Markdown
Member

Adds the floors job the org standard requires (standard.md §7), following modern-di-fastapi#56, and fixes the celery floor it caught.

What the job found

celery>=5 resolves to celery 5.0.0, which fails two tests on every interpreter from 3.11 up. celery caps billiard<4.0 until 5.3, and billiard 3's einfo._Code stand-in has no co_positions, which traceback has needed since 3.11:

File ".../python3.11/traceback.py", line 420, in _get_code_position
    positions_gen = code.co_positions()
AttributeError: '_Code' object has no attribute 'co_positions'

Any user logging a task exception on 3.11+ at the declared floor hits this. Bisected on 3.11 and on 3.14: 5.1.0 and 5.2.0 fail, 5.3.0 is the first that passes. 3.10 is fine at 5.0.0, so the floor splits rather than rises:

"celery>=5,<6; python_version < '3.11'",
"celery>=5.3,<6; python_version >= '3.11'",

The pytest matrix never saw this because it resolves newest.

Why the job exists

pytest resolves every dependency at its newest, so the bottom of each declared range ships unexercised. This job resolves direct dependencies at their floors, wheel-only, on every entry of the same matrix pytest uses, and runs the suite against them.

--no-build: a floor reachable only by compiling an sdist is not a floor a user installing a wheel can reach. --no-install-project is mandatory alongside it — --no-build would otherwise refuse to build this project too, and the tests import it from the checkout.

The dev-group floors

uv sync --resolution lowest-direct treats an unbounded name in [dependency-groups] as "any version" and resolves it to that project's first-ever release. The floors added there are lower bounds on the test harness only, and neither name constrains celery, so the declared floor is what the job installs. The resolved-newest path is unchanged.

Verification

Run locally on all six interpreters at the floors: celery==5.0.0 on 3.10, celery==5.3.0 on the rest, 24 passed on each. Resolved-newest path re-checked with just install && just lint-ci && just test-ci. Local runs are macOS/arm64; CI is the verdict on manylinux wheel coverage.

@lesnik512
lesnik512 merged commit 961904e into main Sep 21, 2026
14 checks passed
@lesnik512
lesnik512 deleted the ci/floors-gate branch September 21, 2026 17:54
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