docs: def rename(self, old_task_name, new_task_name):
          """ Renames an existing task directory.
  
              `old_task_name`
                  Current task name.
              `new_task_name`
                  New task name.
  
              Returns ``True`` if rename successful.
              """
  
          if not old_task_name or old_task_name.startswith('-'):
              raise ValueError('Old task name is invalid')
  
          if not new_task_name or new_task_name.startswith('-'):
              raise ValueError('New new task name is invalid')
  
          if old_task_name == new_task_name:
              raise ValueError('Cannot rename task to itself')
  
          try:
              old_task_dir = self._get_task_dir(old_task_name)
              if not self.exists(old_task_dir):
                  raise errors.TaskNotFound(old_task_name)
  
              new_task_dir = self._get_task_dir(new_task_name)
              if self.exists(new_task_dir):
                  raise errors.TaskExists(new_task_name)
  
              os.rename(old_task_dir, new_task_dir)
              return True
  
          except OSError:
              return False