This looks cool, but I have a few questions.
In the example you showed each client is creating a different relay list, then when it discovers a relay list created by the other client it merges it.
1. How dose this handle removing different relays in both clients. wouldn't the client just see the relay list from the other client and add the recently removed relay back into the list?
2. Due to how events are spread between relays, A lot of the more obscure relays have really old versions of my relay list. If the app happened to connect to a relay that had a 2+ day old version of my relay list would it attempt to merge it with the newest relay list, even though there are relays that I explicitly wanted to remove?
I like the idea of detecting and merging the relay list. but if it defaults to always merging whatever lists it finds. then I think this could make it difficult to remove relays.