anchor.diff:  %%==============================================================================
   %% @author Gavin M. Roy <gavinr@aweber.com>
   %% @copyright 2015-2016 AWeber Communications
  -%% @doc
  -%% Startup happens in 3 stages:
  -%% 1) Acquiring startup lock, choosing best node to cluster with (if
  -%%    any) and doing clustering.
  -%% 2) Register broker in backend after it's ready to serve client
  +%% @copyright 2017 Pivotal Software, Inc
  +%% @doc
  +%%
  +%% Startup and cluster formation uses 3 boot steps executed in order:
  +%%
  +%% 1) Acquiring a startup lock, choosing the best node to cluster with (if
  +%%    any) and clustering.
  +%% 2) Registering current node with the backend after it's ready to serve client
   %%    requests.
  -%% 3) Release startup lock. So this stage can run independently even
  -%%    if previous phase failed somewhere in the middle. It matters
  -%%    when we are running in `ignore` failure mode, as we don't want
  -%%    to hold the lock for infinite amount of time.
  +%% 3) Releasing the startup lock. This step is executed even
  +%%    if an earlier phase errored  as we don't want
  +%%    to hold the lock forever.
   %% @end
   %%==============================================================================
   -module(autocluster).
  
positive.code: %% require some health checker/TTL updater, it also starts those processes.
  %% @end
  %%--------------------------------------------------------------------
  -spec register_in_backend(#startup_state{}) -> {ok, #startup_state{}} | {error, iolist()}.
  register_in_backend(State) ->
      case backend_register(State) of
          ok ->
              {ok, State};
  
negative.code: 
  %%--------------------------------------------------------------------
  %% @doc
  %% At this point we are ready to serve client requests, so it's a good time to
  %% register ourselves with the backend.
  %%
  %% TODO: how should it work when we failed to join to the cluster
  %% but the failure mode is `ignore`? Currently it tries to register this
  %% node even in a case of an error, but maybe we should skip
  %% registration step instead?
  %%
  %% @end
  %%--------------------------------------------------------------------
  boot_step_register() ->
      autocluster_log:info("Running registeration step"),
      run_steps([fun autocluster:register_with_backend/1]).
  
  %%--------------------------------------------------------------------
  %% @doc
  