Skip to content

Sync the release preflight from django-marina - #910

Merged
dyve merged 1 commit into
mainfrom
sync-release-preflight
Oct 11, 2026
Merged

dyve merged 1 commit into
mainfrom
sync-release-preflight

Conversation

@dyve

@dyve dyve commented Oct 11, 2026

Copy link
Copy Markdown
Member

Propagation of zostera/django-marina#694, where the reasoning lives.

just release-check hid most of the commits. It listed only commits touching src/, 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 in src/, 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 build passed with a stale lockfile. uv sync --frozen does not check the project's own package version, so a bump could ship with the old version still in uv.lock while twine, check-manifest, pyroma and both smoke tests all reported green. Verified directly in marina: uv sync --frozen installed 26.9 against a lock naming 26.3 and exited 0. build now depends on a check comparing the two, which puts it in front of release-tag as well, and just relock regenerates the lock without upgrading anything (just upgrade bumps every dependency and has no business in a release commit).

MAINTAINING.md release steps 1 and 2 are updated to match. The justfile is byte-identical to django-marina again.

Verified with just lint, just build and just test-cov at 100%. just relock was a no-op here, so this repository's lock was already consistent.

Sequencing with #909

#909, the 26.3 release, is open. PACKAGING.md now says not to branch a propagation off a release branch, which is what produced the phantom 26.3 here in the first place, so this is branched off main instead and carries no release commit.

That leaves the merge order to settle, and either way works as long as it is deliberate:

  • release: 26.3 #909 first. Then this needs a rebase, because ## Unreleased will have become ## 26.3 (date). I will add a fresh ## Unreleased for 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.
  • This first. Then release: 26.3 #909 should pull these two entries into its 26.3 section before it is cut, otherwise the release ships them unrecorded, which is the exact failure the first half of this change is about.

The entries are appended at the end of Unreleased rather than the top, so they do not collide with anything #909 prepends. Ping me either way and I will do the rebase or hand you the two lines.

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>
@coveralls

Copy link
Copy Markdown

Coverage Status

coverage: 100.0%. remained the same — sync-release-preflight into main

@dyve
dyve merged commit 93ceac5 into main Oct 11, 2026
21 checks passed
@dyve
dyve deleted the sync-release-preflight branch October 11, 2026 08:56
dyve added a commit that referenced this pull request Oct 11, 2026
Stamps the Unreleased section as 26.3 and bumps the version from 26.2.

Orders the notes by the convention in MAINTAINING.md: the dropped Python
cycle first, then bug fixes with the breaking one at their head, the
system check, the dependency change, tooling, and documentation. The four
coverage entries had accumulated at the top of Unreleased since #901 put
the section in order; they are tooling and now sort there.

Adds five entries for changes that shipped without one, found by reading
the full log rather than the old release-check, which listed only commits
touching src/: the coverage report step in CI (#904), the zizmor workflow
hardening and the restored timeout-minutes (#900), the invisible-character
lint (#888), the AI assistance and dependency update policies (#887, #900),
and the CLAUDE.md shim (#885).

Folds in the two entries #910 added. Rebasing onto it filed them at the
foot of the dated 26.3 section without a conflict, since the two sides
touch different lines, which is the silent failure #910 and django-marina
describe. They belong in 26.3, so they move up into the tooling group
rather than being left where git put them, and the blank line that split
the list and the missing one before the 26.2 heading are repaired.

Merges #910's release-check entry into the entry that introduced the
recipe. Both land in this release, so describing it as added and then
changed is internal history; the single entry says what shipped.

Regenerates uv.lock, which records the project version and would otherwise
have kept saying 26.2. That mismatch is what #899 left behind, and what
#910's new build guard now catches.

Verified: just lint passes, just test-cov is green at 100%, just build
produces django_bootstrap4-26.3 artefacts with the packaging checks green,
and the new lockfile guard was confirmed to fail the build when the lock
is stale rather than only passing when it is not.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@dyve dyve mentioned this pull request Oct 11, 2026
dyve added a commit that referenced this pull request Oct 11, 2026
Stamps the Unreleased section as 26.3 and bumps the version from 26.2.

Orders the notes by the convention in MAINTAINING.md: the dropped Python
cycle first, then bug fixes with the breaking one at their head, the
system check, the dependency change, tooling, and documentation. The four
coverage entries had accumulated at the top of Unreleased since #901 put
the section in order; they are tooling and now sort there.

Adds five entries for changes that shipped without one, found by reading
the full log rather than the old release-check, which listed only commits
touching src/: the coverage report step in CI (#904), the zizmor workflow
hardening and the restored timeout-minutes (#900), the invisible-character
lint (#888), the AI assistance and dependency update policies (#887, #900),
and the CLAUDE.md shim (#885).

Folds in the two entries #910 added. Rebasing onto it filed them at the
foot of the dated 26.3 section without a conflict, since the two sides
touch different lines, which is the silent failure #910 and django-marina
describe. They belong in 26.3, so they move up into the tooling group
rather than being left where git put them, and the blank line that split
the list and the missing one before the 26.2 heading are repaired.

Merges #910's release-check entry into the entry that introduced the
recipe. Both land in this release, so describing it as added and then
changed is internal history; the single entry says what shipped.

Regenerates uv.lock, which records the project version and would otherwise
have kept saying 26.2. That mismatch is what #899 left behind, and what
#910's new build guard now catches.

Verified: just lint passes, just test-cov is green at 100%, just build
produces django_bootstrap4-26.3 artefacts with the packaging checks green,
and the new lockfile guard was confirmed to fail the build when the lock
is stale rather than only passing when it is not.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.

2 participants