anchor.diff:      assert(_debugCanPerformMutations);
       assert(child != null);
       assert(child.parentData != null);
  -    child._cleanRelayoutSubtreeRoot();
  +    child._cleanRelayoutBoundary();
       child.parentData.detach();
       child.parentData = null;
       super.dropChild(child);
  
positive.code:     assert(!_debugDoingThisResize);
      assert(!_debugDoingThisLayout);
      final RenderObject parent = this.parent;
      RenderObject relayoutSubtreeRoot;
      if (!parentUsesSize || sizedByParent || constraints.isTight || parent is! RenderObject)
        relayoutSubtreeRoot = this;
      else
        relayoutSubtreeRoot = parent._relayoutSubtreeRoot;
      assert(parent == this.parent);
      assert(() {
        _debugCanParentUseSize = parentUsesSize;
        return true;
      });
      if (!needsLayout && constraints == _constraints && relayoutSubtreeRoot == _relayoutSubtreeRoot) {
        assert(() {
          // in case parentUsesSize changed since the last invocation, set size
          // to itself, so it has the right internal debug values.
  
negative.code:   bool get needsLayout => _needsLayout;
    bool _needsLayout = true;
  
    RenderObject _relayoutBoundary;
    bool _doingThisLayoutWithCallback = false;
  
    /// The layout constraints most recently supplied by the parent.
  