fix(release): stop the coana bump from hand-writing versions - #1515
Merged
Jeppe Fredsgaard Blaabjerg (jfblaa) merged 1 commit intoAug 26, 2026
Merged
Conversation
The bump-coana skill bumped package.json's version itself and wrote its own `## [<version>]` changelog heading. Both belong to the release workflow, and the skill's version of them caused real damage: headings for 1.1.160, a version that never existed anywhere, and a v1.1.159 that shipped with no notes at all because the hand-written heading had consumed the `[Unreleased]` block the release meant to promote. Point the skill at `[Unreleased]` instead, recreating that heading when the previous release consumed it — having nowhere to put notes is what motivated the invented headings in the first place. Also separate the two failures behind writeManifestVersion's guard. A manifest already holding the target version rewrites to itself, and `replaced === raw` read that no-op as a missing field, so a release whose version the skill had already written failed with "no top-level version line" against a manifest whose version field was present and well-formed. Test for the field, then replace, and let an already-correct manifest pass through.
Jeppe Fredsgaard Blaabjerg (jfblaa)
requested review from
John-David Dalton (jdalton) and
Martin Torp (mtorp)
August 26, 2026 09:24
Martin Torp (mtorp)
approved these changes
Aug 26, 2026
Jeppe Fredsgaard Blaabjerg (jfblaa)
deleted the
fix/coana-bump-owns-no-versions
branch
August 26, 2026 10:18
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.
Summary
The
bump-coanaskill bumpedpackage.json'sversionitself and wrote its own## [<version>]changelog heading. Both belong to the release workflow, and the skill's versions of them caused real damage onv1.x:1.1.160, a version with no tag, no GitHub release, and nothing on npm — written twice, by upgrading coana to version 15.10.17 #1502 and upgrading coana to version 15.10.23 #1510.## [Unreleased]block, so when the real release ran it found nothing to promote.1.1.160release attempt failed outright: with the manifest already hand-written to1.1.160,writeManifestVersion's rewrite was byte-identical, and itsreplaced === rawguard reported "no top-levelversionline" against a manifest whose version field was present and well-formed.Changes
.claude/skills/bump-coana/SKILL.mdversion, and says why: the release owns that field, and hand-writing it breaks the next release.## [Unreleased], recreating the heading when the previous release consumed it. Having nowhere to put notes is what motivated the invented headings, so the fix has to cover that case or it will recur.## [<version>]heading", plus a matching line under Important Notes.scripts/release/bump.mtstest/release-bump.test.mtsVerification
pnpm run lint— 0 errorspnpm run check:tsc— clean, both projectspnpm test:unit test/release-bump.test.mts— 5/5No changelog entry: internal tooling, excluded per the repo's changelog rules.
Follow-up not included here
Step 5 still commits with
git commit -n, which skips thecommit-msgPII guard that CLAUDE.md says not to work around. Left alone since the intent was probably to skip the pre-commit lint hook —DISABLE_PRECOMMIT_LINT=1would do that without disarming the guard.Note
Medium Risk
Changes the release bump script on the npm-publish path; the fix is narrow but release infrastructure is sensitive.
Overview
Stops the bump-coana skill from editing release-owned metadata and hardens the CI release bump when
package.jsonalready matches the derived version.The skill now only bumps
@coana-tech/cliin devDependencies, logs Coana changes under## [Unreleased](recreating that section if a release consumed it), and explicitly forbids touching the top-levelversionor adding## [<version>]changelog headings—behavior that had invented unreleased versions and left real releases with empty notes.writeManifestVersioninscripts/release/bump.mtschecks for aversionfield before replacing, so a manifest already at the target version is a no-op instead of throwing “no version line.” A unit test covers that case.Reviewed by Cursor Bugbot for commit 4a42956. Configure here.