Repository navigation
Sync the release preflight from django-marina - #896
Merged
Merged
Conversation
Propagation of zostera/django-marina#694, where the reasoning lives. just release-check listed only commits touching src/, then closed with "Every commit above must be covered by an entry", which reads as a complete list and is not one. Anything tooling-only was invisible to it. It now prints a second group for commits touching nothing in src/, under a heading that says to read them rather than a rule, because no rule fits: a Dependabot bump of a dev dependency is nothing to a user, while a lint rule or a contributor policy belongs in the notes. just build now fails when uv.lock does not name the version in pyproject.toml, and just relock regenerates the lock without upgrading anything. uv sync --frozen does not check the project's own version, so a stale lock previously passed twine, check-manifest, pyroma and both smoke tests unnoticed. That is not theoretical: it is how a version bump shipped here with the previous version still in the lock. MAINTAINING.md release steps 1 and 2 updated to match. The justfile is byte-identical to django-marina again. Verified: just lint, just build and just test-cov at 100%. just relock was a no-op, so this lock was already current. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Propagation of zostera/django-marina#696. In the window between merging the release PR and pushing the tag, just release-check prints "(none)" for the Unreleased entries next to every commit since the previous tag. Stamping the section removes the heading the recipe looks for, and the tag it compares against is still the old one. Correct, and it reads as if the changelog has been lost. Raised by the django-bootstrap4 session, which hit it while cutting 26.3. It does not show up in django-marina, where the tag sits on HEAD so both lists come back empty and the pair looks consistent. Documentation only. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
dyve
added a commit
that referenced
this pull request
Oct 11, 2026
Adds three changelog entries that nothing flagged, because until #896 landed `just release-check` listed only commits touching `src/` and none of these do: the workflow hardening (#887), the invisible-character lint (#875) and the AI assistance policy (#874). The coverage entry is amended to mention the CI step from #888, without which `fail_under = 100` was set but never run. Confirmed afterwards against the new second group in `just release-check`, which lists the same commits. Drops "(release candidate)" from the Python 3.15 entry. 3.15.0 shipped on 2026-10-09. What keeps it out of the classifiers is Django: 6.1.2, 6.0.9 and 5.2.18 all stop at 3.14. Folds in the three entries #896 appended to `Unreleased`. #896 is in main and therefore in the tree this tag will point at, so its entries belong in the 26.4 section rather than waiting for 26.5. The section is ordered by the categories MAINTAINING.md lists, which the `Unreleased` section was not: dropped cycles, bug fixes with the breaking ones first, features, tooling, documentation. Flat list, as in 26.3 and earlier. `uv.lock` names 26.4. The `_lockfile-matches-version` gate that #896 brought in caught the stale lock on the first `just build`, which is the first time that check has earned its keep here. Verified with `just lint`, `just test-cov` at 100% and `just build`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Merged
dyve
added a commit
that referenced
this pull request
Oct 11, 2026
Adds three changelog entries that nothing flagged, because until #896 landed `just release-check` listed only commits touching `src/` and none of these do: the workflow hardening (#887), the invisible-character lint (#875) and the AI assistance policy (#874). The coverage entry is amended to mention the CI step from #888, without which `fail_under = 100` was set but never run. Confirmed afterwards against the new second group in `just release-check`, which lists the same commits. Drops "(release candidate)" from the Python 3.15 entry. 3.15.0 shipped on 2026-10-09. What keeps it out of the classifiers is Django: 6.1.2, 6.0.9 and 5.2.18 all stop at 3.14. Folds in the three entries #896 appended to `Unreleased`. #896 is in main and therefore in the tree this tag will point at, so its entries belong in the 26.4 section rather than waiting for 26.5. The section is ordered by the categories MAINTAINING.md lists, which the `Unreleased` section was not: dropped cycles, bug fixes with the breaking ones first, features, tooling, documentation. Flat list, as in 26.3 and earlier. `uv.lock` names 26.4. The `_lockfile-matches-version` gate that #896 brought in caught the stale lock on the first `just build`, which is the first time that check has earned its keep here. Verified with `just lint`, `just test-cov` at 100% and `just build`. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
Propagation of zostera/django-marina#694, where the reasoning lives.
just release-checkhid most of the commits. It listed only commits touchingsrc/, then closed with "Every commit above must be covered by an entry". That reads as a complete list and is not one, so anything tooling-only was invisible. It now prints a second group for commits touching nothing insrc/, under a heading that says to read them rather than a rule, because no rule fits that group: a Dependabot bump of a dev dependency is genuinely nothing to a user, while a lint rule, a CI gate or a contributor policy belongs in the notes under tooling. Across marina, bootstrap4 and bootstrap5, roughly eighteen changes had gone unrecorded this way.just buildpassed with a stale lockfile.uv sync --frozendoes not check the project's own package version, so a bump could ship with the old version still inuv.lockwhile twine, check-manifest, pyroma and both smoke tests all reported green. Verified directly in marina:uv sync --frozeninstalled 26.9 against a lock naming 26.3 and exited 0.buildnow depends on a check comparing the two, which puts it in front ofrelease-tagas well, andjust relockregenerates the lock without upgrading anything (just upgradebumps every dependency and has no business in a release commit).MAINTAINING.md release steps 1 and 2 are updated to match. The
justfileis byte-identical to django-marina again.Verified with
just lint,just buildandjust test-covat 100%.just relockwas a no-op here, so this repository's lock was already consistent.Sequencing with #895
#895, the 26.4 release, is open. PACKAGING.md now says not to branch a propagation off a release branch, which is what produced the phantom 26.4 here in the first place, so this is branched off
maininstead and carries no release commit.That leaves the merge order to settle, and either way works as long as it is deliberate:
## Unreleasedwill have become## 26.4 (date). I will add a fresh## Unreleasedfor these two entries rather than let git file them under the released heading, which it would do silently since the two sides touch different lines.The entries are appended at the end of
Unreleasedrather than the top, so they do not collide with anything #895 prepends.Credit where it is due: the lockfile half of this exists because the django-bootstrap5 session tested my claim that
just buildwould catch a stale lock, instead of believing it. It does not, and did not.