anchor.diff:                        util:tc(fun() ->
                                         compress_kv_list_p1e(
                                           NewKVList, FullDiffSize,
  -                                        OtherItemCount, ?SHASH_B * get_p1e())
  +                                        OtherItemCount, ?SHASH_B * P1E)
                                 end),
                     KList = [element(1, KV) || KV <- NewKVList],
                     OtherDBChunkOrig = Params#shash_recon_struct.db_chunk,
  
positive.code: build_recon_struct(shash, _OldSyncStruct = {}, I, DBItems, _Params, true) ->
      ?DBG_ASSERT(not intervals:is_empty(I)),
      ItemCount = length(DBItems),
      {DBChunkBin, SigSize} =
          shash_compress_k_list_p1e(DBItems, ItemCount, ItemCount, get_p1e()),
      #shash_recon_struct{interval = I, reconPid = comm:this(),
                          db_chunk = DBChunkBin, sig_size = SigSize};
  build_recon_struct(bloom, _OldSyncStruct = {}, I, DBItems, _Params, true) ->
      % note: for bloom, parameters don't need to match (only one bloom filter at
      %       the non-initiator is created!) - use our own parameters
  
negative.code:          interval = intervals:empty()                         :: intervals:interval(),
           reconPid = undefined                                 :: comm:mypid() | undefined,
           db_chunk = ?required(trivial_recon_struct, db_chunk) :: bitstring(),
           sig_size = ?required(trivial_recon_struct, sig_size) :: signature_size(),
           p1e      = ?required(trivial_recon_struct, p1e)      :: float()
          }).
  
  -record(bloom_recon_struct,
  