Skip to content

docs: write down what counts as a breaking change - #223

Merged
tiagolauer merged 1 commit into
fix/pin-typescript-5from
docs/versioning-policy
Jul 28, 2026
Merged

docs: write down what counts as a breaking change#223
tiagolauer merged 1 commit into
fix/pin-typescript-5from
docs/versioning-policy

Conversation

@tiagolauer

Copy link
Copy Markdown
Owner

Third of four. Stacked on #222.

For a library whose product is the types it infers, the usual reading of semver isn't enough. "No runtime signature changed, so it's a patch" would let a release break every dependent build, because the inferred row shape is the API just as much as the exported functions are.

VERSIONING.md names the three covered surfaces — runtime exports, inferred types, the CLI contract — and classifies changes against them.

The interesting part is the three cases that can turn a green build red in a minor, each with the reasoning spelled out:

  • unknown resolving to a concrete type. Freezing every unknown would freeze the whole point of the library.
  • Strict mode reporting a mistake it used to let through. A strict mode frozen on release day stops being useful — feat: validate JOIN ON operands in strict mode #217 would have been impossible outside a major.
  • A generate type mapping corrected to match what the driver really returns. The old type was a lie the type system was hiding.

Everything else that can break a build waits for a major. Parser internals, QueryTypeError message text, CLI phrasing and compile cost are explicitly outside the policy.

Takes effect at 1.0; until then 0.x rules still apply.

For a library whose product is the types it infers, the usual reading of
semver is not enough. "No runtime signature changed, so it is a patch" would
let a release break every dependent build, because the inferred row shape is
the API just as much as the exported functions are.

VERSIONING.md states the three covered surfaces (runtime exports, inferred
types, the CLI contract) and classifies changes against them. It also spells
out the three cases that can turn a green build red in a minor release, and
why each one is worth it:

- unknown resolving to a concrete type, since freezing every unknown would
  freeze the entire point of the library;
- strict mode reporting a mistake it used to let through, since a strict
  mode frozen on release day stops being useful;
- a generate type mapping corrected to match what the driver really returns,
  since the old type was a lie the type system was hiding.

Everything else that can break a build waits for a major, and the parser
internals, QueryTypeError message text, CLI phrasing and compile cost are
explicitly outside the policy.

The policy takes effect at 1.0. Until then the 0.x rules still apply.
@tiagolauer
tiagolauer force-pushed the feat/type-instantiation-budget branch from fe6f421 to f8069f9 Compare July 28, 2026 17:03
@tiagolauer
tiagolauer force-pushed the docs/versioning-policy branch from e4fc579 to c44b61c Compare July 28, 2026 17:03
Base automatically changed from feat/type-instantiation-budget to fix/pin-typescript-5 July 28, 2026 17:08
@tiagolauer
tiagolauer merged commit f1ba178 into fix/pin-typescript-5 Jul 28, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant