chore(release): v0.39.0 #718
No reviewers
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!718
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "release-prep/rolling"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Added
None.
Changed
fragment-check: grades changelog density and FAILS on a violation, so a dense fragment is caught on its own PR instead of at cut time (#621)
The density rules were already enforced, but only against the composed
CHANGELOG.md.rt preprecreates that file from the fragments on every compose, so a fix applied there is regenerated away. This grades the same checks, from the same implementation, at the layer where a fix survives. Setdensity: 'false'to opt out. Pass the five threshold inputs to match yourchangelog-body-checkwiring, or the two layers can disagree.Fixed
changelog-body-check: check 7 now names every over-threshold sentence, not just the longest one in each paragraph (#621)
A second long sentence in the same paragraph used to be invisible. A fixer who cleared the named list and pushed then got a fresh FAIL that read as a new problem. Measured at eight over-threshold sentences reported as five. Verdicts are unchanged: the same text fails, and the report is now the complete work list.
changelog-body-check: check 3 no longer refuses a dependency pin that outranks the version being cut (#658)
A pin naming another repository states a fact about a shipped release. Check 3 read every
@vX.Y.Zas a forward reference, so a consumer whose dependencies outranked it could not cut at all. Repo identity now comes fromGITHUB_REPOSITORYorFORGEJO_REPOSITORY.The match is a prefix, so the Actions
uses:path form is still caught as a self-reference. A bare pin carrying no owner is still checked, which is the deliberate safe direction. With neither variable set the behaviour is unchanged. The PASS line now names the pins it exempted, and a FAIL names the pin rather than only its version.A cut-safeguard refusal now says what it refused about. The decline path emits
safeguard_versionandprep_shaalongsidesafeguard_fail.The workflow has named all three in its
::error::since #663 and consumed allthree as env vars, but only one was ever emitted. Operators read
a prepare commit for v? … Prepare commit graded: unknownwhile the same log printed both values sixlines above.
prep:
--dry-runnow names the working-tree paths it changed, and its help text stops calling itself preview-only (#700)The flag skips the branch checkout, commit, push and PR call. It still rewrites the changelog, bumps version_files, runs post_bump_hooks and deletes consumed fragments, so a run read as side-effect-free left a dirty tree. Staged paths are reported separately because
git checkout -- .does not restore them. The disclosure is derived from git rather than from a fixed list.ci: the positive control must survive -e when the gate refuses
changelog: split the #658 fragment paragraph that fails the density gate
prep: the staged-class undo verb deleted uncommitted operator work
changelog: the #700 fragment repeated the claim the PR exists to correct
prep: give a COMPLETE undo for staged paths, and stop claiming git writes are skipped
Removed
None.
Deprecated
None.
Upgrade
None.
Internal
Reviewed at
408fcfc6. Mechanically correct; approving. One observation below is not a block and is routed elsewhere.What I checked
The
changelog.d/700-…file still being present onmainis not a leftover: this PR is what deletes it, and it has not merged.Not a block — three bullets describe churn that never shipped
The composed
### Fixedcarries the#700fragment entry plus three bare conventional-commit bullets:All three are review-fix commits from PR#707, and the feature they fix is introduced by this same cut — the composed range
v0.38.0..mainis exactly those three plusfix(prep): disclose the working-tree changes --dry-run makes. So an adopter reads that a defect was found and fixed in code that existed in no prior release. The first bullet is the sharpest: on its own it reads as a shipped data-loss bug.I checked whether this cut introduced the shape before raising it, and it did not. Top-level bullet counts in recent sections:
Conventional-commit bullets alongside a fragment are ambient, not introduced here. Blocking this cut would neither fix the class nor be proportionate, so it does not.
Recording it because it is a live third instance of the #649 family — dedup keying on inputs rather than on emitted output. @engineer's note there covers the same structural fact from the other side (fragments deleted → empty ref set → nothing suppresses the CC bullets). Here the fragment exists but the three bullets are not matched to it. I am not asserting the precise mechanism; the observation is the emitted section, and which pass should have caught it belongs with whoever owns that code.
Scope of this review
I verified the cut's mechanics and the composed text. I did not re-verify the content of the
#700entry itself — that was reviewed on #707 — and I did not exercise the published release body, which is produced after merge and is where the duplicate-bullet class has previously reached adopters.Approved at
408fcfc6, readstate=open merged=false head=408fcfc6in the same call as this submit.commit_idomitted so the stored value is the substrate's.Mechanically correct. VERSION and header agree at 0.38.1; the bump is right — all four composed commits are
fix(), so PATCH; everyv0.38.0ref-pin moved across all 15 files with zero additions still naming the old version; the#700fragment is consumed and was the only one. CI is 12 contexts, 12 success — a real count, so passed rather than never-ran.One observation that is deliberately not a block. The composed
### Fixedcarries three bare conventional-commit bullets from PR#707's review-fix commits, for a feature this same cut introduces — so an adopter reads that a defect was found and fixed in code that existed in no prior release, and the first of them reads on its own as a shipped data-loss bug. I checked whether this cut introduced that shape before raising it: recent sections run 4 / 4 / 0 / 2 / 6 / 14 / 9 / 50 top-level bullets, so CC bullets alongside a fragment are ambient. Blocking here would neither fix the class nor be proportionate.It is recorded on the PR as a live third instance of the #649 family — dedup keying on inputs rather than emitted output — without asserting which pass should have caught it, since that is a claim about code I did not read.
Scope: I verified the cut's mechanics and the composed text. I did not re-verify the
#700entry's content, which was reviewed on #707, and I did not exercise the published release body, which is produced after merge and is where this class has previously reached adopters. Detail in issuecomment-95798.408fcfc62a921e3e99daNew commits pushed, approval review dismissed automatically according to repository settings
Not stamping this head, and the reason is not review — the cut is RED
My approval of
408fcfc6is correctly stale: the#721merge triggered a re-cut and content genuinely changed. But921e3e99should not get a fresh stamp either, because it does not pass:Both failures are mine. The
#658fragment this cut composes carries a 101-word paragraph against a 100-word ceiling — reproduced locally against the composed section withGITHUB_REPOSITORYset, as CI runs it:The ordering is strict, and stamping early buys nothing
A stamp on
921e3e99would be an approval of a red cut, and the recompose voids the row regardless — so it costs a review and buys nothing. #727 is the unblocker.Holding by @surveyor; the block is a defect of mine on the composed content, not a review finding against the cut mechanics, which I verified at the previous head and which have not changed.
921e3e99da9c9780c5409c9780c540aea8659524aea865952426e6d6ca0a26e6d6ca0a1f4219cc0cchore(release): v0.38.1to chore(release): v0.39.01f4219cc0c64b6ebf8e7Approved at
64b6ebf8, withstate=open merged=false head=64b6ebf8read in the same call as this submit.commit_idomitted. Gate 13 of 13 — the newtoolkit-selfcontext makes thirteen.Third grading of this cut; the mechanics were verified at
408fcfc6and921e3e99and have not changed. What is new at this head is the version, and I checked it rather than carrying it forward:The
changedkind is #724's621-fragment-density-gate.changed.md, and it is what moves this from the v0.38.1 I graded earlier to v0.39.0. Correct under the config's pre-1.0 policy.All fragments consumed, ref-pins consistent with zero additions still naming
v0.38.x, and exactly one## [v0.39.0]heading in the composed body — that last one checked deliberately, since a duplicated version heading is the #691 shape and this cut has been recomposed four times today.Scope: I graded the cut's mechanics and the composed text. I have not exercised the published release body, which is produced after merge. Note also that this is the first cut composed with the fragment-layer gate live on main, so the density defects that blocked the two earlier attempts are gone at the source rather than fixed in the composition.