fix(release): the pending release is 17.2.0, not 18.0.0 - #3237
Merged
Conversation
Four changesets scored `major` — 17 package entries across objectui#3159, objectui#3160, objectui#3161 and objectui#3225. Every publishable package sits in one `fixed` group (39 packages), and changesets applies the group's highest bump to all of it, so those entries staged the whole family as `18.0.0` on the open release PR (#3133) while `@objectstack/spec` is still `^17.0.0-rc.1`. objectui's major is pinned to the `@objectstack` major so that "same major ⇒ compatible" holds across the two repos; our own breaking changes ship as `minor` with the break spelled out in the changeset body (AGENTS.md §版本号策略). All four are rescored `minor` and each now carries the note saying why — nothing about the described breaks changes, only the number they would publish under. The rule was already written and nothing executed it, and no workflow even looked at a changeset: `ci.yml` and `lint.yml` both list `'**/*.md'` and `.changeset/**` under `paths-ignore`, so a PR adding only a changeset starts nothing. So it is mechanical now, in two places: - `scripts/check-changeset-no-major.mjs` (dependency-free — the CI job is a checkout plus one `node` call) exits non-zero on any `major` in changeset frontmatter, and prints the file:line and the fix. The release that follows objectstack across ITS major sets `OBJECTUI_ALLOW_MAJOR=1`. - `.github/workflows/changeset-guard.yml` runs it on the inverse trigger of every other workflow: only when `.changeset/**` changes. - `pnpm test` asserts the same repository state, so the rule survives that workflow being skipped or removed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R8TU2mGotfDRNhg7WP5esH
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
os-zhuang
marked this pull request as ready for review
August 3, 2026 03:38
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.
What
The open release PR #3133 stages every package as
18.0.0. It should be17.2.0. Four pending changesets scoredmajor— 17 package entries between them:long-tail-spec-symbol-burn-down.md(#3161)auth-components-react-spec-symbol-burn-down.md(#3159)data-objectstack-chatbot-list-spec-symbol-burn-down.md(#3160)remove-dead-layout-page-node-renderer.md(#3225)Every publishable package sits in one
fixedgroup (39 packages in.changeset/config.json), and changesets applies the group's highest bump to all of it — so onemajorpublishes the whole family as the next major.@objectstack/specis still^17.0.0-rc.1, so18.0.0would break the pin that makes "same major ⇒ compatible" hold across the two repos.All four are rescored
minor, each with a note saying why. Nothing about the described breaks changes — only the version number they would publish under. This is the convention, not an oversight: objectui's own breaking changes ship asminorwith the break spelled out in the changeset body, and the major moves exactly once per@objectstackmajor (AGENTS.md §版本号策略).Why it wasn't caught
The rule was already written down and nothing executed it — and no workflow even looked at a changeset.
ci.ymlandlint.ymlboth list'**/*.md'and.changeset/**underpaths-ignore, so a PR that adds only a changeset starts no workflow at all. It is mechanical now, in two independent places:scripts/check-changeset-no-major.mjs— exits non-zero on anymajorin changeset frontmatter and prints the offendingfile:lineplus the fix. Dependency-free and hand-parses the frontmatter on purpose: the CI job is a checkout plus onenodecall, with nopnpm installto import a YAML parser from. Body prose and fenced YAML examples are not declarations, so a changeset that discusses the major/minor call does not trip it..github/workflows/changeset-guard.yml— runs it on the inverse trigger of every other workflow:paths: ['.changeset/**'], PR tomain/developand push tomain.pnpm test—scripts/__tests__/check-changeset-no-major.test.tsasserts the same repository state, so the rule survives that workflow being skipped or removed. It also pins why the workflow is separate: ifci.ymlever stops ignoring.changeset/**, the test fails and the check can be folded back in.The one release that legitimately bumps the major is the one following
@objectstackacross its major; that release setsOBJECTUI_ALLOW_MAJOR=1.Verification
pnpm changeset:versionon this branch resolves every package to17.2.0(was18.0.0); reverted afterwards, no version files are committed here.node scripts/check-changeset-no-major.mjs→ green on this branch; red with.changeset/…:2on a fixture that scoresmajor, green again underOBJECTUI_ALLOW_MAJOR=1.pnpm vitest run --project unit scripts/__tests__/→ 31 passed (3 files), including the 7 new ones.eslintclean on both new files.After this lands on
main, the changesets action regenerates #3133 at17.2.0.Also updated
content/docs/guide/ci-cd-pipeline.md— documents the new workflow under Release Workflows.package.json—pnpm changeset:checkruns both changeset guards, not just the fixed-group one.🤖 Generated with Claude Code
https://claude.ai/code/session_01R8TU2mGotfDRNhg7WP5esH
Generated by Claude Code