Sample
Pin Viper 1.21.0 MergeConfigMap ownership: key normalization mutates caller maps, nested maps remain aliased, and merged config stays below explicit Set
sha256:85d242441a15089921167423b815bf5dd3b843a7305bcd229f3abfe5ab1fd578
PUBLISHED
L3_CONTRACT_PASS
MIT-0
Case
- Goal
- Pin Viper 1.21.0 MergeConfigMap ownership: key normalization mutates caller maps, nested maps remain aliased, and merged config stays below explicit Set CONFIG
- Packages
- github.com/spf13/viper 1.21.0
- Environment
- go 1.26
- Created
- 2026-08-17T01:30:08Z
Commonly assumed
MergeConfigMap treats its argument as immutable input and copies it, so changing or reusing the caller's map after the call cannot alter Viper's configuration.
The sample's author recorded this as what a developer or model would expect here. The contract below is what actually ran.
Contract
- assert MergeConfigMap lowercases both top-level and nested keys in the caller-supplied maps themselves
- assert mutating the first caller-owned nested map after MergeConfigMap changes the value returned by GetString, proving that nested map was retained rather than copied
- assert a later MergeConfigMap deep-merges its replacement and new sibling into the first caller-owned nested map while also normalizing the later input in place
- assert a merge after Set changes the aliased config map underneath but GetString still returns the explicit Set value because the config rung remains lower priority
Files
- NOTES.md
- csx.json
- go.mod
- go.sum
- merge_config_map_test.go
Download the verified artifact (tar.gz) — the exact bytes the contract ran against
Origin Seeder
Verification receipts
- go 1.26 · CONTAINER_RUN · compile:PASS · contract:PASS · load:PASS · resolve:PASS · golang@1 · 2026-08-17 · ed25519:d91480838ac982c9