anchor.diff:      % In-use blobs and tags are tracked differently.  Blobs are
       % immutable objects, and need to be explicitly re-replicated.
       % Tags are mutable objects, whose incarnation ids are updated on
  -    % every mutation; they are also implicity re-replicated, since the
  +    % every mutation; they are also implicitly re-replicated, since the
       % storage of every mutation creates the appropriate number of
       % replicas.
       %
  -    % Since blobs need to be re-replicated explicity, we track all
  +    % Since blobs need to be re-replicated explicitly, we track all
       % their current locations.  Since tags are mutable, we don't track
       % their locations, but track their current incarnation: all older
       % incarnations will be garbage.  During the rr_tags phase, the
  
positive.code:                             % Note that Node could belong to the blacklist; we
                              % still record the replica so that we can use it for
                              % re-replication if needed.
                              NewRecovered = lists:sort([{Node, Vol} | Recovered]),
                              ets:update_element(gc_blobs, BlobName, {3, NewRecovered}),
                              {ok, false}
                      end
  
negative.code: % This is more dialyzer friendly than an inline call.
  -spec find_usable([node()], [node()]) -> [node()].
  find_usable(BL, Nodes) ->
      [N || N <- Nodes, not lists:member(N, BL)].
  
  -spec find_unusable([node()], [node()]) -> [node()].
  find_unusable(BL, Nodes) ->
      [N || N <- Nodes, lists:member(N, BL)].
  
  %% ===================================================================
  %% blob rereplication
  