anchor.diff:                  ets           :: ets:tid(),
                   fact          :: fact(),
                   awaiting      :: riak_ensemble_msg:msg_state(),
  +                preliminary   :: {peer_id(), epoch()},
  +                abandoned     :: {epoch(), seq()},
                   timer         :: timer(),
                   ready = false :: boolean(),
                   members       :: [peer_id()],
  
positive.code: -spec prepare(_, fsm_from(), state()) -> {next_state, prepare, state()}.
  prepare(Msg, From, State) ->
      common(Msg, From, State, prepare).
  
  -spec leading(_, state()) -> next_state().
  leading(init, State=#state{id=_Id}) ->
  
negative.code:     _ = cancel_timer(State),
      reset_workers(State),
      ok.
  
  abandon(State) ->
      Abandoned = {epoch(State), seq(State)},
      State2 = set_leader(undefined, State#state{abandoned=Abandoned}),
      probe(init, State2).
  
  %%%===================================================================
  
  