When your code incrementally merges or inherits structured data (JSON payloads, rule trees, settings), correctness should be enforced by (a) semantic, lossless reconciliation and (b) deep-copying every nested mutable component.
Apply this standard: 1) For delta/stream/state reconciliation
json.Decoder.UseNumber()), so equality checks don’t collapse distinct values.Example (Go sketch):
func reconcileDoneArguments(forwarded, done string) (string, error) {
// If done is empty, never overwrite accumulated deltas.
if done == "" { return "", nil }
// Prefer semantic equivalence over string equality.
eq, err := semanticJSONEqual(forwarded, done)
if err != nil { return "", err }
if eq { return "", nil } // nothing missing
// Otherwise, forward only missing suffix when done starts with forwarded.
if forwarded != "" && strings.HasPrefix(done, forwarded) {
return strings.TrimPrefix(done, forwarded), nil
}
return "", fmt.Errorf("divergent arguments")
}
func semanticJSONEqual(a, b string) (bool, error) {
var va, vb any
da := json.NewDecoder(strings.NewReader(a)); da.UseNumber()
db := json.NewDecoder(strings.NewReader(b)); db.UseNumber()
if err := da.Decode(&va); err != nil { return false, err }
if err := db.Decode(&vb); err != nil { return false, err }
return reflect.DeepEqual(va, vb), nil
}
2) For inheritance/transformations via cloning
When conditions and any nested condition nodes), not only the top-level struct.Checklist before merging PRs: