The new message explicitly supplies count zero. A binary relay that does not know count retains its unknown explicit presence; a relay that knows count with implicit presence forwards the default zero without its presence. Both final values are zero, but only one remains explicitly supplied.

Protobuf evolution preserves meaning only within a defined contract

A gRPC rollout can leave old producers, new consumers, and intermediate services running together. Protobuf helps them exchange binary messages by identifying fields with numbers and wire types. That tolerance is narrower than application compatibility: a message can parse successfully while a consumer misunderstands its values, ignores a new instruction, or loses the distinction between absent and explicitly zero. ...

February 26, 2028 · 5 min · XB Field Notes
The article’s new message contains id and note. An old binary relay can retain the unknown note; converting the old message object through JSON emits known fields and drops note. The final parser can succeed after that loss.

Protobuf compatibility changes at a JSON boundary

A schema change can be safe for binary messages and unsafe for a JSON gateway handling the same service. Protobuf’s binary format identifies fields by number; ProtoJSON normally exposes their names. Review compatibility as a matrix of producers, consumers, and transformations. A successful compile or one pair of compatible endpoints does not prove that every relay preserves the information they exchange. ...

November 19, 2027 · 5 min · XB Field Notes