anchor.diff:      end.
   
   
  -%% handle join activities, return {ok,NewState}
  +%% @doc handle join activities, return {ok,NewState}
  +-spec handle_join(join_type(), [mem_node()], ping_node(), #mem{}) ->
  +             {ok, #mem{}}.
  +
   handle_join(init, ExtNodes, nil, State) ->
       {_,Nodes,_} = lists:unzip3(ExtNodes),
       ping_all_yall(Nodes),
  
positive.code: -type epoch() :: float().
  -type clock() :: {node(), epoch()}.
  -type vector_clock() :: [clock()].
  
  %%====================================================================
  %% API
  
negative.code:                          "for ping node: ~p", [JoinType, PingNode]),
      {error, unknown_join_type}.
  
  %% @doc common operations for all join types
  int_join(ExtNodes, #mem{nodes=Nodes, clock=Clock} = State) ->
      NewNodes = lists:foldl(fun({Pos, N, _Options}=New, AccIn) ->
          check_pos(Pos, N, Nodes),
  