code: func (change *TaskStateChange) String() string {
  	res := fmt.Sprintf("%s -> %s", change.TaskARN, change.Status.String())
  	if change.Task != nil {
  		res += fmt.Sprintf(", Known Sent: %s, PullStartedAt: %s, PullStoppedAt: %s, ExecutionStoppedAt: %s",
  			change.Task.GetSentStatus().String(),
  			change.Task.GetPullStartedAt(),
  			change.Task.GetPullStoppedAt(),
  			change.Task.GetExecutionStoppedAt())
  	}
  	if change.Attachment != nil {
  		res += ", " + change.Attachment.String()
  	}
  	for _, containerChange := range change.Containers {
  		res += ", " + containerChange.String()
  	}
  
  	return res
  }
docs: // String returns a human readable string representation of this object