From fad832b7e0dc8a7e0b22e203aff4936f23e4c77d Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 4 Sep 2026 12:48:04 +0000 Subject: [PATCH] =?UTF-8?q?docs(ci):=20the=20bump-level=20rule=20=E2=80=94?= =?UTF-8?q?=20an=20additive=20widening=20of=20a=20published=20surface=20is?= =?UTF-8?q?=20at=20least=20minor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Record the maintainer's ruling (2026-09-04, decision batch #35) where authors already read the changeset rules: the `Check Changeset` step's route-1 prose in `.github/workflows/pr-automation.yml`, plus a one-line cross-reference from the header of `scripts/check-changeset-no-major.mjs`, which already carries the launch-window reasoning the rule's last sentence depends on. Prose only: no new gate, no behaviour change, nothing retro-fixed. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_012zGPuVVX3deAx9LdjK8jCk --- .github/workflows/pr-automation.yml | 17 +++++++++++++++++ scripts/check-changeset-no-major.mjs | 7 +++++++ 2 files changed, 24 insertions(+) diff --git a/.github/workflows/pr-automation.yml b/.github/workflows/pr-automation.yml index 8bac9e88c3..1d81799d36 100644 --- a/.github/workflows/pr-automation.yml +++ b/.github/workflows/pr-automation.yml @@ -664,6 +664,23 @@ jobs: 1. It releases something -> run 'pnpm changeset' and name the packages it releases. + WHICH LEVEL: A purely additive widening of a published package's + public surface (a new exported symbol on an `index`, a new accepted + key or value) takes at least `minor`. The commit type may raise a + bump but never lower it below what the act requires; a `fix(` that + widens an index is therefore `minor`, and a `fix(` that changes no + public surface stays `patch`. During the launch window `major` stays + refused by `check-changeset-no-major` and breaking-ness is carried by + the BREAKING banner plus the ADR-0087 disposition, not by the level. + Ruled by the maintainer on 2026-09-04 (decision batch #35) on #15294, + which recorded two contract reviews reading the repo's own history to + OPPOSITE bumps for the same additive act. The commit type is not the + discriminator it looked like: it correlates with the act, and when + they disagree the act wins. The 64 historical `patch` precedents are + pre-rule and nothing is retro-fixed. This is prose, not a gate -- no + check computes it; `check-changeset-no-major.mjs` refuses `major` and + says why in its header, and the two remaining levels are yours. + 2. It releases nothing (.github/, .claude/, skills/, docs/, content/, examples/, tests-only, and the like) -> apply the 'skip-changeset' label. <<< PREFERRED diff --git a/scripts/check-changeset-no-major.mjs b/scripts/check-changeset-no-major.mjs index 00836bd0be..76eeedddb0 100644 --- a/scripts/check-changeset-no-major.mjs +++ b/scripts/check-changeset-no-major.mjs @@ -51,6 +51,13 @@ * change that states neither). They are not documentation niceties — during the * window they are the only signal there is. * + * CHOOSING BETWEEN THE TWO LEVELS THIS GUARD LEAVES: a purely additive widening + * of a published package's public surface takes at least `minor`, and the commit + * type may raise a bump but never lower it — the rule is written out in full in + * the `Check Changeset` step's prose in `.github/workflows/pr-automation.yml` + * ("WHICH LEVEL"), where the author who is told a changeset is missing reads it + * (maintainer ruling, 2026-09-04 decision batch #35, on #15294). + * * ⇒ **THIS GUARD IS WHAT GETS DISARMED AT GA.** The end condition lives in the * file that enforces the convention, rather than in a prose home elsewhere, so * that declared = enforced stays in one place: whoever closes the launch window