anchor.diff:  
     _VNode _removeAfter(Owner ownerID, int newSize) {
       var sizeIndex = (newSize - 1) & _MASK;
  -    if (sizeIndex >= this.length - 1) {
  +    if (newSize != 0 && sizeIndex >= this.length - 1) {
         return this;
       }
       var editable = _transientVNode(this, ownerID);
  -    editable._array.removeRange(sizeIndex + 1, editable.length);
  +    if (newSize == 0) {
  +      editable._array = [];
  +    } else {
  +      editable._array.removeRange(sizeIndex + 1, editable.length);
  +    }
       return editable;
   
     }
  
positive.code: 
  }
  
  class _VNode {
    List _array;
    Owner _ownerID;
  
    int get length => _array.length;
  
    String toString() {
      return "VNode: " + _array.toString();
  
negative.code:       node._set((oldTailOffset >> _SHIFT) & _MASK, oldTail);
      }
  
      if (newTailOffset < oldTailOffset) {
        newRoot = _transientVNode(newRoot, owner);
        var node = newRoot;
        var parent = null;
        var idx = null;
        for (var level = newLevel; level > _SHIFT; level -= SHIFT) {
          parent = node;
          idx = (newTailOffset >> level) & _MASK;
          node._set(idx, _transientVNode(node._get(idx), owner));
          node = node._get(idx);
        }
        var newNode = node._removeAfter(owner, node.length - 1);
        if (parent == null) {
          newRoot = newNode;
        } else {
          parent._set(idx, newNode);
        }
      }
  
      if (newSize < oldSize) {
        newTail = newTail._removeAfter(owner, newSize);
      }
  