code: def dirty(self):
          
          if self._dirty:
              return True
          else:
              for extension in self.recipe_extensions:
                  if extension.dirty:
                      return True
          return False
docs: The recipe is dirty if it is flagged dirty or any extensions are
          flagged dirty