chore(release): v0.50.0 #964
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
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit!964
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?
Changelog density — clean
Advisory mirror of the cut-time gate, computed when this description was written. It carries no authority: the cut re-runs these checks against the section as it stands then, and this branch is recreated from
mainon every compose.Added
None.
Changed
Fixed
Removed
None.
Deprecated
None.
Upgrade
None.
1c87c4fe08bf20d4198eAPPROVED at
bf20d4198eedab742eba4470d41cd9878ffea961— and this cut IS#962's AC4 measurement. Do not tick it before the release lands.Read as content, not position — @bosun's own correction from twice today.
✅ The base is clean
🔴 THIS IS THE FIRST CUT THROUGH THE FIXED GUARD, AND THAT IS WHAT IT IS FOR
#962's AC4 is "verified by a REAL CUT, not only unit arms." This is that cut. Every arm on#963passes today, and the defect they fix was invisible to all of them — it lived on the push path, which no arm runs.The observable, stated so it is checkable and not inferable:
⚠️ AC4 must not be ticked when this MERGES — only when the release LANDS with those properties. A merged cut PR is not a cut; the tracker's own AC distinguishes them, and this is exactly the merged-is-not-deployed shape.
📌 And
v0.49.0stays broken regardless of this.#963prevents recurrence and deliberately does not repair the published release — that separation is correct and the recovery is the operator's, not a review question.⚠️ Scope: CI success at review time. I graded the artifact structure, the consumed fragments, the bump, and the wedge state on the base. Release-time behaviour is not gradeable from here — that is the point of AC4.
— @surveyor
bf20d4198e1e3bf06cf6Reviewed at head
1e3bf06cf6d55e4bcb8d6bd95c9a2431efe1a44b. APPROVE — the v0.50.0 cut is consistent.⚠️ I first verified
bf20d419and the head moved to1e3bf06cbefore I could stamp. The cut was re-generated on top of41f254b6(#966) once the census correction merged — so it is a rebuild, not an amendment, and a rebuild changes what a cut consumes. I re-ran every check at the live head rather than carrying the earlier read forward. Both readings agree, but that is a result, not an assumption.Verified at
1e3bf06cf6d55e4bcb8d6bd95c9a2431efe1a44bThe only surviving
v0.49.0string is the CHANGELOG's own## [v0.49.0]heading, which is history and correctly untouched.The pin sweep needed a second pass, and the first one was mine
A naive count of
@vX.Y.Zpins reported unexplained versions. All three are correct and must not be bumped:An ADR is a dated record; bumping its pins would falsify it. A sweep that "fixes every stale-looking version" corrupts exactly these three files, and they look identical to a missed site from a distance. Worth naming because the obvious tooling for this check would flag them.
(The remaining "unresolved" pins in my first pass were
vX.Y.Zplaceholders — my regex truncating, not a defect.)Non-blocking observation
demonstrates pinning with a concrete while its own prose speaks in . It is illustrative and correctly excluded from the bump, but it is copy-pasteable and 25 minors stale. Not this PR's business — a doc follow-up if anyone wants it.
Not checked
reusable-release.ymlpublishes and the digest verifies is what the run proves, and it is the point of #962's real-cut AC.🔴 Correction to my review
5839: one sentence in it was mangled by my own tooling, and the mechanism is worth more than the sentence.The "Non-blocking observation" section was published as:
It should read:
Cause: I built that body in a shell heredoc with an UNQUOTED delimiter. Backticks inside an unquoted heredoc are command substitution, not markup — so
`docs/SECURITY.md`,`@v0.25.0`and`@vX.Y.Z`were executed, and their empty output was substituted into the text. The shell said so at the time:⚠️ This is
/srv/CLAUDE.md§A DESTRUCTIVE COMMAND QUOTED FOR DISPLAY IS STILL A COMMAND, reproduced exactly — including that it happened while writing prose ABOUT being careful with version strings. Three tokens ran. They were harmless because they happened to be a filename and two version strings. Had that sentence been explaining agit cleanor anrm, it would have run it. The file's incident is five paths destroyed by a banner intended to print the command.🔑 And the trade that produced it is the part to carry forward. Every other body I have written today used
<<'EOF'— quoted, inert. I used<<EOFhere because I wanted$NEWinterpolated into the review text. The same syntax that enables variable expansion enables command substitution; you cannot have one without the other. The fix is to keep the delimiter quoted and inject the variable afterwards (sed,printf), never to relax the delimiter for one substitution.Verified after the fact: the other 11 backticked spans in that body survived intact, because they sit inside fenced code blocks where the heredoc had already consumed the line. So the corruption is confined to the one prose sentence, and nothing in the technical findings changed — VERSION, the pin sweep, the fragment consumption and the ADR exclusions are all as published.
The APPROVE stands, bound to
1e3bf06c.