Rule 13.9
On this page

Rule 13.9

Chapter 13, Change control Test

A published version must follow Semantic Versioning 2.0.0, and before 1.0.0 the minor is the breaking position: a breaking change must ship only in a new 0.N.0, and a 0.N.P must only fix and add. From 1.0.0, a breaking change must ship only in a new major. A change is breaking when an upgrade can make a program that worked stop working or work differently: compile() or the language service refuses a program it accepted, a program that compiled computes a different value on a target or on the CPU oracle, an export listed in src/__api__/surface.md is removed or reshaped so that a caller’s code no longer type-checks, or the typescript peer range narrows. A change is not breaking when the emitted text moves and the values it computes do not, when a warning is added, when a program is newly refused that Tint or WebGL2 already refused (Rule 12.6), or when a target or the oracle is fixed to compute what WGSL defines; that last is recorded under ### Fixed with the old result named. Every breaking change must carry a CHANGELOG.md entry that names the edit an author makes to migrate.

The rule text and the parts under it are the compiler's own English, as the design document writes them.

Rationale

npm’s caret range reads a 0.x version as >=0.N.0 <0.(N+1).0, so a break in a patch reaches every ^0.N.0 user unasked; and semver alone does not say what “breaking” means for a compiler whose output text changes far more often than its meaning.

Derives from

roadmap item 25 (docs/roadmap.md), decided by the maintainer on 2026-09-24 in changes/0010-versions-and-deprecation-window.md.

How it is verified

Checked by a test. A test, a gate script or a CI workflow names this rule, and the traceability check fails when a file listed below stops naming it.

Where the rule says the compiler enforces it:

src/changelog.test.ts (the version headings of CHANGELOG.md and the minor bump of a release that breaks); review for what counts as breaking.

The files that verify it at commit 26de7be8, each at the first line that names the rule:

See also

Source

The rule at commit 26de7be8:

Edit this page Report a problem