anchor.diff:  
   %% sent by snapshot.erl to update tx_tm on new local snapshot numbers
   on({update_snapno, SnapNo}, State) ->
  +    %% only in tx_tm not in rtm processes!
  +    ?ASSERT(tx_tm =:= state_get_role(State)),
       state_set_local_snapno(State, SnapNo);
   
   %% failure detector events
   on({crash, Pid, _Cookie}, State) ->
  +    %% only in tx_tm not in rtm processes!
  +    ?ASSERT(tx_tm =:= state_get_role(State)),
       on({crash, Pid}, State);
   on({crash, Pid}, State) ->
       ?TRACE_RTM_MGMT("tx_tm_rtm:on({crash,...}) of Pid ~p~n", [Pid]),
  +    %% only in tx_tm not in rtm processes!
  +    ?ASSERT(tx_tm =:= state_get_role(State)),
       handle_crash(Pid, State, on);
   %% on({crash, _Pid, _Cookie},
   %%    {_RTMs, _TableName, _Role, _LAcceptor, _GLLearner} = State) ->
  
positive.code: %% While initializing
  on_init({get_node_details_response, NodeDetails}, State) ->
      ?TRACE("tx_tm_rtm:on_init:get_node_details_response State; ~p~n", [_State]),
      IdSelf = node:id(node_details:get(NodeDetails, node)),
      %% provide ids for RTMs (sorted by increasing latency to them).
      %% first entry is the locally hosted replica of IdSelf
  
negative.code:     -> state() |
         {'$gen_component', [{on_handler, Handler::gen_component:handler()}], State::state()}.
  on_init({get_node_details}, State) ->
      %% only in tx_tm not in rtm processes!
      ?ASSERT(tx_tm =:= state_get_role(State)),
      util:wait_for(fun() -> comm:is_valid(comm:this()) end),
      comm:send_local(pid_groups:get_my(dht_node),
                      {get_node_details, comm:this(), [node]}),
  