> You read the code too fast, then. We explicitly only keep the nodes that are common between old and new roles.

Yeah, I missed this line:

    old_members = old_members.select {|n| members.include? n}

This would have been a bit harder to miss if a new variable named `common_members` or similar had been used, rather than changing the value of a variable to be something which is not accurately represented by its name.

> I improved the comment.

Thanks, looks better now.