Skip to content

@changesets/cli 3.x cannot be taken as a bare version bump — this repo is a private package that versions itself, and 3.0.0 stops doing that by default #1503

Description

@hotlong

Filed by the repo:hotcrm seat while reviewing dependabot PR #1264 (@changesets/cli 2.31.1 → 3.0.1) in R26. ⛔ PR #1264 must not be merged as it stands — the reason is below. Unassigned.

The blocking finding

@changesets/cli 3.0.0 ships 18 breaking changes. One of them is:

Private packages are no longer versioned by default.

Measured against this repo on main @ cc8dfc74, package.json declares:

"name": "hotcrm",
"version": "3.0.0",
"private": true,

hotcrm is a single private package that versions itself through changesets. .changeset/config.json does not set a privatePackages option, so on 3.x it takes the new default.

The failure mode is silence, not a crash. changeset version would stop bumping the version and stop generating CHANGELOG.md — and it would exit successfully while doing nothing. Nothing in PR CI exercises the release path, so the whole gate suite stays green. The first observation point is the next release, which is a human-gated action (maintainer, 2026-08-27: 「要发版本我会自己点。」), and by then the tool has been silently inert for however long.

⚠️ This is a reading of the documented breaking change, ⛔ not a measurement. This seat did not run changeset version against 3.0.1. Verifying it empirically is the first task on this card, and "the default turns out not to affect a single-package repo" is a perfectly good outcome — report it and this card shrinks to a plain bump.

The rest of the 18, measured against this repo

Also needs action:

change this repo verdict
Node support bumped to ^22.11 || ^24 || >=26 declares "node": ">=22" ⚠️ Declared floor becomes wrong>=22 admits 22.0–22.10, which 3.x rejects. The CI job is "Build and Test (22.x)" and almost certainly resolves above 22.11, so this is a correctness problem in the declaration, not a live break. Bump the floor in the same PR.
changeset version now exits 1 when there are no unreleased changesets (was 0) "changeset:version": "changeset version" ⚠️ Any automation calling it unconditionally now fails. ⭐ Compounds with the finding above: if private packages stop being versioned, "nothing to release" may become the normal outcome, turning a silent no-op into a hard failure at release time.
$schema pins @changesets/config@3.1.2 in .changeset/config.json Check whether 3.x's config package moves; the format option below lives in that schema.

Measured, no action needed (recorded so the next reader does not re-derive them):

  • prettier config option removed in favour of format — this repo's config does not set prettier. ✅
  • changeset tag renamed to changeset git-tag — this repo never calls changeset tag. ✅
  • --sinceMaster removed from changeset status — this repo uses --since, in both package.json and .github/workflows/changeset-check.yml. ✅
  • pnpm >=10.0.0 required — repo declares "pnpm": ">=10.0.0" and packageManager: pnpm@10.33.0. ✅
  • Now published as an ES module — this repo only invokes the CLI binary from scripts; nothing imports it programmatically. ✅
  • Yarn Classic support dropped, Bolt monorepo detection dropped, pre.json initialVersions removed, enquirer@clack/prompts, peer-dependency bumps now patch instead of major, prerelease changesets move to a pre/ subfolder, v1-config warnings removed, private-package snapshot config removed — none apply: this repo is a single pnpm package, not in prerelease mode, with no peer dependencies of its own. ✅

Scope

Take the 3.x upgrade properly, in one PR: the dependency bump plus whatever configuration the breaking changes require — at minimum the privatePackages decision and the engines.node floor — and prove the release path still versions this package and still generates CHANGELOG.md.

Prove it by running the tool, not by reading its docs. The whole point of this card is that the documentation is what PR #1264's green did not cover. A dry run of changeset version on a scratch branch, showing the version bumped and the changelog section written, is the deliverable. ⛔ Do not commit the result of that dry run.

Do not hand-edit CHANGELOG.md — see #1443, which is a live card about exactly that instruction being stale. ⚠️ #1443 and this card both touch the changeset/CHANGELOG story but in different files (#1443 edits AGENTS.md, a governed surface). ⛔ Not in the same batch.

Do not close PR #1264 as part of this work. When a 3.x bump lands, dependabot closes it on its own.

If the answer is "stay on 2.x"

That is an acceptable outcome and it is not a silent one: nothing forces this upgrade, ^2.31.1 is working, and 18 breaking changes for a tool that is doing its job is a real cost. If you reach that conclusion with evidence, say so on this card and on #1264, and this seat will close both — ⛔ but do not reach it merely because the upgrade turns out to be fiddly.

Refs PR #1264 (the bare bump), #1443 (the stale CHANGELOG.md instruction), #1353 (seat post).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ci/cdCI plumbing and the verification pipelinepm:queueReady for the PM dispatch loop

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions