semver-discipline¶
Universal Tester tracks three independent SemVer streams and they must never be conflated or merged into one number.
| Version | Source of truth | Bumps on |
|---|---|---|
| Cow Tester production software | host-api/examples/cow-board-test.py → COW_TESTER_VERSION |
any production behavior change |
| UT002 firmware | universal-tester-002-firmware/firmware_version.h (+ CHANGELOG) |
any firmware/protocol/behavior change |
| Fixture profile | that fixture's ProductionFixtureProfile |
fixture workflow, limits, identity, contract |
PATCH = fix/refactor/logging. MINOR = new test, instrument, printer, measurement, report, workflow, config field. MAJOR = incompatible workflow, data/schema contract, hardware contract, serial-number rule, or safety policy.
Never decrement or reuse a released version. When it's ambiguous, take the larger increment — the cost of an over-bump is nothing, the cost of two different builds claiming the same version in an append-only production log is an unresolvable audit.
Every test result and equipment-usage summary records all three.
See universal-tester.