Do you mean node 3 and 4 were not able to win a pre-vote, because a pre-vote request doesn't change 1's term, and the response from 1 contains 1's term?
Our implementation uses the pre-vote's request term in response:
https://github.com/scylladb/scylla/blob/master/raft/fsm.cc#L794 // The term in the original message and current local term are the
// same in the case of regular votes, but different for pre-votes.
//
// When responding to {Pre,}Vote messages we include the term
// from the message, not the local term. To see why, consider the
// case where a single node was previously partitioned away and
// its local term is now out of date. If we include the local term
// (recall that for pre-votes we don't update the local term), the
// (pre-)campaigning node on the other end will proceed to ignore
// the message (it ignores all out of date messages).
send_to(from, vote_reply{request.current_term, true, request.is_prevote});