Versioning — four orthogonal axes
The preamble carries four independent uint32 version axes, each bumped on its own:
| Axis | Bumped when | Minor / major |
|---|---|---|
oxbin_format_version | Section model or encoding changes | Minor: additive section; major: breaking section/encoding |
core_ir_version | The CoreIR axiom-ADT variant set changes | Minor: additive variant/field; major: removal/breaking |
tier_ladder_version | The decidability ladder definition changes | Major only — tiers are semantic, not additive |
runtime_contract_version | The OxbinRuntime trait surface (Runtime contract) changes | Minor: additive method; major: breaking signature |
Robustness: producers strict, consumers liberal, per axis.
- A consumer accepts a future minor bump on any axis: load proceeds and unknown additive things degrade gracefully (an unrecognized non-
MANDATORYsection is skipped). - A consumer refuses a future major bump on any axis: load fails with
OE1202 IncompatibleVersionAxis(axis, want, got). - A consumer refuses any
MANDATORY-flagged section it does not recognize, regardless of axis:OE1203 UnknownMandatorySection(section_type).
Within one oxbin_format_version major, an artifact MAY carry two representations of the same logical content side by side (e.g. a DRedc-shaped projection-cache and a DBSP-shaped arrangement-section); each runtime picks the section it understands.
There is no kernel_api_version axis — the runtime contract is the OxbinRuntime trait (Runtime contract), versioned by runtime_contract_version. A backend’s internal schema version (e.g. the Postgres backend’s migrations, Storage layer) is not carried in the preamble; backends version their own schemas.