def METHOD_NAME(self,
          proposal,            # Task and hints
          classifiers,         # List of the classifiers
          check_schedule=True  # Keep/disregard time-related limits
          ):
    """Determine if a task can be run, return true/false, a list of lists
    (see below) and a string of diagnostics.
    The list of lists contains one list per application passed,
    with that list containing descriptions of the limits passed
    for that application.  (See the code in the top-level limit
    processor to see how this is used.)
    """
    diags = []
    passed_enough = False
    # Run through each application, stopping when one passes or a
    # failed one has stop-on-failure
    for application in self.applications:
        # See if the classifier applies
        try:
            classifier = application['classifier']
            if classifier not in classifiers:
                continue
        except KeyError:
            # No classifier always applies
            pass
        # Description
        diags.append("Application: %s" % 
                     application.get('description', "(No description)"))
        passed, forced_stop, app_diags \
            = self.__check_application(application, proposal, classifiers,
                                       check_schedule)
        diags.extend([ indent(diag) for diag in app_diags])
        # A pass short-circuits the win
        if passed:
            diags.append("Passed one application.  Stopping.")
            passed_enough = True
            break
        # Forced stop ends it all
        if forced_stop:
            diags.append("Failed; stop forced")
            break
    return passed_enough, '\n'.join(diags)