anchor.diff:      sink.writeln('  node [fontname=Helvetica];');
       sink.writeln('  edge [fontname=Helvetica, fontcolor=gray];');
   
  -    var orderedPacks = packages.values.toList(growable: false)
  +    List<VizPackage> orderedPacks = packages.values.toList(growable: false)
           ..sort();
   
       for(var pack in orderedPacks) {
         sink.writeln();
   
  -      pack._write(sink, root.name);
  +      pack._write(sink, root.name, escapeLabels: escapeLabels);
       }
   
       sink.writeln('}');
  
positive.code: 
  
  
    String toDot() {
      _update();
  
      var sink = new StringBuffer();
  
negative.code: 
    int get hashCode => name.hashCode;
  
    void _write(StringSink sink, String rootName, {bool escapeLabels: false}) {
      var isRoot = rootName == name;
  
      var newLine = (escapeLabels) ? r'\n' : '\n';
  
      var label = name;
      if(version.isNotEmpty) {
        label = label + '$newLine$version';
      }
  
      var props = { 'label' : '"$label"' };
  