PB runs the upstream conformance suites for protobuf, CEL, and protovalidate.
This page records the current results and the intentionally unsupported areas.
The runner scripts and how to fetch testdata are documented in the repository
(scripts/ and docs/cel-conformance.md).
Protocol Buffers
PB tracks expected failures in
test/fixtures/protobuf_conformance/failures.txt. The current edition 2023
baseline passes with no unexpected failures.
Intentional deviations:
EditionUnstablecases are expected failures: the current Buf/protobuf toolchain rejects the upstreamedition = "UNSTABLE"fixture, and the fetch script drops it after ejection, so PB cannot import that message schema.- Protobuf and JSON conformance cases both run. The two
JsonInput.FieldNameExtension.Validatorcases (proto2 and editions) are tracked as expected failures. - Text-format and JSPB conformance cases are intentionally skipped by the testee; PB does not implement those formats.
CEL
PB's CEL implementation runs the upstream simple conformance suite through
parser, checker, and evaluator harnesses. Intentionally unsupported areas are
tracked as named buckets in test/pb/cel/conformance_test.exs:
- The proto2 extension
proto.getExt/proto.hasExtmacro form (theproto2_extfixture) is out of scope. The select form —msg.`pkg.ext`andhas(msg.`pkg.ext`)— is supported. - Optimizer-shaped block tests are out of scope for now (they use test-only
macros such as
cel.block,cel.index,cel.iterVar). disable_checkeval cases require an unchecked/dynamic evaluation mode; PB evaluates checked CEL IR.- Legacy enum behavior and weak enum field typing are not targeted; PB uses stronger schema-backed enum typing.
- CEL
==/!=ongoogle.protobuf.Anyvalues should unpack both sides and compare the wrapped messages structurally; PB does not implement that unpack-on-equality step yet (4any_unpackeval cases). Packing and field access onAnyare otherwise supported.
Check-only conformance cases are used for checker coverage and are not evaluator failures.
Protovalidate
PB tracks expected failures in
test/fixtures/protovalidate_conformance/expected_failures.yaml. At the pinned
upstream bufbuild/protovalidate commit, the current baseline passes all cases:
PASS (failed: 0, skipped: 0, passed: 2872, total: 2872)