anchor.diff:  
   yellow(info, {nodeup, Node}, Data) ->
       State = state(),
  -    cmkit:log({cmcluster, State, nodeup, Node}),
  +    {ok, JoinStatus} = join(State),
  +    cmkit:log({cmcluster, State, nodeup, Node, JoinStatus}),
       {next_state, State, Data};
   
   yellow(info, {nodedown, Node}, Data) ->
  
positive.code:     {ok, gen_statem:call(?MODULE, nodes)}.
  
  init([]) ->
      net_kernel:monitor_nodes(true),
      net_adm:world(),
      {ok, red, #data{}}.
  
negative.code: green({call, From}, nodes, Data) ->
      Nodes = info(nodes, nothing),
      {keep_state, Data, {reply, From, Nodes}}.
  
  
  join(green) ->
      LocalMembers = pg2:get_local_members(cmcluster),
      case lists:is_member(self(), LocalMembers) of
          true -> 
              {ok, already_in_cluster};
          false ->
              pg2:join(cmcluster, self()),
              {ok, joined_cluster}
      end;
  
  join(_) -> 
      {ok, waiting_to_join_cluster}.
  
  expected_nodes() ->
      Sname = erlang:binary_to_list(cmkit:sname()),
  