docs: def clean(ctx):
      """Clean Sphinx build products.
  
      Use this command to clean out build products after a failed build, or
      in preparation for running a build from a clean state.
  
      This command removes the following directories from the
      ``pipelines_lsst_io`` directory:
  
      - ``_build`` (the Sphinx build itself)
      - ``modules`` (symlinks to the module doc directories of Stack packages)
      - ``packages`` (symlinks to the package doc directories of Stack packages)
      - ``py-api`` (pages created by automodapi for the Python API reference)
      """
      logger = logging.getLogger(__name__)
  
      dirnames = ['py-api', '_build', 'modules', 'packages']
      dirnames = [os.path.join(ctx.obj['root_project_dir'], dirname)
                  for dirname in dirnames]
      for dirname in dirnames:
          if os.path.isdir(dirname):
              shutil.rmtree(dirname)
              logger.debug('Cleaned up %r', dirname)
          else:
              logger.debug('Did not clean up %r (missing)', dirname)