Skip to content
gr

Stability

What gr commits not to break across releases.

The full stability contract is in STABILITY.md in the repository. This page is a summary.

Four axes

gr makes stability commitments across four axes.

Library API — the exported names of github.com/tamnd/gr. gr tracks 148 exported names as of v1.0. Adding a new exported name or changing a non-breaking signature (adding a functional option) is a minor-version increment. Removing or changing an existing name is a major-version increment.

Configuration surface — the 51 configuration knobs: their names, tiers, and default values. Renaming a knob or changing its tier is a breaking change. Adding a new knob is not.

File format — the .gr file format. Every file carries a format version in its header byte. A newer gr can read files created by an older gr. An older gr refuses to open a file created by a newer gr and returns *gr.ErrVersionMismatch.

Wire protocol — the Bolt protocol over gr serve. gr supports Bolt v4.4 and Bolt v5.0. Adding a new Bolt version is additive. Dropping a Bolt version requires a major release with deprecation notice.

Semantic versioning

  • Patch versions (1.0.x) — bug fixes only; no new behaviour, no API additions.
  • Minor versions (1.x.0) — additive changes only: new exported names, new knobs, new PRAGMA values, expanded TCK coverage.
  • Major versions (x.0.0) — breaking changes with a deprecation cycle.

What is not covered

The CONFORMANCE.md document records TCK deviations. Scenarios in the deviations registry are not stable: gr may implement them in a minor version. Scenarios that currently pass are stable: gr will not regress them without a major version.

Internal packages (github.com/tamnd/gr/internal/... — none exist in gr; see no internal/ policy) and test helpers are not covered by the stability guarantee.