anchor.diff:                              {app_name(), app_vsn(), app_type() | incl_apps()} |
                               {app_name(), app_vsn(), app_type(), incl_apps()}.
   
  --type application_constraint() :: rcl_depsolver:constraint() | string() | binary().
  +-type application_constraint() :: rcl_depsolver:raw_constraint() | string() | binary().
   -type application_goal() :: application_constraint()
                             | {application_constraint(), app_type() | incl_apps()}
                             | {application_constraint(), app_type(), incl_apps() | none}.
  
positive.code: process_specs(Rel=#release_t{annotations=Annots,
                               goals=Goals}, World) ->
      ActiveApps = lists:flatten([rcl_app_info:active_deps(El) || El <- World] ++
                                     [case get_app_name(Goal) of
                                          {error, _} -> [];
                                          G -> G
                                      end || Goal <- Goals]),
      LibraryApps = lists:flatten([rcl_app_info:library_deps(El) || El <- World]),
      Specs = [create_app_spec(Annots, App, ActiveApps, LibraryApps) || App <- World],
      {ok, Rel#release_t{annotations=Annots,
  
negative.code:     rcl_topo:format_error(E);
  format_error({failed_to_parse, Con}) ->
      io_lib:format("Failed to parse constraint ~p", [Con]);
  format_error({invalid_constraint, _, Con}) ->
      io_lib:format("Invalid constraint specified ~p", [Con]);
  format_error({not_realized, Name, Vsn}) ->
      io_lib:format("Unable to produce metadata release: ~p-~s has not been realized",
  