Skip to content

fix(release): no 0.0.0-* prerelease counts as a release - #243

Merged
Madraka merged 1 commit into
mainfrom
claude/release-plan-stage
Nov 15, 2026
Merged

Madraka merged 1 commit into
mainfrom
claude/release-plan-stage

Conversation

@Madraka

@Madraka Madraka commented Nov 15, 2026

Copy link
Copy Markdown
Contributor

What

After the owner's placeholder publish, npm also lists @cloudhal/[email protected]. npm's staged publishing created it by itself. isPlaceholderVersion matched only 0.0.0-placeholder.*, so releaseGroup counted 0.0.0-stage as a real release. It kept release-verify in the 0.9.0 group and planned a publish. Two Release runs on main reached the release-signing gate; both were cancelled and nothing was approved.

  • scripts/release-plan.ts: isPlaceholderVersion becomes isNotRealVersion, which treats every 0.0.0-* prerelease as never a release of a package. The check is startsWith("0.0.0-"), which is linear. No Cloudhal release is 0.0.0-*, since the fixed group started at 0.1.0. A plain 0.0.0 is not matched. The doc comments now name both kinds: the owner's placeholder and npm's 0.0.0-stage.
  • Tests (packages/cli/test/release-plan.test.ts):
    • The exact npm state ["0.0.0-placeholder.0", "0.0.0-stage"] with no ## 0.9.0 changelog entry leaves the package out. Nothing is unpublished (publish=false), and the dry-run plan never publishes it. This sits next to the existing nothing-on-npm and placeholder-only cases.
    • Its first version PR still releases it after 0.0.0-stage.
    • Edge cases for the matcher: 0.0.0-placeholder.0, 0.0.0-stage and 0.0.0-anything.1 are not real releases; 0.0.0, 0.9.0, 0.10.0-next.1 and 1.0.0-0.0.0-x are.

Checks

  • The real npm state now: the registry lists ["0.0.0-placeholder.0", "0.0.0-stage"] for @cloudhal/release-verify. node scripts/publish-ci.ts --plan on this branch prints leaving out @cloudhal/release-verify: never released and no "## 0.9.0" in its changelog and then publish=false.

  • Tests, one at a time:

    File Tests
    release-plan 11
    release-publish-plan 17
    release-bundle-publish (publish-ci) 10
    release-workflows 14
    release-trust-assets 4
  • cli tsc, biome and size:check are clean.

Refs #232

🤖 Generated with Claude Code

npm's staged publishing created @cloudhal/[email protected] next to
the owner's 0.0.0-placeholder.0. isPlaceholderVersion matched only
0.0.0-placeholder.*, so releaseGroup counted 0.0.0-stage as a real release,
kept release-verify in the 0.9.0 group and planned a publish (two Release
runs reached the signing gate and were cancelled).

isNotRealVersion now treats every 0.0.0-* prerelease as never a release (no
Cloudhal release is 0.0.0-*; a plain 0.0.0 is not matched). Tests: the exact
npm state with no changelog entry is left out and nothing publishes; the first
version PR still releases it; the matcher's edges.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Madraka <[email protected]>
@Madraka
Madraka merged commit 8a0854d into main Nov 15, 2026
9 checks passed
@Madraka
Madraka deleted the claude/release-plan-stage branch November 15, 2026 09:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant