docs: def get_changes(self, serialized=False, keep=False):
          """ Get a journal of changes that have occurred
  
          :param `serialized`:
              Return changes in the serialized format used by TaskWarrior.
          :param `keep_changes`:
              By default, the list of changes is reset after running
              ``.get_changes``; set this to `True` if you would like to
              keep the changes recorded following running this command.
  
          :returns: A dictionary of 2-tuples of changes, where the key is the
              name of the field that has changed, and the value is a 2-tuple
              containing the original value and the final value respectively.
  
          """
          results = {}
  
          # Check for explicitly-registered changes
          for k, f, t in self._changes:
              if k not in results:
                  results[k] = [f, None]
              results[k][1] = (
                  self._serialize(k, t, self._fields)
                  if serialized else t
              )
  
          # Check for changes on subordinate items
          for k, v in six.iteritems(self):
              if isinstance(v, Dirtyable):
                  result = v.get_changes(keep=keep)
                  if result:
                      if not k in results:
                          results[k] = [result[0], None]
                      results[k][1] = (
                          self._serialize(k, result[1], self._fields)
                          if serialized else result[1]
                      )
  
          # Clear out recorded changes
          if not keep:
              self._changes = []
  
          return results