anchor.diff:  pkgs(DepGraph, Visited, Pkg, Constraints, OtherPkgs) ->
       F = fun (Vsn) ->
                   Deps = get_dep_constraints(DepGraph, Pkg, Vsn),
  -                UConstraints = extend_constraints(Constraints, [{Pkg, Vsn} | Deps]),
  +                UConstraints = extend_constraints(Pkg, Vsn, Constraints, Deps),
                   DepPkgs =[dep_pkg(Dep) || Dep <- Deps],
                   NewVisited = [Pkg | Visited],
  -                all_pkgs(DepGraph, NewVisited, DepPkgs ++ OtherPkgs, UConstraints)
  +                Res = all_pkgs(DepGraph, NewVisited, DepPkgs ++ OtherPkgs, UConstraints),
  +                Res
  +
           end,
  -    lists_some(F, constrained_package_versions(DepGraph, Pkg, Constraints)).
  +    case constrained_package_versions(DepGraph, Pkg, Constraints) of
  +        [] ->
  +            fail;
  +        Res ->
  +            lists_some(F, Res)
  +    end.
   
   
   %% @doc This gathers the dependency constraints for a given package vsn from the
  
positive.code: %% pkgs) that serve to walk the solution space of dependency.
  -spec all_pkgs(dep_graph(),[pkg_name()],[pkg_name()],[{pkg_name(), constraints()}]) ->
                        fail | [pkg()].
  all_pkgs(_State, _, [], Constraints) ->
      PkgVsns =
          [filter_package_constraints(PkgConstraints)
           || {_, PkgConstraints} <- Constraints],
  
negative.code: primitive_solve(State, PackageList)
    when erlang:length(PackageList) > 0 ->
      Constraints = lists:foldl(fun(Info, Acc) ->
                                        add_constraint('_GOAL_', 'NO_VSN', Acc, Info)
                                end, new_constraints(), PackageList),
  
      Pkgs = lists:map(fun dep_pkg/1, PackageList),
  