anchor.diff:    String summary() {
       String markdown = '';
       _timeline.forEach((entry) =>
  -      markdown = '${markdown}' + entry.toString() + '\n\n'
  +      markdown = '${markdown}${entry}\n\n'
       );
       return markdown.length > 2 ? markdown.substring(0, markdown.length-2) : markdown;
     }
     String toString() {
       return summary();
     }
  -
  +  String toCsv() {
  +    String csv = '';
  +    _timeline.forEach((entry) =>
  +      csv = '${csv}${entry},'
  +    );
  +    return csv.length > 1 ? csv.substring(0, csv.length-1) : csv;
  +  }
  +  
     TimelineItem operator[](int index) => _timeline[index];
   
     Timeline(this._timeline);
  
positive.code:   static Actor fromGraphQL(dynamic node) {
      return Actor(node['login'], node['url']);
    }
  
    @override
    bool operator==(Object other) =>
  
negative.code:   String summary() {
      String markdown = '(';
      _labels.forEach((label) {
        markdown = '${markdown}${label.label}';
        if (label != _labels.last) markdown = '${markdown}, ';
      });
      markdown = '${markdown})';
      return markdown;
    }
  
    String toCsv() {
      String csv = '';
      labels.forEach((label) {
        csv += '${csv}${label.label}';
        if (label != labels.last) csv = '${csv},';
      });
      return csv;
    }
  
    String toString() {
      return summary();
    }
  
    Labels(this._labels);
    static Labels fromGraphQL(dynamic node) {
      var result = Labels(Set<Label>());
  