@@ -949,10 +949,13 @@ unify {name "l" a 1} {name "r" c 3.0} -- {a: 1, c: 3.0, name: "r"}
949949unify {a 1} {a 2} -- {a: 2}
950950```
951951
952−Both arguments must have **statically-known, closed record shapes** — passing a
953−value whose record type has an open (unresolved) row is a type error. Relation
954−rows work: `map (\row -> unify row {active 1}) (full *items)` merges defaults
955−into every row.
952+Arguments may be closed records **or open rows**. Merging into an open row — a
953+lambda parameter or relation row whose full shape isn't pinned at the call
954+site — overlays the right's fields and constrains the base to contain them, so
955+`case r.id == x of Bool.True {} -> unify r {balance y}; Bool.False {} -> r`
956+type-checks (the merged result and the bare row agree on the other fields).
957+Relation rows work: `map (\row -> unify row {active 1}) (full *items)` merges
958+defaults into every row. A genuinely non-record argument is a type error.
956959
957960`unify` is shape-dependent — its result type is a function of the two argument
958961field names, computed by the type checker at the call site rather than by a