anchor.diff:  %% - If only the preds/succs changed, adapt the old routing table
   -spec update(OldRT::rt(), OldNeighbors::nodelist:neighborhood(),
       NewNeighbors::nodelist:neighborhood()) -> {trigger_rebuild, rt()} | {ok, rt()}.
  +update(OldRT, Neighbors, Neighbors) -> {ok, OldRT};
   update(OldRT, OldNeighbors, NewNeighbors) ->
       case nodelist:node(OldNeighbors) =:= nodelist:node(NewNeighbors) of
           true -> % source node didn't change
               % update the sticky nodes: delete old nodes and add new nodes
  -            OldStickyNodes = get_node_neighbors(OldNeighbors),
  -            NewRT = remove_and_ping_entries(OldStickyNodes, NewNeighbors, OldRT),
  +            NewRT = remove_and_ping_entries(NewNeighbors, OldRT),
               
               case NewRT of % only trigger a rebuild if something changed
                   OldRT -> 
  
positive.code: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
  %% userdevguide-begin rt_frtchord:empty
  %% @doc Creates an "empty" routing table containing the successor.
  -spec empty(nodelist:neighborhood()) -> rt().
  empty(Neighbors) ->
      RT = add_source_entry(nodelist:node(Neighbors), #rt_t{}),
      Preds = nodelist:preds(Neighbors),
      Succs = nodelist:succs(Neighbors),
  
      % coyping the preds and succs silences dialyzer
      StickyPreds = [N || N <- Preds],
      StickySuccs = [N || N <- Succs],
  
      % insert preds and succs as sticky entries to the routing table
      % TODO We should always be able to add sticky nodes -> don't check the RT size
      TmpRT = lists:foldl(fun add_sticky_entry/2, RT, StickyPreds),
      lists:foldl(fun add_sticky_entry/2, TmpRT, StickySuccs)
      .
  %% userdevguide-end rt_frtchord:empty
  
  
negative.code: %% This function removes sticky nodes from the RT which aren't in the neighborhood
  %% anymore. Additionally, it pings all entries to make sure that the IDs of the entries
  %% haven't changed.
  -spec remove_and_ping_entries(NewNeighbors :: nodelist:neighborhood(),
                                RT :: rt()) -> rt().
  remove_and_ping_entries(NewNeighbors, RT) ->
      OldStickyNodes = sets:from_list(lists:map(fun rt_entry_node/1,
              get_sticky_entries(RT))),
      NewStickyNodes = get_node_neighbors(NewNeighbors),
      DeadStickyNodes = sets:subtract(OldStickyNodes, NewStickyNodes),
      DeadStickyNodesIds = util:sets_map(fun node:id/1, DeadStickyNodes),
      ToBeAddedNodes = sets:subtract(NewStickyNodes, OldStickyNodes),
      % filter dead nodes and add sticky nodes
      FilteredRT = lists:foldl(fun entry_delete/2, RT, DeadStickyNodesIds),
      NewRT = sets:fold(fun add_sticky_entry/2, FilteredRT, ToBeAddedNodes),
      %% TODO ping entries
      NewRT.
  
  