C1 — one live version per third-party atom
Convergence · registry-level · gates/c1_atom_multi_version.rq ↗
This is a registry-level invariant: it reports that the registry as a whole is inconsistent, not that any one module is at fault. So its findings are not attributed to a module — where a per-module view is meaningful, a companion query supplies it as contested atoms.
Why this is an invariant#
This is the convergence invariant, and since Bazel 8.6.0/9.1.0 it is also the
COMPATIBILITY invariant. compatibility_level is now a no-op, so MVS will
silently upgrade a consumer across a breaking change and Bazel cannot object.
One version per atom means no incompatible co-selection is possible — which
makes this the only thing standing between a consumer and a silent break.
Compares MVS results across every module graph in the registry, so it catches transitive divergence a scan of declared pins would miss.
Findings#
30 findings. Each row is a counterexample — the columns are the query's own, in the order it selects them.
| atom | version_a | version_b |
|---|---|---|
apple_support | 1.24.2 | 2.2.0 |
aspect_bazel_lib | 2.22.5 | 2.8.1 |
aspect_rules_js | 2.1.3 | 3.1.2 |
bazel_lib | 3.0.0 | 3.2.2 |
bazel_skylib | 1.8.2 | 1.9.0 |
gawk | 5.3.2.bcr.1 | 5.3.2.bcr.3 |
gazelle | 0.30.0 | 0.36.0 |
gazelle | 0.30.0 | 0.44.0 |
gazelle | 0.30.0 | 0.51.0 |
gazelle | 0.36.0 | 0.44.0 |
gazelle | 0.36.0 | 0.51.0 |
gazelle | 0.44.0 | 0.51.0 |
helly25_bzl | 0.3.1 | 0.4.3 |
jq.bzl | 0.1.0 | 0.4.0 |
nlohmann_json | 3.12.0.bcr.1 | 3.6.1 |
package_metadata | 0.0.2 | 0.0.5 |
protobuf | 33.4 | 34.0.bcr.1 |
rules_go | 0.39.1 | 0.60.0 |
rules_jvm_external | 6.7 | 6.8 |
rules_nodejs | 6.3.0 | 6.7.3 |
rules_nodejs | 6.3.0 | 6.7.4 |
rules_nodejs | 6.7.3 | 6.7.4 |
rules_python | 1.7.0 | 2.0.1 |
rules_swift | 3.1.2 | 3.6.1 |
tar.bzl | 0.10.4 | 0.5.1 |
tar.bzl | 0.10.4 | 0.6.0 |
tar.bzl | 0.5.1 | 0.6.0 |
toolchains_llvm | 1.7.0 | 1.8.0 |
upb | 0.0.0-20220923-a547704 | 0.0.0-20230516-61a97ef |
yq.bzl | 0.1.1 | 0.3.4 |