anchor.diff:  
   -type round()       :: {non_neg_integer(), non_neg_integer()}.
   -type session_id()  :: {round(), comm:mypid()}.
  +-type principal_id():: comm:mypid() | none.
   
   % @doc session contains only data of the sync request initiator thus rs_stats:regen_count represents only 
   %      number of regenerated db items on the initator
   -record(session, 
           { id                = ?required(session, id)            :: session_id(), 
  +          principal         = none                              :: principal_id(),
             rc_method         = ?required(session, rc_method)     :: rr_recon:method(), 
             rc_stats          = none                              :: rr_recon_stats:stats() | none,
             rs_stats          = none                              :: rr_resolve:stats() | none,
  
positive.code: -spec next_round(round()) -> round().
  next_round({R, _Fork}) -> {R + 1, 0}.
  
  -spec new_session(round(), comm:mypid(), rr_recon:method()) -> session().
  new_session(Round, Pid, RCMethod) ->
      #session{ id = {Round, Pid}, rc_method = RCMethod, ttl = get_session_ttl() }.
  
  -spec session_id_equal(session_id(), session_id()) -> boolean().
  session_id_equal({{R, _}, Pid}, {{R, _}, Pid}) -> true;
  
negative.code:     % API
      {request_sync, DestKey::random | ?RT:key()} |
      {request_sync, Method::rr_recon:method(), DestKey::random | ?RT:key()} |
      {request_sync, Method::rr_recon:method(), DestKey::random | ?RT:key(), Principal::principal_id()} |
      {request_resolve, rr_resolve:operation(), rr_resolve:options()} |
      {get_state, Sender::comm:mypid(), Key::state_field()} |
      % internal
  