propose
Proposes action for Raft replication and returns after a quorum commits it.
Applies action optimistically to speculativeState before suspending, so the UI reflects the move immediately. If the underlying TurnSequencer.propose fails, the speculative apply is rolled back — speculativeState reverts to the authoritative snapshot plus any remaining pending inputs.
Throws
if the leader steps down while awaiting commit. The action is removed from the pending buffer and speculative state is rolled back. The outcome of the underlying proposal is unknown — the caller must treat it as lost and retry with an idempotent action or deduplication key.
Proposes action with a caller-pinned requestId for cross-crash exactly-once, then returns after a quorum commits it (same semantics as propose).
Mirrors TurnSequencer.propose(action, requestId): replay the same requestId on a post-crash retry and the consumer's ClientSessionTable (and this sequencer's internal table) will skip the duplicate. requestId must be a per-client monotonic serial the caller owns — do not pass a log index or a random value.
Throws
if the leader steps down while awaiting commit. The speculative apply is rolled back. The caller may retry with the same requestId.