anchor.diff:    final int unformattedFiles;
     final Set<AnalyzerOutput> analyzerItems;
     final bool pubClean;
  +  final Set<String> authorDomains;
   
     _MiniSum._(this.name, this.version, this.unformattedFiles, this.analyzerItems,
  -      this.pubClean);
  +      this.pubClean, this.authorDomains);
   
     factory _MiniSum.fromSummary(Summary summary) {
  +    var authorDomains =
  +        summary.pubSummary.authors.map(_domainFromAuthor).toSet();
  +
       return new _MiniSum._(
           summary.packageName,
           summary.packageVersion.toString(),
           summary.unformattedFiles.length,
           summary.analyzerItems,
  -        summary.pubSummary.exitCode == 0);
  +        summary.pubSummary.exitCode == 0,
  +        authorDomains);
     }
   
     Map<String, dynamic> toJson() => <String, dynamic>{
  
positive.code: import 'package:path/path.dart' as p;
  
  main() async {
    var dir = new Directory("pkg_clean.1491503303478");
  
    var items = dir
        .listSync()
  
negative.code:         'version': version,
          'unformattedFiles': unformattedFiles,
          'analyzerErrors': _analyzerItemJson.length,
          'pubClean': pubClean,
          'authorDomains': (authorDomains.toList()..sort()).join(', ')
        };
  
    Iterable<Map<String, Object>> get _analyzerItemJson sync* {
  