anchor.diff:      } else {
         tsv = '${tsv}\t';
       }
  -    tsv = _milestone == null ? '${tsv}\t' : '${tsv}\t${milestoneHistory}\t${_milestone.dueOn}';
  +   tsv = '${tsv}\t${originalMilestone}';
  +    tsv = '${tsv}\t${currentMilestone}';
  +    tsv = '${tsv}\t${dueOn}';
       tsv = _closedAt == null ? '${tsv}\t': '${tsv}\t${_closedAt}';
   
       return tsv;
  
positive.code:   List<TimelineItem> _timeline;
    get timeline => _timeline;
    get length => _timeline.length;
    void append(l) => _timeline.add(l);
    bool contains(l) => _timeline.contains(l);
    
  
negative.code:   }
  
    static get tsvHeader => 
      'Number\tTitle\tURL\tPriority\tAuthor\tCreated At\tAssignees\tOriginal Milestone\tCurrent Milestone\tDue On\tClosed At';
  
    // Top level entities like Issue and PR must TSV, because their fields CSV,
    // and Google Sheets only takes mixed CSV/TSV records with TSV being the containing
    // record format.
    String toTsv() {
      String milestoneHistory = '';
      if (timeline != null) timeline.milestoneTimeline.forEach((milestone) =>
        milestoneHistory = milestone == null ? milestoneHistory : '${milestoneHistory},${milestone.title}'
      );
      if (milestoneHistory.length > 0) milestoneHistory = milestoneHistory.substring(1);
      if (milestoneHistory.length == 0) milestoneHistory = _milestone ?? '';
  
      var originalMilestone;
      if (_timeline == null) originalMilestone = '';
      if (_timeline.originalMilestone == null) originalMilestone = ''; else _timeline.originalMilestone.title;
      var currentMilestone = _milestone == null ? '' : _milestone.title;
      var dueOn = _milestone == null ? '' : _milestone.dueOn.toString();
  
  
      String tsv = '';
      tsv = '${tsv}${_number}';
  