fix(release): restore the New Features section dropped from published notes - #297
Merged
Conversation
…hed notes The promotion step matched sub-section headings with a `\w+` pattern, so `### New Features` and `### Breaking Changes` were not recognised. When such a heading came first in `[Unreleased]`, its entries landed in the block's leading lines, which the merge path never reads — v1.16.0 shipped with all 16 of its feature entries silently missing. Three changes: - Match heading text verbatim so multi-word headings are recognised. - Carry over entries that precede the first heading instead of letting them fall off the merge loop. Losing content must not be silent, whatever the heading vocabulary becomes. - Refuse to release from a non-default branch. The promote step pushes its commit to the triggering branch; dispatched from a temporary `release/*` branch, that commit is deleted with the branch, which is why main kept a pre-release CHANGELOG and package.json. Every existing fixture used the single-word Keep-a-Changelog vocabulary the repo no longer writes, which is why this shipped green. The new tests use the real vocabulary; five of them fail against the previous code, including one that reproduces the v1.16.0 input exactly. Two are must-stay-silent pins: single-word headings still merge, and the `[Unreleased]` block is still emptied. Refs #296 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011pKFDExqmgtWw916ipMWTR
v1.16.0 is tagged and on npm, but its release ran from a temporary branch that was deleted, so the promotion commit never reached main: CHANGELOG.md still held the release's entries under `[Unreleased]` and package.json was still at 1.15.0. Left alone, the next release would have republished those already-shipped entries as duplicates. - Promote `[Unreleased]` into `## [1.16.0] - 2026-09-03`, all 38 entries across all four sections, using the fixed promotion script. - Bump package.json to 1.16.0 to match the published artifact. - Point every version link reference at this fork. They named the upstream project, which has no such tags, so every version heading in the file linked to a 404. Mechanical, and separate from the defect above. Refs #296 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011pKFDExqmgtWw916ipMWTR
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #296
v1.16.0 was published with its entire
### New Featuressection missing — all 16 bullets, covering the VBA node-discovery epic #264. Separately, the promotion commit never reachedmain, somainstill carried a pre-release CHANGELOG andpackage.json.Root cause
splitSubsectionsmatched sub-headings with/^### (\w+)\s*$/.### New Featuresdoes not match. In the v1.16.0 block it was the first heading, so its header line and all 16 bullets fell intounrelSubs.leading— which the Case B merge never reads. Dropped, no warning, exit 0.The workflow log states it plainly:
22 of 38.
Compounding it: the promote step pushes to whichever branch triggered the run. The run was dispatched from
release/v1.16.0, so commitfe3d598landed there and vanished when the branch was deleted.Changes
Root cause
State reconciliation
[Unreleased]into## [1.16.0] - 2026-09-03— 38 entries, four sections — using the fixed script.package.jsonto 1.16.0, matching what is published.Why this shipped green
Every fixture in
__tests__/prepare-release.test.tsused the single-word Keep-a-Changelog vocabulary (### Added,### Fixed,### Security). The repo's CHANGELOG moved to### New Features/### Breaking Changesand the tests never followed.Verification
Seven tests added, using the real vocabulary. Five fail against the previous code — verified by reverting both parts of the fix and re-running, not assumed:
The last two pin behaviour that was never broken and must not change.
npx tsc --noEmitclean.prepare-release+daemon-releasesuites: 47 passed, 1 skipped.Not covered
The published v1.16.0 release notes are corrected separately through the GitHub API — a release body is not repository content and this PR cannot reach it. The
v1.16.0git tag still points at the pre-reconciliation commit; retagging a published release is destructive and was deliberately not done.🤖 Generated with Claude Code
https://claude.ai/code/session_011pKFDExqmgtWw916ipMWTR