# replicate_pause: with a small inflight window (max 1 unacked message per peer), the leader pauses
# replication to a peer once a slot is outstanding. After electing node 1, isolate node 3 and propose
# a command: node 1 sends index 2 toward node 3 (dropped at the partition) consuming its one inflight
# slot, so node 1's Progress to node 3 shows `paused`. Recovering node 3 and ticking a heartbeat lets
# its ack through, freeing the slot, and replication resumes (node 3 catches up).
add-nodes 3 voters=(1,2,3) inflight=1
----
n1: created voters={1,2,3} term=0 commit=0 last=0
n2: created voters={1,2,3} term=0 commit=0 last=0
n3: created voters={1,2,3} term=0 commit=0 last=0

campaign 1
----
n1 candidate term=1
RequestVote term=1 last=0/0 prevote=false
RequestVote term=1 last=0/0 prevote=false

stabilize
----
> n2 recv RequestVote term=1 last=0/0 prevote=false
> n3 recv RequestVote term=1 last=0/0 prevote=false
> n2 ready
  VoteResponse term=1 prevote=false reject=false
> n3 ready
  VoteResponse term=1 prevote=false reject=false
> n1 recv VoteResponse term=1 prevote=false reject=false
> n1 recv VoteResponse term=1 prevote=false reject=false
> n1 ready
  Heartbeat term=1 commit=0
  Heartbeat term=1 commit=0
  AppendEntries term=1 prev=0/0 commit=0 entries=[1/1 empty]
  AppendEntries term=1 prev=0/0 commit=0 entries=[1/1 empty]
  n1 leader-changed term=1 lead=1
> n2 recv Heartbeat term=1 commit=0
> n3 recv Heartbeat term=1 commit=0
> n2 recv AppendEntries term=1 prev=0/0 commit=0 entries=[1/1 empty]
> n3 recv AppendEntries term=1 prev=0/0 commit=0 entries=[1/1 empty]
> n2 ready
  HeartbeatResponse term=1
  AppendResponse term=1 match=1
  n2 leader-changed term=1 lead=1
> n3 ready
  HeartbeatResponse term=1
  AppendResponse term=1 match=1
  n3 leader-changed term=1 lead=1
> n1 recv HeartbeatResponse term=1
> n1 recv AppendResponse term=1 match=1
> n1 recv HeartbeatResponse term=1
> n1 recv AppendResponse term=1 match=1
> n1 ready
  AppendEntries term=1 prev=0/0 commit=0 entries=[1/1 empty]
  AppendEntries term=1 prev=1/1 commit=1 entries=[]
  AppendEntries term=1 prev=0/0 commit=1 entries=[1/1 empty]
  AppendEntries term=1 prev=1/1 commit=1 entries=[]
> n2 recv AppendEntries term=1 prev=0/0 commit=0 entries=[1/1 empty]
> n2 recv AppendEntries term=1 prev=1/1 commit=1 entries=[]
> n3 recv AppendEntries term=1 prev=0/0 commit=1 entries=[1/1 empty]
> n3 recv AppendEntries term=1 prev=1/1 commit=1 entries=[]
> n2 ready
  AppendResponse term=1 match=1
  AppendResponse term=1 match=1
> n3 ready
  AppendResponse term=1 match=1
  AppendResponse term=1 match=1
> n1 recv AppendResponse term=1 match=1
> n1 recv AppendResponse term=1 match=1
> n1 recv AppendResponse term=1 match=1
> n1 recv AppendResponse term=1 match=1

isolate 3
----
n3 isolated

propose 1 a
----
AppendEntries term=1 prev=1/1 commit=1 entries=[1/2 normal 0x010000000000000061]

stabilize
----
> n2 recv AppendEntries term=1 prev=1/1 commit=1 entries=[1/2 normal 0x010000000000000061]
> n2 ready
  AppendResponse term=1 match=2
> n1 recv AppendResponse term=1 match=2
> n1 ready
  AppendEntries term=1 prev=1/2 commit=2 entries=[]
  n1 applied index=2
> n2 recv AppendEntries term=1 prev=1/2 commit=2 entries=[]
> n2 ready
  AppendResponse term=1 match=2
  n2 applied index=2
> n1 recv AppendResponse term=1 match=2

status 1
----
n2: match=2 next=3 replicate
n3: match=1 next=3 replicate paused

recover 3
----
n3 recovered

tick-heartbeat 1
----
Heartbeat term=1 commit=2
Heartbeat term=1 commit=1

stabilize
----
> n2 recv Heartbeat term=1 commit=2
> n3 recv Heartbeat term=1 commit=1
> n2 ready
  HeartbeatResponse term=1
> n3 ready
  HeartbeatResponse term=1
> n1 recv HeartbeatResponse term=1
> n1 recv HeartbeatResponse term=1
> n1 ready
  AppendEntries term=1 prev=1/2 commit=2 entries=[]
  AppendEntries term=1 prev=1/2 commit=2 entries=[]
> n2 recv AppendEntries term=1 prev=1/2 commit=2 entries=[]
> n3 recv AppendEntries term=1 prev=1/2 commit=2 entries=[]
> n2 ready
  AppendResponse term=1 match=2
> n3 ready
  AppendResponse term=1 reject hint=1/1
> n1 recv AppendResponse term=1 match=2
> n1 recv AppendResponse term=1 reject hint=1/1
> n1 ready
  AppendEntries term=1 prev=1/1 commit=2 entries=[1/2 normal 0x010000000000000061]
> n3 recv AppendEntries term=1 prev=1/1 commit=2 entries=[1/2 normal 0x010000000000000061]
> n3 ready
  AppendResponse term=1 match=2
  n3 applied index=2
> n1 recv AppendResponse term=1 match=2
> n1 ready
  AppendEntries term=1 prev=1/2 commit=2 entries=[]
> n3 recv AppendEntries term=1 prev=1/2 commit=2 entries=[]
> n3 ready
  AppendResponse term=1 match=2
> n1 recv AppendResponse term=1 match=2

status 1
----
n2: match=2 next=3 replicate
n3: match=2 next=3 replicate

