Upgrading
Before 1.0, a minor release (0.6 → 0.7) may change what the tools decide, not
only their Rust API: a check that learns to catch a defect fails a session that
passed, and a check that stops failing conforming sessions passes one that failed.
STABILITY.md
says what counts as breaking. Every such change is in the release’s changelog entry,
which since 0.5.0 opens with a table of each one and its migration (earlier entries
state them in their opening paragraphs).
Before you upgrade
-
Read the release’s table. Each row names the surface (a requirement ID, a report format, a flag), the change, and what to do: Unreleased (on
main), 0.6.0, 0.5.0. -
Judge your recordings with both versions and compare by requirement ID, not by totals: rows are added and moved between checked and excluded between releases, so the totals move even when nothing about your session’s conformance did.
mcp-trace-validator validate --format json session.jsonl \ | jq -r '.requirements[] | select(.outcome == "fail" or .outcome == "warn") | .id' \ | sort > findings-new.txtThe same command with the old binary gives
findings-old.txt;diffthe two. A row in one and not the other is a verdict change the table explains. The report’swire_schemamember (onmainsince0.6.0) is judged beside the rows; compare itsoutcometoo. -
Expect SARIF alerts to move once where the table says a fingerprint changed; an alert whose finding is unchanged keeps its fingerprint.
Pin the version you gate on
A CI gate should change its verdicts when you upgrade it, not when a release happens. Pin it:
cargo install mcp-trace-validator --version 0.6.0 --locked, orcargo binstall [email protected]for the attested prebuilt binary;- the GitHub Action at a tag or commit (
uses: tomtom215/[email protected]), or withversion: 0.6.0to download that release’s prebuilt binaries rather than build from the action’s source; - the container image by version or, stricter, by digest
(
ghcr.io/tomtom215/mcp-conformance:X.Y.Z@sha256:…), for releases after0.6.0; mcp-trace-validator = "=0.6.0"for the library.
mcp-trace-validator --version names the build that judged a report; on main
since 0.6.0 it also names the protocol revisions that build judges.
Library users
The Rust API follows the same release rule: a minor release may break it, the
changelog’s table names every break, and cargo-semver-checks compares each release
with its predecessor on crates.io before it is published. A deprecated item stays for
at least one minor release, deprecated with its replacement named, before it is
removed. Types that will grow — reports, findings, outcomes, options — are
#[non_exhaustive], so a new field or variant is not a break: match them with a
wildcard arm, and set options through their builder methods
(HumanOptions::default().all(false)) rather than struct literals.