Skip to content

Commit b360cc7

Browse files
claude[bot]claude
andauthored
docs(changeset-gate): record the launch-window convention's end condition (#14227)
The no-major guard documented the launch-window convention but not when it stops applying. A window-period convention with no written end condition erodes into a permanent exception. Records, in the file that enforces the convention so declared = enforced stays in one place: the convention applies during the launch window only; at GA (the fixed group's first general-availability major) the group returns to strict semver; until then the BREAKING banner and the ADR-0087 disposition are the mandatory information carriers for breaking-ness. Adds the self-referential note that this guard is what gets disarmed at GA. Comment-only; the gate's behaviour is untouched. Claude-Session: https://claude.ai/code/session_01WLJQhde67SeTccsmnBVarV Co-authored-by: Claude <noreply@anthropic.com>
1 parent 1e13012 commit b360cc7

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

scripts/check-changeset-no-major.mjs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,37 @@
2828
* of tribal, so an over-strict `major` marker can never again turn an ordinary
2929
* PR into a whole-stack major release by accident.
3030
*
31+
* ## END CONDITION: the convention above expires at GA (#14043)
32+
*
33+
* The convention applies during the LAUNCH WINDOW ONLY. It is recorded here,
34+
* with its expiry, because a window-period convention carrying no written end
35+
* condition erodes into a permanent exception — the reader two years from now
36+
* finds a guard that forbids `major` and no statement that it was ever meant to
37+
* stop.
38+
*
39+
* **End condition: at GA — the fixed group's first general-availability major —
40+
* the group returns to STRICT SEMVER.** From that point a required member on a
41+
* published interface, an accept-set narrowing, or any compile-breaking change
42+
* to implementers grades `major`, and grades it for the reason semver says so:
43+
* the bump level is the carrier again.
44+
*
45+
* Until then it is NOT the carrier, and that is the whole cost of the window:
46+
* a breaking change ships as `minor`, so the bump level tells a consumer
47+
* nothing about whether the release breaks them. The mandatory information
48+
* carriers for breaking-ness in the meantime are the **BREAKING** banner the
49+
* author writes in the changeset body and the ADR-0087 migration-ledger
50+
* disposition (`check-adr-0087-registration.mjs` refuses a declared breaking
51+
* change that states neither). They are not documentation niceties — during the
52+
* window they are the only signal there is.
53+
*
54+
* ⇒ **THIS GUARD IS WHAT GETS DISARMED AT GA.** The end condition lives in the
55+
* file that enforces the convention, rather than in a prose home elsewhere, so
56+
* that declared = enforced stays in one place: whoever closes the launch window
57+
* retires this check (and with it the `allow-major` escape hatch, whose error
58+
* message — "a whole-stack major release is genuinely intended" — becomes
59+
* ordinarily true again). Reaching GA without touching this file means the
60+
* window did not actually close.
61+
*
3162
* Exits with code 1 (and a clear list of offenders) if the diff introduces a
3263
* changeset that bumps a package `major`.
3364
*

0 commit comments

Comments
 (0)