Raft 11 verification 2026-09-19 Working directory: examples/distributed-systems GOCACHE=/private/tmp/ds-go-cache Evidence level: local deterministic in-process model; no network/disk fault injection. $ go version go version go1.27.0 darwin/arm64 exit=0 expected=0 $ uname -sm Darwin arm64 exit=0 expected=0 $ sw_vers -productVersion 27.0 exit=0 expected=0 $ go run -race ./raft11 PASS split schedules=27 one-leader=14 no-leader=13 PASS restart same-term second vote refused PASS stale old-round=ignored duplicate=deduplicated higher-term=3 role=follower PASS partition leaders=1@term1,2@term2 heal=old-leader-follower PASS log-order cases=6 higher-term-denial=persisted PASS persistence pending-effects=withheld wrong-ack=rejected crash-cuts=2 PASS mutation detected=double-vote,two-leaders exit=0 expected=0 $ go vet ./raft ./raft11 exit=0 expected=0 $ go run -race ./raft11 -h Usage of raft11: -mutate-drop-vote run deliberately broken storage; detected violation exits 1 -scenario string all, split, restart, stale, partition, log, persistence (default "all") -trace print deterministic event history exit=0 expected=0 $ go run -race ./raft11 -scenario bogus FAIL: unknown scenario "bogus" exit status 1 exit=1 expected=1 $ go run -race ./raft11 -scenario restart -mutate-drop-vote -trace TRACE restart node=1 term=0 vote=0 TRACE restart node=2 term=0 vote=0 TRACE restart node=3 term=0 vote=0 TRACE timeout node=1 TRACE persist node=1 term=1 vote=1 storedVote=1 TRACE vote node=1 candidate=1 term=1 voters=[] TRACE timeout node=2 TRACE persist node=2 term=1 vote=2 storedVote=2 TRACE vote node=2 candidate=2 term=1 voters=[] TRACE deliver type=1 1->3 term=1 campaign=1 grant=false TRACE persist node=3 term=1 vote=1 storedVote=0 TRACE vote node=3 candidate=1 term=1 voters=[] TRACE deliver type=2 3->1 term=1 campaign=1 grant=true TRACE elected node=1 candidate=1 term=1 voters=[1 3] TRACE restart node=3 term=1 vote=0 TRACE deliver type=1 2->3 term=1 campaign=1 grant=false TRACE persist node=3 term=1 vote=2 storedVote=0 TRACE vote node=3 candidate=2 term=1 voters=[] TRACE deliver type=2 3->2 term=1 campaign=1 grant=true TRACE elected node=2 candidate=2 term=1 voters=[2 3] FAIL: history rejected: double-vote term=1 voter=3 candidates=1,2; two-leaders term=1 candidates=1,2 exit status 1 exit=1 expected=1 $ go run -race ./raft11 -scenario stale -trace TRACE restart node=1 term=0 vote=0 TRACE restart node=2 term=0 vote=0 TRACE restart node=3 term=0 vote=0 TRACE restart node=4 term=0 vote=0 TRACE restart node=5 term=0 vote=0 TRACE timeout node=1 TRACE persist node=1 term=1 vote=1 storedVote=1 TRACE vote node=1 candidate=1 term=1 voters=[] TRACE deliver type=1 1->2 term=1 campaign=1 grant=false TRACE persist node=2 term=1 vote=1 storedVote=1 TRACE vote node=2 candidate=1 term=1 voters=[] TRACE deliver type=1 1->3 term=1 campaign=1 grant=false TRACE persist node=3 term=1 vote=1 storedVote=1 TRACE vote node=3 candidate=1 term=1 voters=[] TRACE timeout node=1 TRACE persist node=1 term=2 vote=1 storedVote=1 TRACE vote node=1 candidate=1 term=2 voters=[] TRACE deliver type=1 1->2 term=2 campaign=2 grant=false TRACE persist node=2 term=2 vote=1 storedVote=1 TRACE vote node=2 candidate=1 term=2 voters=[] TRACE deliver type=2 2->1 term=2 campaign=2 grant=true TRACE deliver type=2 2->1 term=2 campaign=2 grant=true TRACE deliver type=2 2->1 term=1 campaign=1 grant=true TRACE deliver type=2 3->1 term=1 campaign=1 grant=true TRACE timeout node=3 TRACE persist node=3 term=2 vote=3 storedVote=3 TRACE vote node=3 candidate=3 term=2 voters=[] TRACE timeout node=3 TRACE persist node=3 term=3 vote=3 storedVote=3 TRACE vote node=3 candidate=3 term=3 voters=[] TRACE deliver type=1 1->3 term=2 campaign=2 grant=false TRACE deliver type=2 3->1 term=3 campaign=2 grant=false TRACE persist node=1 term=3 vote=0 storedVote=0 PASS stale old-round=ignored duplicate=deduplicated higher-term=3 role=follower exit=0 expected=0 Earlier setup failure: default Go build cache path under ~/Library/Caches was denied by sandbox. Retried using writable GOCACHE above. Initial compile error assigning to a map value struct field was fixed before successful runs. Persistence cuts actually run: before durable image update, and after image update but before completion/releasing responses. Success-after-restart additionally covered by restart schedule. No actual fsync, process kill, wall-clock timers, KV, AppendEntries, heartbeat, random timeout distribution, or production etcd execution.