Bering separates product release versioning from public schema contract versioning.
The current product release is recorded in GitHub Releases and in that release's generated release-manifest.json asset. This file describes the versioning rules rather than serving as the mutable latest-release ledger.
The current schema publication line is schema-v1.1.0. Default emitted schema contracts are:
io.mb3r.bering.model@1.1.0io.mb3r.bering.snapshot@1.1.0
Previously published and still valid contracts are:
io.mb3r.bering.model@1.0.0io.mb3r.bering.snapshot@1.0.0
Do not infer a schema contract version from the product release tag.
- App releases use SemVer:
X.Y.Z - Git tags use a leading
v:vX.Y.Z VERSIONin local and CI entrypoints is always the bare SemVer value without the leadingv
App version changes govern the Bering CLI, the runtime service behavior, the install surface, release automation, and the Helm chart appVersion.
Examples:
- product release tag
v0.3.3identifies the Bering0.3.3release payload - generated
release-manifest.jsonrecords"app_version": "0.3.3"for that payload
Bering currently owns these public JSON schema contracts:
io.mb3r.bering.modelio.mb3r.bering.snapshot
Each schema contract has its own version, URI, and digest. Those values are independent from the app version and are recorded in:
- internal/schema/constants.go
dist/contracts-manifest.jsondist/release-manifest.json- the published artifact payloads themselves in
metadata.schema
Examples:
- Bering
v0.3.xemitsio.mb3r.bering.model@1.1.0 - Bering
v0.3.xemitsio.mb3r.bering.snapshot@1.1.0 bering validatestill accepts1.0.0artifacts without mutation or migrationschema-v1.1.0publishes the schema files to GitHub Pages; it is not a product release tag
Rules:
- Schema contract versions never change in place.
- Published contract URIs and digests are immutable.
- Breaking schema changes require a new contract major version.
- Non-breaking schema additions require a new contract minor version.
- Pure fixes that do not change contract meaning require a new contract patch version.
- This repository currently keeps the model and snapshot contracts on the same schema version line for publication and default emission.
OCI image tags are release labels, not separate version streams.
Every release publishes:
vX.Y.ZvX.Ysha-<full-commit-sha>
Rules:
vX.Y.Zis immutable for a given release payload.vX.Yis a moving convenience tag for the latest patch in that minor line.sha-<commit>is immutable and commit-addressable.
The Helm chart has a distinct chart version because Helm treats chart packaging as its own artifact contract.
Rules:
appVersionalways tracks the Bering app version.versiondefaults to the app version for normal product releases.- If chart packaging must change independently,
versionmay diverge, but that must be explicit and validated withALLOW_CHART_VERSION_MISMATCH=1.
A breaking change to any of these surfaces requires a new app major version:
- CLI commands, flags, defaults, or output behavior used by automation
- runtime HTTP or OTLP ingest behavior that consumers depend on
- install behavior for binaries, images, chart values, or deployment expectations
Breaking changes to public schema contracts are handled by the contract version itself, not silently by the app version alone.
Rules:
- A breaking schema change increments that contract's major version.
- Existing published contract versions remain valid and immutable.
- If Bering changes which schema version it emits by default, call that out explicitly in release notes and keep older published contract versions available to validators and pinned consumers.