anchor.diff:    void _disallowedIntoIncompatibilities(Disallowed fact) {
       // Remove any incompatibilities that are no longer relevant.
       for (var incompatibility in _incompatibilities[fact.dep.toRef()].toList()) {
  -      var same = _matching(incompatibility, fact.dep);
  -      var different = _nonMatching(incompatibility, fact.dep);
  -
  -      var trimmed = same.constraint.difference(fact.dep.constraint);
  -      if (trimmed == same.constraint) continue;
  -
  -      // If [fact] disallows some of the versions in [same], we create a new
  -      // incompatibility with narrower versions. For example, if
  -      //
  -      // * a [1, 2) is disallowed (fact)
  -      // * a [0, 2) is incompatible with b [0, 1) (incompatibility)
  -      //
  -      // we can remove [incompatibility] and add
  -      //
  -      // * a [0, 1) is incompatible with b [0, 1)
  -      //
  -      // If this would produce an empty constraint, we instead remove
  -      // [incompatibility] entirely.
  +      var result = _disallowedAndAllowed(fact, incompatibility);
  +      if (result == incompatibility) continue;
         _removeIncompatibility(incompatibility);
  -      if (trimmed.isEmpty) continue;
  -
  -      _fromCurrent.add(new Incompatibility(
  -          same.withConstraint(trimmed), different, [incompatibility, fact]));
  +      if (result != null) _fromCurrent.add(result);
       }
     }
   
  
positive.code:   }
  
    bool _incompatibilityIntoRequired(Incompatibility fact) {
      var required = _required[fact.dep1.name] ?? _required[fact.dep2.name];
      if (required == null) return true;
      var result = _requiredAndIncompatibility(fact);
  
negative.code:             .putIfAbsent(fact.allowed.toRef(), () => new Set())
              .add(fact);
        } else if (fact is Incompatibility) {
          // Merge with [Disallowed]s first because they can narrow [fact]'s deps,
          // which may allow it to merge with more [Incompatibility]s than it
          // would otherwise be able to.
          fact = _incompatibilityIntoDisallowed(fact);
          if (fact == null) continue;
  
          fact = _incompatibilityIntoIncompatibilities(fact);
          if (fact == null) continue;
  
  