anchor.diff:    }
   
     void _connectDownstream(NullabilityNode upstreamNode, NullabilityEdge edge) {
  -    _allUpstreamNodes.add(upstreamNode);
       upstreamNode._downstreamEdges.add(edge);
       if (upstreamNode is _NullabilityNodeCompound) {
         for (var component in upstreamNode._components) {
  
positive.code:   }
  
    void _debugDump() {
      for (var upstreamNode in _allUpstreamNodes) {
        var edges = upstreamNode._downstreamEdges;
        var destinations =
            edges.where((edge) => edge.sourceNode == upstreamNode).map((edge) {
          var suffixes = <Object>[];
          if (edge.isUnion) {
            suffixes.add('union');
          } else if (edge.isHard) {
            suffixes.add('hard');
          }
          suffixes.addAll(edge.guards);
          var suffix = suffixes.isNotEmpty ? ' (${suffixes.join(', ')})' : '';
          return '${edge.destinationNode}$suffix';
        });
        var state = upstreamNode._state;
        print('$upstreamNode ($state) -> ${destinations.join(', ')}');
      }
    }
  
    /// Propagates nullability downstream along union edges from "always".
  
negative.code: 
    final NullabilityMigrationInstrumentation /*?*/ instrumentation;
  
    /// Returns a [NullabilityNode] that is a priori nullable.
    ///
    /// Propagation of nullability always proceeds downstream starting at this
  