anchor.diff:            {ChangeReason::rm_loop:reason(), state()}.
   new_pred(State, NewPred) ->
       % if we do not want to trust notify_new_pred messages to provide an alive node, use this instead:
  -%%     trigger_update(OldNeighborhood, [], nodelist:new_neighborhood(nodelist:node(OldNeighborhood), NewPred)),
  +%%     trigger_update(OldNeighborhood, [], [NewPred]),
       % we trust NewPred to be alive -> integrate node:
       {{unknown}, update_nodes(State, [NewPred], [], null)}.
   
  
positive.code: %%            neighborhood may contain updated node IDs though!
  -spec trigger_update(OldNeighborhood::nodelist:neighborhood(),
                       RndView::[node:node_type()],
                       OtherNeighborhood::nodelist:neighborhood())
          -> NewNeighborhood::nodelist:neighborhood().
  trigger_update(OldNeighborhood, MyRndView, OtherNeighborhood) ->
      % update node ids with information from the other node's neighborhood
      OldNeighborhood2 =
          nodelist:update_ids(OldNeighborhood,
                              nodelist:to_list(OtherNeighborhood)),
      PredL = get_pred_list_length(),
      SuccL = get_succ_list_length(),
      NewNeighborhood1 =
          nodelist:add_nodes(OldNeighborhood2, MyRndView, PredL, SuccL),
      NewNeighborhood2 =
          nodelist:merge(NewNeighborhood1, OtherNeighborhood, PredL, SuccL),
  
      OldView = nodelist:to_list(OldNeighborhood2),
      NewView = nodelist:to_list(NewNeighborhood2),
  
negative.code:             true  -> RandViewSize + 1;
              false -> RandViewSize
          end,
      NewNeighborhood = trigger_update(Neighborhood, [], NewCache),
      {{node_discovery}, {NewNeighborhood, RandViewSizeNew, NewCache, Churn}}.
  
  -spec trigger_action(State::state())
  