feat(ha-prevote): route preVoteReply over real transport to the candidate tally (task 5.1)

peer_ctrl_msg_handler gains a CTRL_STANDBY + pre_vote_in_progress branch that
decodes an incoming preVoteReply (no term adoption) and feeds it to
pre_vote_reply_dispatch with the absolute peer index, paralleling the real-vote
reply path. Gives pre_vote_reply_dispatch its production caller (drops the used
attribute). STANDBY-no-round still drops; ELECTING/PRIMARY routing unchanged.
PreVote now drives rounds to a decision end-to-end over the wire.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Rongsong Shen 2026-06-16 06:47:08 +00:00
parent b765fc4705
commit 6d22f2eb1a
3 changed files with 193 additions and 5 deletions

View file

@ -65,7 +65,7 @@
- _Depends: 4.1_
- [ ] 5. Integration: transport wiring and end-to-end scenarios
- [ ] 5.1 Wire the PreVote reply opcode case to the candidate handler
- [x] 5.1 Wire the PreVote reply opcode case to the candidate handler
- Add the transport dispatch case for the incoming PreVote-reply opcode so it routes to the reply handler built in 4.1 (replacing the test hook in production), paralleling the real-vote reply dispatch case.
- Observable: a PreVote reply arriving over the real transport reaches the candidate's tally and can drive the round to a decision end-to-end (not just via the test hook).
- _Requirements: 7.1_