Versioning policy (story 7.5)¶
nirs4all-io carries several independently-versioned contracts. This file is the
single source of truth for the rules; the constants are asserted in CI on both
sides (crates/nirs4all-io-core/tests/versions.rs, tests/test_versions.py) so
the docs and the code cannot drift.
Contract |
Constant |
Current |
Bump rule |
|---|---|---|---|
|
|
|
Bump (integer) on any incompatible change to the |
|
tracked with the spec schema |
|
The plan is a recommendation, not a stored contract; its shape is versioned together with the spec schema (a plan always carries a |
Convention profile |
|
|
Bump a profile’s |
Canonical JSON |
|
|
Bump only if the canonical-form rules in §2 of |
C ABI |
|
|
Independent of crate semver (D-R6). MAJOR bumps on any breaking ABI change; MINOR on additive symbols; PATCH on fixes. Pre-1.0 every breaking change bumps MAJOR. Checked by |
Targeted |
(EPIC 10) |
tracked |
io targets the |
Rules¶
One bump, one reason. Each contract bumps for its own reason; do not bump the spec schema because the ABI changed, or vice-versa.
Goldens are append-only. A canonical-JSON or schema bump re-blesses the golden corpus in the same PR that bumps the constant.
Crate semver != ABI version. The cargo workspace version (
0.1.9) tracks the Rust crates; the C ABI tracksN4IO_ABI_VERSION. They move independently.