Skip to content

Remove the Django upper bound - #676

Merged
dyve merged 1 commit into
mainfrom
remove-django-upper-bound
Aug 30, 2026
Merged

dyve merged 1 commit into
mainfrom
remove-django-upper-bound

Conversation

@dyve

@dyve dyve commented Aug 28, 2026

Copy link
Copy Markdown
Member

Summary

The <7.0 cap does not do what it looks like it does. It cannot make an install fail on a new Django major, because the resolver is free to backtrack to an older release of the package whose metadata never had a cap.

Verified against real PyPI metadata — asking for a Django the latest release excludes:

$ uv pip compile  ("django-bootstrap4", "django<5.2")
django==5.1.15
django-bootstrap4==26.1     ← not an error. an old release.

On Django 7.0 day, pip install django-bootstrap4 "Django>=7" resolves to 25.3 (django>=4.2, no cap) — old, untested code missing every 26.x fix. That is worse than installing the current release untested, where breakage surfaces in code that can be fixed and shipped the same day.

Capping the current release cannot close a door that already-published metadata left open. The cap buys nothing and costs resolution quality.

The django-version: main job in the CI matrix is the actual early warning: it breaks while the next major is still in development, when there is still time to release.

Documented in MAINTAINING.md so it does not drift back — this split was drift, not intent: three of the five packages never had a cap.

Test plan

  • just lint passes
  • just build passes end to end
  • Wheel metadata now reads Requires-Dist: django>=5.2
  • Verified the resolver behaviour above against live PyPI metadata

Companion PRs

Note

Both this and #675 add a ## Unreleased entry, and #675 also edits MAINTAINING.md. Whichever merges second will need a trivial rebase.

The <7.0 cap does not do what it looks like it does. It cannot make an
install fail on a new Django major, because the resolver is free to
backtrack to an older release of this package whose metadata never had a
cap. Verified against real PyPI metadata: asking for django-bootstrap4
with django<5.2 resolves to django-bootstrap4 26.1 with django 5.1.15,
silently, no error.

On Django 7.0 that means a user asking for Django 7 gets an old release
rather than a clear failure -- old, untested code, missing every fix in
the capped versions. That is worse than installing the current release
untested, where breakage surfaces in code we can fix and ship today.

Capping the current release cannot close a door that already-published
metadata left open, so the cap buys nothing and costs resolution
quality.

The django-version: main job in the CI matrix is the actual early
warning: it breaks while the next major is still in development.

Documents the rule in MAINTAINING.md so it does not drift back. Three of
the five packages never had a cap; this brings the other two in line.
@dyve
dyve force-pushed the remove-django-upper-bound branch from 8e506ec to b2612a6 Compare August 28, 2026 09:46
@dyve
dyve merged commit dcf33bb into main Aug 30, 2026
21 checks passed
@dyve
dyve deleted the remove-django-upper-bound branch August 30, 2026 13:30
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