anchor.diff:      {ok, Files} = file:list_dir(AssetsDir),
       Modules = lists:foldl(fun(F, ModulesIn) ->
           Read = read_metadata(AssetsDir ++ "/" ++ F),
  -        case lists:keyfind(Read#module.full_name, 2, ModulesIn) of
  -            false -> 
  -                [Read|ModulesIn];
  -            MatchedModule -> 
  -                NewReleases = Read#module.releases,
  -                NewModule = MatchedModule#module{ releases = NewReleases ++ MatchedModule#module.releases},
  -                lists:keyreplace(Read#module.full_name, 2, ModulesIn, NewModule)
  -        end
  +        merge_into_modules(Read, ModulesIn)
       end, [], Files),
       {ok, Modules}.
   
  
positive.code:         % TODO: tag_list
      }.
  
  serializable_module(Module) ->
      Latest = lists:foldl(fun(R, Max) ->
          versions:max(R#release.version, Max)
      end, hd(Module#module.releases), tl(Module#module.releases)),
      {[
          {full_name, Module#module.full_name},
          {author, Module#module.author},
          {name, Module#module.name},
          {desc, Module#module.desc},
          {project_url, Module#module.project_url},
          {version, Latest#release.version }, 
          {releases, [serializable_release(R) || R <- Module#module.releases]},
          {tag_list, []}
      ]}.
  
negative.code: -record(release, {
      version, % {1.0.0}
      file, 
      dependencies = [] % {FullName, [constraint_type()]} -> {"Mario/mario", [constraints]}
  }).
  
  -record(module, {
  