anchor.diff:      % P1E_p1_real = 1 - (1 - P1E_p1_bf_I_real) * (1 - P1E_p1_bf_NI_real),
       P1E_p1_real = P1E_p1_bf_I_real + P1E_p1_bf_NI_real - P1E_p1_bf_I_real * P1E_p1_bf_NI_real,
       % NOTE: use left-over P1E after phase 1 (bloom) for phase 2 (trivial RC)
  -    P1E_p2 = calc_n_subparts_p1e(1, P1E, (1 - P1E_p1_real)),
  +    P1E_p2 = calc_n_subparts_p1e(1, P1E, P1E_p1_real),
       ?ALG_DEBUG("I:~.0p, P1E_bf=~p~n"
                  "  Bloom1: m=~B k=~B BFCount=~B Checks=~B P1E_bf1=~p~n"
                  "  Bloom2: m=~B k=~B BFCount=~B Checks=~B P1E_bf2=~p~n"
  
positive.code:     % * at non-initiator: inner(NI)-leaf(I)
      % note: 1 trivial proc may contain more than 1 leaf!
      {<<>>, <<>>, ToSend, ToResolve, ResolveNonEmpty, _TrivialProcsRest,
       _ThisP0E_upper_bound, ThisP1E_real} =
          lists:foldl(
            fun({MyMaxItemsCount, MyKVItems},
                {HashesKAcc, HashesVAcc, ToSend, ToResolve, ResolveNonEmpty,
                 TProcsAcc, P0EIn, P1EIn_real}) ->
                    {NHashesKAcc, NHashesVAcc, OBucketTree, _OrigDBChunkLen,
                     SigSize, VSize, ThisP0E, ThisP1E_real} =
                        merkle_resolve_retrieve_leaf_hashes(
                          HashesKAcc, HashesVAcc, P1EAllLeaves, TProcsAcc,
                          P0EIn, MyMaxItemsCount, P1EIn_real, length(MyKVItems),
                          BucketSizeBits, ExpDelta),
                    % calc diff (trivial sync)
                    ?DBG_ASSERT(MyKVItems =/= []),
  
negative.code:                  [?MODULE, pid_groups:my_groupname(), self(),
                    EffectiveP1ETotal_I, EffectiveP1ETotal_L]),
           ok),
      % TODO: can we get a higher sensitivity with floats near 1?
      NextP1E = 1 - PrevP0E * math:pow(1 - EffectiveP1ETotal_I, HashCmpI)
                    * math:pow(1 - EffectiveP1ETotal_L, HashCmpL),
      NStats = rr_recon_stats:set([{p1e_phase1, NextP1E}], NStats0),
      NewState = State#rr_recon_state{struct = RTree, merkle_sync = SyncNew},
      ?ALG_DEBUG("merkle (I) - CurrentNodes: ~B~n  P1E: ~g -> ~g",
                 [length(RTree), PrevP1E, rr_recon_stats:get(p1e_phase1, NStats)]),
  
      if RTree =:= [] ->
             % start a (parallel) resolve (if items to resolve)
             merkle_resolve_leaves_send(NewState, NextP1E);
         true ->
             ?DBG_ASSERT(NextLvlNodesAct >= 0),
             % calculate the remaining trees' failure prob based on the already
             % used failure prob
             P1ETotal_I_2 = calc_n_subparts_p1e(NextLvlNodesAct, P1EPhaseX, NextP1E),
             {_P1E_I, _P1E_L, NextSigSizeI, NextSigSizeL, EffectiveP1E_I, EffectiveP1E_L} =
                 merkle_next_signature_sizes(Params, P1ETotal_I_2, MyMaxItemsCount,
                                             OtherMaxItemsCount),
  