Context
#19652 is the cut's record. The notes' iteration 3 (#19759, merged as #19760) left three items for the cut-preparation pass: the cut's receipt, removing the banner, and the numbers at the cut head. publish.mjs prepare runs only from a clean dev at origin/dev whose package.json already names the new version (readPrepareBlockers, buildScripts/release/releaseState.mjs:82–95). So this pass lands as a dev PR before the release PR, never inside it.
The Problem
package.json reads 13.2.0, so prepare stops with "tag 13.2.0 already exists: bump package.json first".
- The note opens with the iteration banner (
> **Status: iteration 3 of N …**). Release-notes §7 gives its removal to the final pass.
- The note's scope numbers were counted at each iteration. §7 wants them regenerated at the cut boundary and reconciled in the text. The source stamp of that regeneration is the cut's receipt.
The Architectural Reality
buildScripts/release/publish.mjs prepare runs its preflight through readPrepareBlockers: on dev, at origin/dev, a clean tree, the note present, and no tag for the version.
buildScripts/release/analyzeClosedSinceRelease.mjs counts what closed since the last release. At 13.2 the content-sync corpus lagged GitHub (neomjs/neo-agent-brain#1038), so the counts are taken against live GitHub.
- Release-notes workflow §1.3: the final iteration removes the banner. §7: the cut-readiness checklist.
- Precedent: #14555, v13.1's cut-prep pass, which removed the banner and stamped the counts.
The Fix
After the notes' iteration 4 (the narrative-arc pass on #19712) merges, open one PR to dev that does three things:
- Set
package.json and the root entries of package-lock.json to 13.3.0.
- Remove the iteration banner from
.github/RELEASE_NOTES/v13.3.0.md.
- Regenerate every scope number in the note at the PR's head against live GitHub, and stamp each with its source: the command, the head SHA and the UTC time.
Acceptance Criteria
Out of Scope
The note's narrative (iteration 4, #19712). The release PR itself, which has its own leaf. finish, npm and the Portal (#19652).
Related
#19652 · #19712 · #19759 · #19637 · #14555
Live latest-open sweep: latest 20 open issues at 2026-10-15T17:16:33Z; no equivalent found
A2A claim sweep: last 30 messages, all read-states; no claim on the cut-prep scope. Ada's 16:10Z message routed this pass here, and #19759's Out of Scope names it.
MC sweep: "release PR preparation leaf publish.mjs prepare rehearse version bump banner removal counts at cut head 13.3", 4 results. No prior decision; the v13.0 and v13.2 precedents confirm the counts are not regenerated automatically.
Own-assignment sweep: 3 open (#19762, #19652, #15000); #19652 is this pass's parent record
Retrieval Hint: "v13.3.0 cut-prep version bump banner counts at the cut head"
Origin Session ID: 77c3c004-7908-4549-9190-b4f9c3cfa9dc
Context
#19652 is the cut's record. The notes' iteration 3 (#19759, merged as #19760) left three items for the cut-preparation pass: the cut's receipt, removing the banner, and the numbers at the cut head.
publish.mjs prepareruns only from a cleandevatorigin/devwhosepackage.jsonalready names the new version (readPrepareBlockers,buildScripts/release/releaseState.mjs:82–95). So this pass lands as adevPR before the release PR, never inside it.The Problem
package.jsonreads 13.2.0, sopreparestops with "tag 13.2.0 already exists: bump package.json first".> **Status: iteration 3 of N …**). Release-notes §7 gives its removal to the final pass.The Architectural Reality
buildScripts/release/publish.mjsprepareruns its preflight throughreadPrepareBlockers: ondev, atorigin/dev, a clean tree, the note present, and no tag for the version.buildScripts/release/analyzeClosedSinceRelease.mjscounts what closed since the last release. At 13.2 the content-sync corpus lagged GitHub (neomjs/neo-agent-brain#1038), so the counts are taken against live GitHub.The Fix
After the notes' iteration 4 (the narrative-arc pass on #19712) merges, open one PR to
devthat does three things:package.jsonand the root entries ofpackage-lock.jsonto 13.3.0..github/RELEASE_NOTES/v13.3.0.md.Acceptance Criteria
package.jsonand the root entries ofpackage-lock.jsonread 13.3.0.devafter the merge,node buildScripts/release/publish.mjs prepare --rehearse --ticket <release leaf> --body-file <body>prints every gate ✅.Out of Scope
The note's narrative (iteration 4, #19712). The release PR itself, which has its own leaf.
finish, npm and the Portal (#19652).Related
#19652 · #19712 · #19759 · #19637 · #14555
Live latest-open sweep: latest 20 open issues at 2026-10-15T17:16:33Z; no equivalent found A2A claim sweep: last 30 messages, all read-states; no claim on the cut-prep scope. Ada's 16:10Z message routed this pass here, and #19759's Out of Scope names it. MC sweep: "release PR preparation leaf publish.mjs prepare rehearse version bump banner removal counts at cut head 13.3", 4 results. No prior decision; the v13.0 and v13.2 precedents confirm the counts are not regenerated automatically. Own-assignment sweep: 3 open (#19762, #19652, #15000); #19652 is this pass's parent record
Retrieval Hint: "v13.3.0 cut-prep version bump banner counts at the cut head" Origin Session ID: 77c3c004-7908-4549-9190-b4f9c3cfa9dc