Skip to content

Release and versioning

Foundation follows the coordinated package-family release identity. The version is resolved from Git tags through hatch-vcs. A v<version> tag identifies the source revision shared with the coordinated package family. The fallback value in package metadata supports source archives without repository history; it does not define a separate Foundation release. Because Foundation contracts sit below every canonical package, release risk is determined by semantic and byte compatibility rather than the number of files changed.

Classify the change

Change Compatibility posture
new optional field with a stable default potentially additive; prove old readers and writers
tighter validation narrowing; identify previously valid values that now fail
canonical serialization change artifact-breaking unless byte compatibility is preserved
schema version increment requires an explicit load or migration decision
public export removal or move import-breaking; provide a supported migration route
dependency increase package-family event; confirm the kernel remains lightweight

Schema version and package version answer different questions. The package version identifies a published code build. A document schema version identifies the interpretation of persisted data. Do not increment one as a substitute for governing the other.

Release evidence

Before Foundation is included in a release candidate, run:

make test PACKAGE=bijux-proteomics-foundation
make quality PACKAGE=bijux-proteomics-foundation
make api PACKAGE=bijux-proteomics-foundation
make build PACKAGE=bijux-proteomics-foundation

The evidence set for a contract-changing release also includes canonical JSON fixtures, stable-digest comparisons, old-document load tests, migration tests, and representative producer/consumer round trips. API snapshots alone cannot detect byte or meaning drift.

flowchart TD
    change["shared contract change"]
    classify["additive · narrowing · breaking"]
    bytes["canonical bytes and digest proof"]
    migration["load or migration proof"]
    consumers["downstream package proof"]
    release["tag-derived distributions"]
    change --> classify --> bytes --> migration --> consumers --> release

Communicate consumer impact

Update packages/bijux-proteomics-foundation/CHANGELOG.md with the affected contract, the old and new interpretation, persisted-data impact, and the required consumer action. If only implementation changed, say which observable contract remained stable. Avoid describing a validator or schema change as routine maintenance.

The compatibility alias proteomics-foundation forwards the canonical public surface and must be verified when root exports change. The alias does not own a separate schema or release policy.

After publication, install the exact distribution into an empty environment, import the documented root contracts, serialize a representative document, and verify its digest and load result. Publication completes transport; the round-trip establishes that the released kernel still honors its data promise.