anchor.diff:  
   // TODO(ianh): Move this to Widget
   void _endSyncPhase() {
  -  Widget._currentGeneration += 1;
  -  Widget._notifyMountStatusChanged();
  +  try {
  +    Widget._currentGeneration += 1;
  +    Widget._notifyMountStatusChanged();
  +  } catch (e, stack) {
  +    _debugReportException('sending post-sync notifications', e, stack);
  +    return null;
  +  }
   }
   
   // TODO(ianh): Move this to Component
  
positive.code: 
  void _debugReportException(String context, dynamic exception, StackTrace stack) {
    print('------------------------------------------------------------------------');
    print('Exception caught while $context');
    print('$exception');
    print('Stack trace:');
    '$stack'.split('\n').forEach(print);
  
negative.code:         continue; // when these nodes are reordered, we just reassign the data
  
        if (!idSet.add(child.key)) {
          throw '''If multiple keyed nodes exist as children of another node, they must have unique keys. ${toStringName()} has multiple children with key "${child.key}".''';
        }
      }
      return false;
  