code: def add_task(self, name=None, desc=None):
          
          # A name is required to create a task
          for k in self.get_tasks():
              if name in keys_of(k):
                  raise ValueError('Task already exists')
  
          if name is not None:
              # desc can be None, so we can just append whatever we have
              self.grindstone['tasks'].append( {name: desc} )
          else:
              # Raising errors is good, and makes tests easy.
              raise ValueError('Tasks `name` cannot be None')
docs: Adds object to list of grindstone['tasks'].