anchor.diff:          if (!_disallowedIntoRequired(fact)) continue;
           _disallowedIntoDependencies(fact);
           _disallowedIntoIncompatibilities(fact);
  +      } else if (fact is Dependency) {
  +        fact = _dependencyIntoDependency(fact);
  +        if (fact == null) continue;
  +
  +        if (!_dependencyIntoReqired(fact)) continue;
         }
       }
     }
  
positive.code:           dependency.depender, allowed, [dependency].addAll(relevant)));
      }
  
      return fact;
    }
  
    // Resolves [required] and [disallowed], which should refer to the same
  
negative.code:     // packages they depend on.
      var matchingByAllowed = <String, Set<Dependency>>{};
  
      // Fill [matchingByAllowed] and trim any irrelevant dependencies while we're
      // at it.
      var ref = fact.dep.toRef();
      for (var dependency in _dependenciesByDepender[ref].toList()) {
        var intersection = fact.dep.constraint
            .intersect(dependency.depender.constraint);
  
        if (intersection.isEmpty) {
          // If no versions in [fact] have this dependency, then it's irrelevant.
          _removeDependency(dependency);
        } else if (intersection != dependency.depender.constraint) {
          // If only some versions [dependency.depender] are in [fact], we can
          // trim the ones that aren't.
          _removeDependency(dependency);
          var newDependency = new Dependency(
              dependency.depender.withConstraint(intersection),
              dependency.allowed,
  