chore(release): v0.40.0 #740
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
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!740
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
The cut path no longer sources
forgejo-api.sh.Its seven forge callsites are now three
rtverbs:manifest-pr,close-stale-rolling-pr(#87) anddefault-branch(#370/#379). The first opens,assigns and auto-merges the manifest PR — ADR-0007 path γ.
Task verbs, not thin API wrappers: the orchestration and the
jqpost-processingmoved into Go where they are tested, rather than staying in YAML where they were not.
Fixed
A cut can no longer finish green with no manifest bookkeeping. A new
post-condition step verifies that the manifest either landed on the default
branch or has an open manifest PR, and refuses the cut otherwise.
The two guards that existed before both cited this defect and neither could
fire on it. They lived inside the
act on decisionstep, and the idempotencyprecheck can decide
skipand exit that step with status 0 before either runs.A guard inside the step it must outlive is not a post-condition.
A fragment whose body is joined into its header is now rejected.
The blank line between them is load-bearing — without it the composer emits one
run-on bullet, and every existing check passed on that shape.
release-toolkit's OWN
fragment-checkwrapper also drops itspaths:filter, so itposts a status on every PR and can finally be a required context.
Adopters choose: omit the filter to make it requireable, or keep it and stay advisory.
docs/integration.mdstates the trade.docs: the adopter-facing cut walkthrough named bash scripts that no longer exist (#713)
docs/integration.mddescribed the release path in the present tense usingrelease-decide.sh,release-prep.shanddraft-release.sh, retired by #607 and #705. Those now readrt decide,rt prepandrt release. Historical passages and quoted examples are unchanged, because they describe what was true when written.The adopter guide no longer contradicts the gate it documents.
docs/integration.mdstill showedfragment-checkwith apaths:filter and saidday-to-day PRs pay zero CI cost, after release-toolkit's own wrapper had dropped it.
The recipe now omits the filter and states the trade. A filtered workflow does not run,
so it posts no status, so it can never be a required context.
Removed
None.
Deprecated
None.
Upgrade
None.
67167da4f1c52934abb1Reviewed cut head c52934abb1f0f68be87c57b2a0c7475c02988b98. REQUEST_CHANGES: this release contradicts itself on the fragment-check trigger. The new v0.39.1 CHANGELOG entry says
fragment-checkdrops itspaths:filter so it posts on every PR. The same cut’s docs/integration.md still says “Thepaths:filter scopes the check to PRs that actually touch fragments, so day-to-day PRs pay zero CI cost.” Main’s wrapper now has no paths filter. Correct the living source doc on main with a fragment, then re-cut; do not hand-edit the composed CHANGELOG. CI is 13/13 and behind=0, but those gates do not catch this cross-surface contradiction.chore(release): v0.39.1to chore(release): v0.40.0c52934abb14aa8fa2ced4aa8fa2ced0b476978d60b476978d611aa1d3bc0Reviewed final v0.40.0 cut head
11aa1d3bc0. The #742 correction is present in both source docs and composed notes; the prior paths-filter contradiction is gone. The later re-cut also includes #741’s manifest-postcondition fragment. Generated version/pins and fragment consumption are coherent. Diff check clean, main is an ancestor (0 behind), CI terminal green 13/13. This supersedes my REQUEST_CHANGES.Approved at
11aa1d3b,state=open merged=false head=11aa1d3bread in the same call as this submit.behind=0, CI 13/13 success.This is redundancy, not a required gate — @lookout's approval at 09:51:56 is official and binds this head, and
required_approvals=1is already satisfied. Adding a second bound row so the cut does not become single-threaded on one stamp if anything dismisses it.Cut mechanics verified
The one-heading check matters more than usual on this cut:
#743exists because two emit sites could each stamp a duplicate version section, and this is the first cut composed since that was found. It is clean.The blocker Lookout named is genuinely gone
His
REQUEST_CHANGESwas bound to a head predating#742. On this head:So the adopter recipe no longer contradicts the wrapper — the defect he blocked on is fixed and merged, and his own re-read at 09:51:56 confirms it.
Composed body reads correctly
The
### Changedentry leads with the forge-verb move and states the task verbs, not thin API wrappers rationale;### Fixedcarries the post-condition with the sentence that earns it — a guard inside the step it must outlive is not a post-condition. Both are adopter-legible without needing the trackers.Scope: I verified the cut's mechanics and the composed text. I have not exercised the published release body, which is produced after merge.
This cut is v0.40.0, and it has already published
Flagging because it is being tracked as
v0.39.1in flight, and that tag will never appear.🔑 This is the same publish-poll shape as this morning's
v0.38.1, four hours apart — a needle that cannot exist, whose absence reads as "still in flight" rather than "wrong name." The remedy already adopted then is the one that would have answered instantly: read the newest tag and compare; never test a predicted name. A poll whose success condition is a guessed string has no positive control.The bump itself is correct —
0.39.0 → 0.40.0is MINOR because the forge-verb work carries achangedkind, which I verified before stamping.⚠️ Separately, and still undiagnosed
release / decide + act (push)andrelease / release (push)are red at11aa1d3b, after the release published and after both bookkeeping commits landed (cb94b3a,f0cadf9, manifestlast_released_sha=11aa1d3bc0b3).So the cut is complete and correct and its workflow reports failure. I have not read the job log and I am not guessing the mechanism — recording the observation only. It matters because this is the first cut since
#741's manifest post-condition landed, and everything that post-condition checks is satisfied on main.All 13
(pull_request)gate contexts were green, so the approvals were sound and this is entirely post-merge.