The `islice` can cause some unexpected behaviour.

For example: when the neighbourhood has `[A,B,C,D]` as verified candidates, `node_count=3`, and `message.destination.candidates=[B,C,D]`.  It is possible that `yield_verified_candidates` returns `[B,C,D]` (since it returns candidates in random order).  This would result the message being sent to only `[B,C,D]` while you intended it to go to `[A,B,C,D]`.

Perhaps this should also be covered in a unit test (if it isn't already).  When you are in the office I can show you a trick to tailor the behaviour of a unit test to 'trigger' the above corner case.