Versioning & Changelog
This page defines how the Carve specification is versioned and records every normative change. It is the source of truth for "did the language change in a way that affects my documents?"
Versions
The spec carries a version (the Version: field in grammar.ebnf), currently 0.1. It is pre-1.0: the language is still settling, so a minor bump may include behavior changes. From 1.0 onward, behavior changes reserve a major bump.
Implementations declare which spec version they conform to. The carve fmt --stamp tool records it inside a document as a trailing provenance marker:
%% carve-version: 0.1; generated-by: carve-js 0.1.0So a document carries the spec version it was last processed under, and this page tells you what changed since — together they answer whether a document needs attention after a spec upgrade.
Change categories
Every changelog entry is tagged with its migration impact:
[behavior]— changes the rendered output of some existing input. These are the entries that can require document migration: a.crvthat rendered one way before may render differently. Review these when upgrading.[clarification]— pins or documents existing behavior without changing output. No migration needed; impls may have converged to match.[addition]— new syntax or capability. Backward-compatible: existing documents are unaffected; only documents that opt into the new construct change.
When upgrading a document across spec versions, you only need to act on [behavior] entries between the document's stamped carve-version and the target version.
Changelog
0.1
Initial released version. Establishes the grammar, the PART 9 semantic constraints, the conformance corpus, and the tooling conventions (carve fmt, the provenance marker, profiles, the extension contract). Everything prior to 0.1 was draft; there is no earlier released version to migrate from.