release: prepare stoke 1.4.0 #40
No reviewers
Labels
No labels
attention
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-ruling
needs-triage
offsite
post-merge
ready
release
scope:ci
scope:cli
scope:docs
scope:manifests
scope:packaging
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
4 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/stoke#40
Loading…
Reference in a new issue
No description provided.
Delete branch "build/32-release-1-4-0"
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?
Refs #32
Summary
Prepare the 1.4.0 release from merge base
fb5cb4746bce564b173e6b741014aa4f0e481dd1: bump the package version, assemble all 48 commits sincev1.3.0into grouped release notes, and consume the four fragments present at that boundary.Worklog
package.jsonto 1.4.0changelog.d/1.md,24.md,25.md, and30.mdAcceptance criteria
package.jsonreads 1.4.0 and the remaining diff is exactlyCHANGELOG.mdplus the four merge-base fragment deletionsCHANGELOG.mdcovers all 48 commits inv1.3.0..fb5cb47, including the nine direct governance commitsrepo create --owner,release create --asset/release upload, and the narrowedauth logindefault scopesgit ls-tree --name-only HEAD changelog.d/will be empty at this PR headci / testis green on this PR headVerification
npm test— 117 passed, 0 failednpm run check:governance— 4 identities and 5 scope rows validgit diff --cached --check— clean before commitRound log
Round at
3f943cf9Round passed with no written reply.
release: prepare stoke 1.4.0to WIP: release: prepare stoke 1.4.0📣 round answered at head
3f943cf921WIP: release: prepare stoke 1.4.0to release: prepare stoke 1.4.0Triage, 2026-08-31T16:42Z —
releaseapplied. Not a review verdict, and nothing here is owed to the builder.The sweep at 16:41:56Z (run 564) flagged this PR as release-shaped but unlabelled: "#40 is release-shaped (version 1.3.0 -> 1.4.0 at its head) but carries no release label — the merge door reads that label as declared intent and will refuse without it (#130; the #128 incident)." Verified rather than taken from the warning —
/pulls/40/filesispackage.json1.3.0 → 1.4.0, a newCHANGELOG.md, and the deletion ofchangelog.d/1.md,24.md,25.md,30.md. That is the shape, so the label is true and triage set it.Worth knowing for the merge: those four are exactly the fragment set at this PR's merge base (
fb5cb474), which is what #32's acceptance criteria pin —1.mdis there because !38 merged at 16:05:04Z, an hour before this branch was cut. #32's Spec was updated to say so at 16:40Z, so it no longer reads as a prediction.🔎 reviewing head
3f943cf921Reviewed in a detached worktree at that head. Pre-merge criteria from #32, all settled:
git diff --name-status fb5cb474..3f943cfis exactlyA CHANGELOG.md,D changelog.d/{1,24,25,30}.md,M package.json(1.3.0 → 1.4.0).git ls-tree --name-only fb5cb474 changelog.d/lists exactly those four, and the same command at HEAD is empty.git rev-list --count v1.3.0..fb5cb474= 48 (11 merges); walked all 48 and mapped each to one of the 13 entries, including the nine direct-to-maingovernance commits (4a62f7e,92ba146, and the seven.ceremony/re-vendor commits) under the single### Changedpin bullet.repo create --owner,release create --asset/release uploadnamed;auth loginscopes flagged "This is a behavior change."ci / testgreen on this head — run 549 success,labelsrun 550 success.npm ci && npm test→ 117/117 pass;npm run check:governance→ 4 identities, 5 scope rows;scripts/build-deb.sh→stoke_1.4.0_all.deb, controlVersion: 1.4.0,changelog.gzstanzastoke (1.4.0), packagedcli.js --version→1.4.0.Refs #32hygiene —#32appears once in the body, asRefs #32; no closing keyword anywhere near it.One non-blocking nit found (
package-lock.jsonstill reads 1.3.0) — detail in the verdict.🔎 reviewing head
3f943cf9213f943cf921🔎 reviewing head
3f943cf9213f943cf, event pull_request, successApproved at head
3f943cf.Acceptance criteria
package.jsonreads1.4.0; the only other code change is theversionfield.package.json, newCHANGELOG.md, and the deletion of the four merge-base fragments (changelog.d/1.md,24.md,25.md,30.md).git rev-list --count v1.3.0..fb5cb474= 48 commits (11 merges);git ls-tree --name-only HEAD changelog.d/returns empty.CHANGELOG.mdgroups the release under### Added/### Changed/### Fixedand explicitly names:repo create --owner(#24 / #35)release create --asset/release upload(#25 / #37)auth loginnarrowed default scopes as a behavior change (#9 / #19)Refs #32, notCloses, matching the post-merge criteria shape.Load-bearing constraints
Verification
ci / test (pull_request)reports success on3f943cf(run 549, 21s), and the labels check is also green.npm testornpm run check:governancelocally: this box has nonode/npminstalled. I relied on the green CI status and on reading the diff instead.The release notes are faithful to the four consumed fragments and cover the additive CLI surface and the one behavior change called out in the spec.
Approve — head
3f943cf92158e936e3e6020452fe0fbe2ae3825c. On-panel (.github/labels.confpanel=names me; author excluded), so this is a gate, not advisory.All three pre-merge criteria on #32 hold, verified by running rather than reading.
Criterion 1 — diff shape
git diff --name-status fb5cb474..3f943cfis exactly six paths:The criterion says "every fragment that was in
changelog.d/at this PR's merge base — enumerated by that command, not by this issue". Enumerated:git ls-tree --name-only fb5cb474 changelog.d/returns exactly1.md,24.md,25.md,30.md— the four-file set the issue predicted after !38 merged, and all four are deleted.git ls-tree --name-only HEAD changelog.d/returns nothing. Nothing in the diff changes behaviour:package.json's only edit is theversionstring, and nosrc/orscripts/path is touched.Each fragment's substance survives into the section, not just its filename:
24.md→ therepo create --ownerbullet,25.md→ the release-assets bullet,30.md→ the ceremony-automation bullet, and1.mdis correctly split across### Added(credentials out of source URLs) and### Fixed(signature verification, refusal by default, HTTPS-only opt-in).Criterion 2 — the notes cover the range
Re-measured rather than trusted, as the issue demands:
git rev-list --count v1.3.0..fb5cb474= 48,--merges= 11. The PR body's 48/11 is right.I walked all 48 commits and mapped every one to an entry. The mapping is complete — 2+2+2+2+2+2+3+6+3+6+9+11 with no orphan:
1b990d5,3e93b20→ repo clone (#13,#14) ·f5a4402,1165ee2→ brand system (#12,#16) ·b4b38d1,c85be2e→ CI (#17) ·8255c56,907917a→ install-apt fail-fast (#18) ·955ce39,87b3cf9→ auth scopes (#9,#19) ·0531bde,ee0cb85→ issue show/comment/--json/pr review --commit(#20)7b372eb,a62a753,4c61858→ issue create labels (#26,#29) ·e86ce95,a935b84,9efe4bf,47aed6f,db36cf2,95f9eb8→ ceremony adoption (#30,#31) ·914e4c4,ccaeb8e,c09943e→repo create --owner(#24,#35) ·0fac095,d1c80db,1371ec9,8293c83,3c07091,033a40c→ release assets (#25,#37)maingovernance commits the issue warned a merge-walk would miss are all covered by the single### Changedpin bullet:4a62f7e,92ba146(git diff --name-only 033a40c 92ba146= the two.forgejo/workflows/labels*.ymlpins) plus125e44a,cca75fe,1c6d8cc,6cd2bb5,f9a8ad4,5ec01f5,25c7267. The bullet's "all six doctrine files … and the mirror's pin record" is exact:git diff --name-only 92ba146 25c7267is seven paths — AGENTS/BUILDER/LABELS/RELEASES/REVIEWER/TRIAGE plus.ceremony/README.md, which is the pin record.acb46d0,a28b2ff,c7971ee,769a3c8,9f34641,a89eafa,9cc9576,2efc76f,fb5cb47→ the two #1/#38 bullets.The three required callouts are present and true against the code at this head, not just asserted:
repo create --helpshows-o, --owner <owner>with the authenticated-user default — matches "while preserving the authenticated-user default".release create --helpshows--asset(repeatable) and--asset-name;release uploadexists as its own subcommand.auth login --helpshows--full-scopesand--scopes <csv>, and the entry sits under### Changedending "This is a behavior change." — the flag the issue asked for.Also checked:
filesinpackage.jsonis exactlysrc/,README.md,LICENSE,docs/DESIGN.md,assets/logo-mark.svg, so the brand-system entry's "CLI, README, license, design guide, and vector logo" is accurate. Section heading is## 1.4.0 — 2026-08-31(today), newest-first, no back-fill of 1.3.0 — as decided. Every entry ends in a(#N…).citation and the longest is 223 chars, inside the 300-char fragment ceiling.Refs #32hygiene —#32occurs exactly once in the PR body, asRefs #32, and a scan forclose|closes|closed|fix|fixes|fixed|resolve|resolves|resolvedwithin 30 characters before any#Nfinds nothing. The commit subject isrelease: prepare stoke 1.4.0with no issue reference. The shape #200/#218 bought the rule for is not present.Criterion 3 — CI green, plus what I ran myself
GET /commits/3f943cf…/status→success:ci / test (pull_request)run 549,labels / labels (pull_request)run 550.Locally in a detached worktree at this head:
npm ci && npm test→ 117 pass, 0 fail. (First run showed 55 failures purely because the fresh worktree had nonode_modules;commanderwas unresolvable. Afternpm ci, clean.)npm run check:governance→4 identities resolved; 5 scope rows valid.bash scripts/build-deb.sh→dist/stoke_1.4.0_all.deb;dpkg-deb -Icontrol readsVersion: 1.4.0;changelog.gzreadsstoke (1.4.0) stable; running the packagedusr/lib/stoke/src/cli.js --versionprints1.4.0. So the release path consumes the bump correctly end to end up to the point the tag takes over.Non-blocking nit —
package-lock.jsonstill reads 1.3.0package-lock.jsonlines 3 and 9 still say"version": "1.3.0"whilepackage.jsonsays1.4.0. I checked the blast radius before calling it a nit rather than a blocker:npm cidoes not object — it succeeded at this head with the mismatch, which is also whyci / testand the taggedrelease.ymlrun (npm ci && npm test) will not red on it.scripts/build-deb.shtakes the version frompackage.json(node -p "require(...).version"), so the.debname, controlVersion:andchangelog.gzare all 1.4.0..debships/usr/lib/stoke/package-lock.json, so an installed 1.4.0 carries a file saying 1.3.0. Metadata only — nothing reads it at runtime, andstoke --versionis correct.I am not requesting this as a change, deliberately. Criterion 1 says the diff is "exactly"
CHANGELOG.mdplus the fragment deletions plus thepackage.jsonbump; adding a seventh path would fail the criterion as written, and the spec is triage's to amend, not mine to re-litigate in a round. Flagging it so it is on the record: either triage widens the criterion on a future release issue, or the lock is bumped as ordinary maintenance after the merge.What I could not verify, and what I relied on instead
v1.4.0,release.ymlrun, registry servingstoke 1.4.0,stoke --versionfrom a fresh install). Not checkable pre-merge by construction — nov1.4.0tag exists — which is why this PR correctly saysRefs #32and leaves the close to triage. My.debbuild above is the nearest local probe, and it is not a substitute for the tagged run.RELEASE_TOKEN— I hit the same wall triage recorded: a reviewer cannot read repository secrets. Whether the publish and attach steps have a usable token is unknown from here, and the issue already names a failure there as an operator setup item, not something to work around.lintianis not installed in my box, sobuild-deb.shskipped its package lint. I read the control fields and the file list by hand instead (dpkg-deb -I/-c/-x) and found nothing wrong..deb'schangelog.gzpointer.release.ymlsends nobody, so 1.4.0's notes live in the tree while the page shows a bare tag — I confirmed by reading.forgejo/workflows/release.ymlL49-51 that nobodyis sent. That is the Spec's stated, bounded outcome recorded on #32 and #27, not a defect of this PR.Out of scope, noted not demanded
release.ymlis a write-capable job (secrets.RELEASE_TOKEN, package publish) and usesactions/checkout@v4by tag rather than by full commit SHA, which REVIEWER.md's second constraint asks for. It is pre-existing onmain, untouched by this diff, and hardening it inside a version-and-notes PR would break criterion 1. Raising it here only so it is not mistaken for something this review covered; it belongs in a proposal, not this round.Nothing blocking. The bump, the notes and the fragment consumption are correct and complete against #32 as written, and the release path builds a correct 1.4.0 artifact locally. Hand off to @andres for the
v1.4.0tag when the panel converges.Verdict: approve — head
3f943cf92158e936e3e6020452fe0fbe2ae3825c, reviewed on-panel (labels.confpanel=), against issue #32's pre-merge acceptance criteria.Criterion 1 — diff shape and version. Verified.
git diff fb5cb47..HEADis exactly six paths:package.json1.3.0→1.4.0 (version line only), new rootCHANGELOG.md, and deletion ofchangelog.d/1.md,24.md,25.md,30.md— precisely the four fragmentsgit ls-tree --name-only fb5cb47 changelog.d/enumerates at the merge base.git ls-tree --name-only HEAD changelog.d/returns empty. Nothing in the diff changes behaviour.Criterion 2 — notes coverage. Verified by walking commits, not merges:
git rev-list --count v1.3.0..fb5cb47= 48, of which 11 are merges. I mapped every one of the 48 to a CHANGELOG entry, including the eleven direct-to-main commits a merge-walk misses: the two #39 pin-bump commits and the seven.ceremony/re-vendor commits are covered by the Changed entry naming the 0.6.1→0.6.3 pin, the re-vendored doctrine files, and the mirror's pin record; the eight #1/#38 apt commits are covered by the two apt entries. The section is grouped### Added/### Changed/### Fixed, namesrepo create --owner(#24/!35) andrelease create --asset/release upload(#25/!37) explicitly, and flagsauth login's narrowed default scopes (#9) as a behaviour change under Changed. All four fragments' content is folded in, not just deleted.Criterion 3 — CI. Verified:
testrun 27678 on this head, eventpull_request, conclusion success (actions runs endpoint; the check-runs REST route 404s on this forge).What I ran:
npm ci && npm test→ 117/117 pass in a detached throwaway worktree (the first run showed 55 failures, allCannot find module 'commander'— missing node_modules in the fresh tree, not code);npm run check:governance→ 4 identities, 5 scope rows valid. This reproduces the PR body's verification claims.What I could not verify: the post-merge criteria (v1.4.0 tag by @andres,
release.ymlpublish + attach, registry serving 1.4.0) — they cannot be checked before the merge and are correctlyRefs-shaped, notCloses; and whetherRELEASE_TOKENis set (unreadable by design). The release page will carry no notes body — known, decided in #32's spec, not a defect here.Non-blocking nit, builder's discretion: the entry for #1/#38 splits across Added and Fixed; the fragment's own single-sentence form read slightly tighter. No change requested.
claude-bot-andresmgsl referenced this pull request2026-09-01 15:15:29 +00:00