Versioning policy
The wire version#
The manifest's pilotage field carries the wire version as major.minor
(currently 1.1). Its semantics are normative in Part II §11:
- Minor versions are strictly additive: new OPTIONAL fields, new
sub-features, new reserved values. The unknown-member rule and the
unknown-value fallbacks (Part II §1.2–1.3) make minors safe: a
1.0Client interoperates with a1.1Server unchanged. - Major versions may break compatibility. A Client encountering a
higher major than it implements MUST NOT use the extension on that
Server. A breaking change also mints a new extension identifier
(e.g.
io.github.jafarsa0/pilotage-v2), as the MCP extensions framework requires.
Document releases#
Specification documents carry major.minor.patch (currently 1.1.1).
The patch component is editorial only (clarifications, typo fixes, example
corrections that change no requirement) and never appears on the wire.
A document release that changes any requirement increments the wire minor (additive) or major (breaking), never just the patch.
What is versioned separately#
- Language identifiers (
family/version): the version part changes when a grammar changes incompatibly. Server-scoped (Part II §3.3). - Guides:
versionchanges with content; clients cache by (Server, Language identifier, guide version). - Schemas: published per wire version under
schemas/<major.minor>/. Enums in a schema file are closed for that version; later minors may add reserved values (see the schema file's own description). catalog_versionis not a version: it is an opaque change-detection token, compared only for equality (Part II §11.3).
Release procedure#
- Changes land via pull request (see CONTRIBUTING.md), mapped in the PR to patch / minor / major per this policy.
- A release updates every file that states the version: the wire version
where applicable, SPEC.md front matter, CHANGELOG.md, CITATION.cff
(version, date-released, and the version sentence in the abstract),
.zenodo.json (version and the version sentence in the description),
llms.txt, index.html (the version chip), the current-release note in
README.md, the harness package.json, the two "currently" markers in
this file, and (for wire-version changes) a new
schemas/<version>/directory plus the links that reference it. - Each GitHub release is archived on Zenodo, minting a version DOI under the concept DOI 10.5281/zenodo.21396027.