Read Linearizability
A naive Raft read (just returning state machine value) is unsafe: a newly-elected leader's state machine might be stale before it commits a no-op entry.
Linearizable reads require:
- Leader must have committed a no-op entry in the current term (confirms it's the real leader)
- Leader checks it hasn't been superseded before responding (ReadIndex or lease-based)
etcd uses ReadIndex: leader records current commit index, waits for heartbeat confirming leadership, then returns the read once state machine catches up to that index.