Sample
Merge, clone, equality, and reset semantics for Protocol Buffers messages across presence types, repeated slices, maps, and floating-point values
sha256:45bb69bf251a6f037374e5373c90a8b7ada4e709ed3c0558a13a7f718836d1ed
PUBLISHED
L3_CONTRACT_PASS
MIT-0
Execution evidence
Declared environment and signed verification runs are separated so you can see exactly what this sample proves.
Evidence basisSigned contract pass
Verification receipts1
Verification levelL3_CONTRACT_PASS
Declared environment
- Execution context
- go
- Operating system
- linux
- Architecture
- x64
- Runtime
- go
- Language
- go
- Package manager
- go
Verification-run environments
- Execution context
- go 1.26
- Operating system
- linux alpine · musl
- Architecture
- x64
- Runtime
- go 1.26
- Language
- go
- Package manager
- go
- Execution
- container · docker
CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · golang@1 · 2026-08-17
Case
- Goal
- Merge, clone, equality, and reset semantics for Protocol Buffers messages across presence types, repeated slices, maps, and floating-point values HOW
- Packages
-
google.golang.org/protobuf v1.36.12
- Environment
- go
- Created
- 2026-08-17T19:33:38Z
Commonly assumed
proto.Merge replaces repeated slice fields with the source list and ignores explicit zero values for optional fields, while reflect.DeepEqual can safely compare protobuf messages.
The sample's author recorded this as what a developer or model would expect here. The contract below is what actually ran.
Contract
- proto.Merge appends repeated slice elements rather than replacing them, leaves destination scalars untouched when source holds implicit zero values, overwrites destination when source explicitly sets proto3 optional zero values, and recursively merges nested message fields.
- proto.Merge replaces matching map entry values with the source message rather than recursively merging nested submessages within the map.
- proto.Clone creates an isolated deep copy where mutating cloned slices, maps, or nested messages does not affect the original message, and proto.Clone(nil) returns nil.
- proto.Equal correctly evaluates semantic message equality including IEEE 754 NaN == NaN for float/double fields, whereas reflect.DeepEqual fails on NaN and internal message state.
- protoreflect.Message.Has distinguishes between implicit-presence scalars (reporting false for default zero) and proto3 optional scalars (reporting true even when explicitly set to zero).
- proto.Reset clears all message fields in-place back to their default unpopulated state without reallocating the message struct.
Files
- NOTES.md
- csx.json
- go.mod
- go.sum
- proto_test.go
Download the source artifact (tar.gz)
Origin Seeder
csx-seed
Verification receipts
- go 1.26 · linux alpine/x64 · docker · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · golang@1 · 2026-08-17 · ed25519:d91480838ac982c9