anchor.diff:  
   -type share_spec() :: #share_spec{}.
   
  --type file_selector() :: file_id:file_guid() | oct_background:entity_selector().
  --type file_spec() :: #file_spec{} | #dir_spec{}.
  +-type object_selector() :: file_id:file_guid() | oct_background:entity_selector().
  +-type object_spec() :: #file_spec{} | #dir_spec{}.
   
   -type object() :: #object{}.
   
  --export_type([share_spec/0, file_selector/0, file_spec/0, object/0]).
  +-export_type([share_spec/0, object_selector/0, object_spec/0, object/0]).
  +
  +-define(LS_SIZE, 1000).
   
   -define(ATTEMPTS, 30).
   
  
positive.code: 
  %% @private
  -spec await_dir_links_sync(
      [oct_background:entity_selector()], od_user:id(), file_id:file_guid(), [file_id:file_guid()]
  ) ->
      ok | no_return().
  await_dir_links_sync(SyncProviders, UserId, DirGuid, ExpChildGuids) ->
      lists:foreach(fun(SyncProvider) ->
          SessId = oct_background:get_user_session_id(UserId, SyncProvider),
          SyncNode = lists_utils:random_element(oct_background:get_provider_nodes(SyncProvider)),
          ?assertMatch(
              {ok, ExpChildGuids},
              ls(SyncNode, SessId, DirGuid, 0, length(ExpChildGuids)),
              ?ATTEMPTS
          )
      end, SyncProviders).
  
  
  %% @private
  -spec ls(
      oct_background:entity_selector(), session:id(), file_id:file_guid(), non_neg_integer(), non_neg_integer()
  ) ->
      {ok, [file_id:file_guid()]} | {error, term()}.
  ls(Node, SessId, Guid, Offset, Size) ->
      case lfm_proxy:get_children(Node, SessId, {guid, Guid}, Offset, Size) of
          {ok, Files} ->
              {ok, lists:sort(lists:map(fun({Guid, _}) -> Guid end, Files))};
          {error, _} = Error ->
              Error
      end.
  
  
  %% @private
  
negative.code:     od_user:id(),
      file_id:file_guid(),
      oct_background:entity_selector(),
      object_spec()
  ) ->
      object().
  create_file_tree(UserId, ParentGuid, CreationProvider, #file_spec{
  