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