2.2. Versioning
Every row carries a top-level integer schema_version. The current
version is 1.
The version increments on any breaking change. Breaking changes are:
-
Removing a required field.
-
Renaming a required field.
-
Changing the type of a required field.
-
Changing the meaning of an existing field (e.g. flipping units).
-
Adding a required field (older writers won't emit it, so older data fails the new reader).
-
Promoting an existing optional field to required (same reason).
-
Tightening the value domain of a field in a way that rejects previously-valid data (e.g. making
result_hashmandatory when it was optional).
The following changes are non-breaking (additive) and do NOT bump the version:
-
Adding a new optional field. Older readers ignore it; older writers still produce valid v1 rows.
-
Documenting a previously-tolerated behaviour (e.g. accepting a shorter
result_hash). -
Widening the value domain of an existing field (e.g. accepting more
statusstrings). -
Making a previously-required field optional, provided readers continue to handle the field's absence as if the prior emit-side default were present.
Bumps are integer (1 → 2 → 3). There is no semver minor;
consumers key on the integer only.