docs: def fail(self, group, message):
          '''Mark the particular job as failed, with the provided type, and a
          more specific message. By `type`, we mean some phrase that might be
          one of several categorical modes of failure. The `message` is
          something more job-specific, like perhaps a traceback.
  
          This method should __not__ be used to note that a job has been dropped
          or has failed in a transient way. This method __should__ be used to
          note that a job has something really wrong with it that must be
          remedied.
  
          The motivation behind the `type` is so that similar errors can be
          grouped together. Optionally, updated data can be provided for the job.
          A job in any state can be marked as failed. If it has been given to a
          worker as a job, then its subsequent requests to heartbeat or complete
          that job will fail. Failed jobs are kept until they are canceled or
          completed. __Returns__ the id of the failed job if successful, or
          `False` on failure.'''
          logger.warn('Failing %s (%s): %s', self.jid, group, message)
          return self.client('fail', self.jid, self.client.worker_name, group,
              message, json.dumps(self.data)) or False