anchor.diff:  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()),
  
positive.code:     {ok, gen_statem:call(?MODULE, nodes)}.
  
  init([]) ->
      net_kernel:monitor_nodes(true),
      net_adm:world(),
      {ok, red, #data{}}.
  
negative.code: 
  yellow(info, {nodeup, Node}, Data) ->
      State = state(),
      {ok, JoinStatus} = join(State),
      cmkit:log({cmcluster, State, nodeup, Node, JoinStatus}),
      {next_state, State, Data};
  
  yellow(info, {nodedown, Node}, Data) ->
  