I think this needs to be the whole method. modifying candidates will not work because that is not persisted between runs.

Think of it this way: readLast is called BEFORE we ever call writeLast, so the candidates will always be empty I think.