anchor.diff:    String toString() {
       return 'due on ${dueOn} (${title})';
     }
  +  String toCsv() {
  +    return '${title},${dueOn}';
  +  }
   
     static final graphQLResponse = 
     '''
  -    milestone {
  -      title,
  -      id,
  -      number,
  -      url,
  -      closed,
  -      createdAt,
  -      closedAt,
  -      dueOn,
  -    }
  +  milestone {
  +    title,
  +    id,
  +    number,
  +    url,
  +    closed,
  +    createdAt,
  +    closedAt,
  +    dueOn,
  +  }
     ''';
   }
   
  
positive.code:   String summary() {
      String markdown = '(';
      _labels.forEach((label) {
        markdown = markdown + label.label;
        if (label != _labels.last) markdown = markdown + ', ';
      });
      markdown = markdown + ')';
      return markdown;
    }
    String toString() {
      return summary();
    }
    Labels(this._labels);
    static Labels fromGraphQL(dynamic node) {
      var result = Labels(Set<Label>());
  
negative.code:   String summary() {
      String markdown = '';
      _timeline.forEach((entry) =>
        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);
  