anchor.diff:    /// Returns a list of edges that couldn't be satisfied.
     List<NullabilityEdge> propagate() {
       if (_debugBeforePropagation) _debugDump();
  -    var nullableNodes = _propagateAlways();
  +    _propagateAlways();
       _propagateUpstream();
  -    return _propagateDownstream(nullableNodes);
  +    _propagateDownstream();
  +    return _unsatisfiedEdges;
     }
   
     /// Records that nodes [x] and [y] should have exactly the same nullability.
  
positive.code:       }
        // Heuristically choose to propagate to the inner node since this seems
        // to lead to better quality migrations.
        pendingEdges.add(NullabilityEdge._(node.innerNode, const [],
            _NullabilityEdgeKind.soft, _SubstitutionHeuristicOrigin()));
      }
      return unsatisfiedEdges;
    }
  
    /// Propagates non-null intent upstream along unconditional control flow
    /// lines.
    void _propagateUpstream() {
      var pendingEdges = never._upstreamEdges.toList();
      while (pendingEdges.isNotEmpty) {
        var edge = pendingEdges.removeLast();
        if (!edge.hard) continue;
        var node = edge.primarySource;
        if (node is NullabilityNodeMutable &&
  
negative.code:         node._state = _NullabilityState.nonNullable;
          // Was not previously in the set of non-null intent nodes, so we need to
          // propagate.
          _pendingEdges.addAll(node._upstreamEdges);
        }
      }
    }
  