# Broadcast-coalesce: three commands STAGED with `propose … defer=true` accumulate on the leader
# WITHOUT replicating; a single `broadcast-appends` then ships them as ONE AppendEntries per peer
# carrying entries [1/2, 1/3, 1/4] — instead of one message per propose. This is the coalesced batch
# path the driver pump exercises on every wake (a burst of submit_propose => one broadcast per peer).
add-nodes 3 voters=(1,2,3)
----
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

propose 1 alpha defer=true
----
ok (deferred)

propose 1 beta defer=true
----
ok (deferred)

propose 1 gamma defer=true
----
ok (deferred)

broadcast-appends 1
----
AppendEntries term=1 prev=1/1 commit=1 entries=[1/2 normal 0x0500000000000000616c706861, 1/3 normal 0x040000000000000062657461, 1/4 normal 0x050000000000000067616d6d61]
AppendEntries term=1 prev=1/1 commit=1 entries=[1/2 normal 0x0500000000000000616c706861, 1/3 normal 0x040000000000000062657461, 1/4 normal 0x050000000000000067616d6d61]

stabilize
----
> n2 recv AppendEntries term=1 prev=1/1 commit=1 entries=[1/2 normal 0x0500000000000000616c706861, 1/3 normal 0x040000000000000062657461, 1/4 normal 0x050000000000000067616d6d61]
> n3 recv AppendEntries term=1 prev=1/1 commit=1 entries=[1/2 normal 0x0500000000000000616c706861, 1/3 normal 0x040000000000000062657461, 1/4 normal 0x050000000000000067616d6d61]
> n2 ready
  AppendResponse term=1 match=4
> n3 ready
  AppendResponse term=1 match=4
> n1 recv AppendResponse term=1 match=4
> n1 recv AppendResponse term=1 match=4
> n1 ready
  AppendEntries term=1 prev=1/4 commit=4 entries=[]
  AppendEntries term=1 prev=1/4 commit=4 entries=[]
  n1 applied index=2
  n1 applied index=3
  n1 applied index=4
> n2 recv AppendEntries term=1 prev=1/4 commit=4 entries=[]
> n3 recv AppendEntries term=1 prev=1/4 commit=4 entries=[]
> n2 ready
  AppendResponse term=1 match=4
  n2 applied index=2
  n2 applied index=3
  n2 applied index=4
> n3 ready
  AppendResponse term=1 match=4
  n3 applied index=2
  n3 applied index=3
  n3 applied index=4
> n1 recv AppendResponse term=1 match=4
> n1 recv AppendResponse term=1 match=4

raft-log 1
----
n1: commit=4 applied=4 last=4
  1/1 empty
  1/2 normal 0x0500000000000000616c706861
  1/3 normal 0x040000000000000062657461
  1/4 normal 0x050000000000000067616d6d61

