merge
Merges other's roster into this one.
Idempotent and commutative. After the merge, peers reflects the union of both rosters, with add-wins conflict resolution.
other's lattice is snapshotted under its lock and this one is updated under ours, as two sequential acquisitions rather than one nested pair. That ordering is the point: a concurrent a.merge(b) and b.merge(a) would deadlock if either held its own lock while taking the other's, and a mutual merge is the ordinary shape for two discovery nodes.