Emits
The source has a real leave signal, and cause makes the peer that DiscoverySourceConformanceSuite.causeArrival brings in leave.
The two must name the same peer: this suite's headline property compares the key departures() emits against the Tag.peerKey discoveries() emitted, and a fixture whose arrival and departure are different peers would fail it for a reason that has nothing to do with the source under test.
cause is called after DiscoverySourceConformanceSuite.causeArrival returns, and must rest only on state causeArrival itself established.
It must not rest on the arrival having been observed. It is tempting to think it can — departureKeyEqualsThePeerKeyThatWasDiscovered does hold a discoveries() collector open across the call — but departuresEmitsWithNoConcurrentDiscoveriesCollector deliberately collects nothing else, so there the discovered Tag never exists. A fixture that reaches for a handle only the arrival callback produces reds that property for a reason unrelated to the defect it tests, with a message blaming the source. A binding that needs a peer handle to withdraw one should have DiscoverySourceConformanceSuite.causeArrival capture it.