Repository: jeipollack/euclid_rag
Pull request #12: Refactor/issue 9 update ci
Author: login: jeipollack
Labels: name: documentation
description: Improvements or additions to documentation
Created: 2025-04-27T14:26:03Z | Merged: 2025-04-29T10:37:50Z

This pull request adapts the Rubin RAG documentation and CI to Euclid RAG, mainly changing libraries and commands such that Euclid RAG is standalone. 

Closes #9 

# Summary of Changes

* **App Name:**
      Replace reference to Rubin RAG with Euclid RAG
* **Tox configuration:**
      Set up tox to automate testing and documentation builds.
* **CI updates (.github/workflows/ci.yaml):**
      Disabled Docker image build and PyPI upload steps temporarily (can be re-enabled later).
      Cleaned up unnecessary comments and optimized job definitions.
* **Makefile improvements:**
      Added html target to manually trigger Sphinx documentation build with make html.
      Used .PHONY to ensure reliable make behavior.
* **Sphinx Documentation:**
      Fixed missing automodapi directive by adding sphinx-automodapi to the Sphinx extensions list.
      Investigated and noted a harmless warning from pydata_sphinx_theme (upstream compatibility issue with Sphinx 9.0).
      Deleted LSST specific documentation configuration files: documenteer.toml used in sphinx-build
* **Formatting Errors**
      Corrected formatting errors like linewidth of the licence in the module files and wherever relevant
* **Pre-commit**
      Update pre-commit-config yaml file

**Notes:**
Some jobs like Docker build and PyPI publishing are currently disabled. They can be reactivated later when needed.

Linked issue #9: Update CI for Euclid RAG
📌 Issue Description:

We need to adapt the existing CI pipeline from Rubin RAG to Euclid RAG. The following updates are required:

✅ General Adjustments:

- Replace all references to rubin_rag with euclid_rag.
- Update GitHub Container Registry tags (ghcr.io/...).

🔍 Testing & Linting:

- Verify that Python version 3.12 is correct (update matrix if needed).
- Ensure tox-uv and lsst-sqre/run-tox are still required.

📦 Building & Deployment:

- Update PyPI package name in the pypi job.
- Check whether the Docker image should be renamed or relocated.
- Verify that publishing permissions are properly set up.
Linked issue comments: user: login: jeipollack
created_at: 2025-04-27T14:39:34Z
body: Hi @roryclaydon1994 
  I ended up working on this while working on the documentation: https://github.com/jeipollack/euclid_rag/pull/12
I will ask for a volunteer in Slack to review this PR.   
author_association: OWNER

Diff:
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index ee2b25d..62eaf9e 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -1,9 +1,6 @@
 name: Python CI
 
 env:
-  # Default Python version used for all jobs other than test, which uses a
-  # matrix of supported versions. Quote the version to avoid interpretation as
-  # a floating point number.
   PYTHON_VERSION: "3.12"
 
 "on":
@@ -11,21 +8,15 @@ env:
   pull_request: {}
   push:
     branches-ignore:
-      # These should always correspond to pull requests, so ignore them for
-      # the push trigger and let them be triggered by the pull_request
-      # trigger, avoiding running the workflow twice.  This is a minor
-      # optimization so there's no need to ensure this is comprehensive.
       - "dependabot/**"
       - "gh-readonly-queue/**"
       - "renovate/**"
-      # - "tickets/**"
-      # - "u/**"
   release:
     types: [published]
+  workflow_dispatch: {}
 
 jobs:
   lint:
-
     runs-on: ubuntu-latest
     timeout-minutes: 5
 
@@ -41,7 +32,6 @@ jobs:
         uses: pre-commit/action@v3.0.1
 
   test:
-
     runs-on: ubuntu-latest
     timeout-minutes: 10
 
@@ -61,60 +51,33 @@ jobs:
           tox-plugins: tox-uv
 
   build:
-    permissions:
-        contents: read
-        packages: write  # <-- This is where you set the GITHUB_TOKEN permissions
-
+    if: false  # Disabled for now (enable when ready to push docker images)
     runs-on: ubuntu-latest
     timeout-minutes: 10
 
-    if: >
-      github.event_name != 'merge_group'
-      && (startsWith(github.ref, 'refs/heads/main'))
-
     steps:
       - uses: actions/checkout@v4
-        with:
-          fetch-depth: 0
-
-      - name: Define the Docker tag
-        id: vars
-        run: echo "tag=$(scripts/docker-tag.sh)" >> $GITHUB_OUTPUT
-
-      - name: Print the tag
-        id: print
-        run: echo ${{ steps.vars.outputs.tag }}
 
       - name: Set up Docker Buildx
         uses: docker/setup-buildx-action@v3
 
-      - name: Log in to GitHub Container Registry
-        uses: docker/login-action@v3
-        with:
-          registry: ghcr.io
-          username: ${{ github.repository_owner }}
-          password: ${{ secrets.GITHUB_TOKEN }}
-
-      - name: Build and push
+      - name: Build (no push)
         uses: docker/build-push-action@v6
         with:
           context: .
-          push: true
-          tags: |
-            ghcr.io/lsst-dm/rubin_rag
+          tags: my-local/dev-image
           cache-from: type=gha
           cache-to: type=gha,mode=max
           platforms: linux/amd64
 
   docs:
-
     runs-on: ubuntu-latest
     timeout-minutes: 10
 
     steps:
       - uses: actions/checkout@v4
         with:
-          fetch-depth: 0 # full history for setuptools_scm
+          fetch-depth: 0
 
       - name: Install Graphviz
         run: sudo apt-get install graphviz
@@ -124,12 +87,9 @@ jobs:
         with:
           python-version: ${{ env.PYTHON_VERSION }}
           tox-envs: "docs"
-          # Add docs-linkcheck when the docs and PyPI package are published
-          # tox-envs: "docs,docs-linkcheck"
           tox-plugins: tox-uv
 
   test-packaging:
-
     name: Test packaging
     runs-on: ubuntu-latest
     timeout-minutes: 5
@@ -138,35 +98,30 @@ jobs:
     steps:
       - uses: actions/checkout@v4
         with:
-          fetch-depth: 0 # full history for setuptools_scm
+          fetch-depth: 0
 
-      - name: Build and publish
+      - name: Build and test packaging (no upload)
         uses: lsst-sqre/build-and-publish-to-pypi@v2
         with:
           python-version: ${{ env.PYTHON_VERSION }}
           upload: false
 
   pypi:
-
-    # This job requires set up:
-    # 1. Set up a trusted publisher for PyPI
-    # 2. Set up a "pypi" environment in the repository
-    # See https://github.com/lsst-sqre/build-and-publish-to-pypi
+    if: false  # Disable PyPI release for now
     name: Upload release to PyPI
     runs-on: ubuntu-latest
     timeout-minutes: 10
     needs: [lint, test, docs, test-packaging]
     environment:
       name: pypi
-      url: https://pypi.org/p/rubin_rag
+      url: https://pypi.org/p/euclid_rag
     permissions:
       id-token: write
-    if: github.event_name == 'release' && github.event.action == 'published'
 
     steps:
       - uses: actions/checkout@v4
         with:
-          fetch-depth: 0 # full history for setuptools_scm
+          fetch-depth: 0
 
       - name: Build and publish
         uses: lsst-sqre/build-and-publish-to-pypi@v2
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 894fadb..29f3bdb 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -7,7 +7,7 @@ repos:
       - id: trailing-whitespace
 
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: v0.9.9
+    rev: v0.10.0
     hooks:
       - id: ruff
         args: [--fix, --exit-non-zero-on-fix]
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 428ba81..021a8c3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,7 @@
 # Change log
 
-rubin_rag is versioned with [semver](https://semver.org/).
+`euclid_rag` is versioned according to [Semantic Versioning](https://semver.org/).
 
-Find changes for the upcoming release in the project's [changelog.d directory](https://github.com/lsst-dm/rubin_rag/tree/main/changelog.d/).
+Planned and unreleased changes are tracked via individual changelog fragment files located in the [`changelog.d` directory](https://github.com/jeipollack/euclid_rag/tree/main/changelog.d/).
 
 <!-- scriv-insert-here -->
diff --git a/LICENSE b/LICENSE
index 1a6d00d..8a24ef8 100644
--- a/LICENSE
+++ b/LICENSE
@@ -6,18 +6,18 @@ This project was originally licensed under the MIT License. The original version
 ## Current License (LGPL-3.0)
 As of 9 March 2025, this project is now licensed under the GNU Lesser General Public License v3.0 (LGPL-3.0).
 
-The Euclid RAG application is free software: you can redistribute it and/or modify  
-it under the terms of the GNU Lesser General Public License as published by  
-the Free Software Foundation, either version 3 of the License, or (at your option)  
+The Euclid RAG application is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or (at your option)
 any later version.
 
-This application is distributed in the hope that it will be useful, but WITHOUT  
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A  
+This application is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
 
-You should have received a copy of the GNU Lesser General Public License  
+You should have received a copy of the GNU Lesser General Public License
 along with this application. If not, see <https://www.gnu.org/licenses/>.
 
 ## Attribution
-Certain parts of this project originate from an MIT-licensed codebase.  
+Certain parts of this project originate from an MIT-licensed codebase.
 For details, please refer to the original repository and its associated license file.
diff --git a/Makefile b/Makefile
index fbc511c..c4399a0 100644
--- a/Makefile
+++ b/Makefile
@@ -43,3 +43,7 @@ update-deps:
 	pip install --upgrade uv
 	uv pip install --upgrade pre-commit
 	pre-commit autoupdate
+
+.PHONY: html
+html:
+	sphinx-build -b html docs _build/html
diff --git a/README.md b/README.md
index eb7a670..f03c326 100644
--- a/README.md
+++ b/README.md
@@ -1,18 +1,18 @@
-# euclid_rag  
+# euclid_rag
 
-**Euclid RAG: A Local RAG System for Scientific Research**  
+**Euclid RAG: A Local RAG System for Scientific Research**
 
-Euclid RAG is an open-source Retrieval-Augmented Generation (RAG) system designed to provide **efficient document retrieval and knowledge augmentation** for the Euclid scientific community. The project aims to integrate local Large Language Models (LLMs) with a vector database to **retrieve, process, and generate** relevant scientific information.  
+Euclid RAG is an open-source Retrieval-Augmented Generation (RAG) system designed to provide **efficient document retrieval and knowledge augmentation** for the Euclid scientific community. The project aims to integrate local Large Language Models (LLMs) with a vector database to **retrieve, process, and generate** relevant scientific information.
 
-## Origin & Development  
+## Origin & Development
 
-This project was initially forked from the [**Rubin Observatory's Rubin RAG system**](https://github.com/lsst-dm/rubin_rag). While we are working in consultation and knowledge-sharing with Rubin developers, **Euclid RAG is evolving in a different direction** to meet the specific needs of the Euclid collaboration. Key differences will include:  
+This project was initially forked from the [**Rubin Observatory's Rubin RAG system**](https://github.com/lsst-dm/rubin_rag). While we are working in consultation and knowledge-sharing with Rubin developers, **Euclid RAG is evolving in a different direction** to meet the specific needs of the Euclid collaboration. Key differences will include:
 
-- **A focus on local deployment** without API-based LLM dependencies.  
-- **Different document retrieval strategies** tailored to Euclid's scientific workflows.  
-- **Potential agentic capabilities** to enhance automated knowledge retrieval and processing.  
+- **A focus on local deployment** without API-based LLM dependencies.
+- **Different document retrieval strategies** tailored to Euclid's scientific workflows.
+- **Potential agentic capabilities** to enhance automated knowledge retrieval and processing.
 
-## Installation 
+## Installation
 
 Install from PyPI:
 
diff --git a/docs/_rst_epilog.rst b/docs/_rst_epilog.rst
index afd04ce..f0afa2f 100644
--- a/docs/_rst_epilog.rst
+++ b/docs/_rst_epilog.rst
@@ -1,7 +1,8 @@
-.. _Click: https://click.palletsprojects.com/
-.. _mypy: http://www.mypy-lang.org
-.. _pre-commit: https://pre-commit.com
-.. _pytest: https://docs.pytest.org/en/latest/
 .. _scriv: https://scriv.readthedocs.io/en/stable/
-.. _semver: https://semver.org/
+.. _click: https://click.palletsprojects.com/
+.. _pytest: https://docs.pytest.org/en/latest/
 .. _tox: https://tox.wiki/en/latest/
+.. _pre-commit: https://pre-commit.com
+.. _semver: https://semver.org/
+.. _mypy: http://www.mypy-lang.org
+
diff --git a/docs/api.rst b/docs/api.rst
index aebf6a8..34c80c0 100644
--- a/docs/api.rst
+++ b/docs/api.rst
@@ -1,8 +1,8 @@
-:og:description: Comprehensive API documentation for rubin.rag.
+:og:description: Comprehensive API documentation for euclid.rag.
 
 ####################
 Python API reference
 ####################
 
-.. automodapi:: rubin.rag
+.. automodapi:: euclid.rag
    :include-all-objects:
diff --git a/docs/conf.py b/docs/conf.py
index 3fd6377..e919288 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -1 +1,77 @@
-from documenteer.conf.guide import *
+import os
+import sys
+
+
+# At top of conf.py, after imports:
+rst_epilog = open(
+    os.path.join(os.path.dirname(__file__), "_rst_epilog.rst"),
+    encoding="utf-8",
+).read()
+
+# Make sure Sphinx can import your package under python/euclid/rag
+sys.path.insert(0, os.path.abspath("../python"))
+
+# ——————————————————————————————
+# Project information
+# ——————————————————————————————
+project = "euclid_rag"
+author = "Euclid Collaboration"
+release = "0.1.0"  # bump to your current version
+
+# ——————————————————————————————
+# Sphinx extensions
+# ——————————————————————————————
+extensions = [
+    "sphinx.ext.autodoc",  # for Python docstring extraction
+    "sphinx.ext.napoleon",  # for Google/NumPy style docstrings
+    "sphinx.ext.intersphinx",  # to link out to Python, NumPy, etc.
+    "myst_parser",  # if you want Markdown support,
+    "sphinx_automodapi.automodapi",  # for module-level docstrings
+]
+
+# ——————————————————————————————
+# Templates and static files
+# ——————————————————————————————
+templates_path = ["_templates"]
+exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "_rst_epilog.rst"]
+
+
+html_static_path = ["_static"]  # create this folder (even if empty)
+html_css_files = []  # add any custom.css here
+
+# ——————————————————————————————
+# HTML output settings
+# ——————————————————————————————
+html_theme = "pydata_sphinx_theme"
+html_title = project
+html_short_title = project
+html_logo = None
+html_favicon = None
+
+html_theme_options = {
+    "external_links": [],
+    "icon_links": [],
+    "pygment_light_style": "friendly",
+    "pygment_dark_style": "monokai",
+    "logo": {
+        "text": project,
+        "alt_text": project,
+        "image_light": "_static/logo-light.png",
+        "image_dark": "_static/logo-dark.png",
+        "image_class": "logo",
+        "image_style": "default",
+    },
+}
+
+
+# Disable the “Edit on GitHub” button entirely
+html_context = {"show_github_edit_link": False, "default_mode": "auto"}
+
+# ——————————————————————————————
+# Intersphinx mappings
+# ——————————————————————————————
+intersphinx_mapping = {
+    "python": ("https://docs.python.org/3", None),
+    "numpy": ("https://numpy.org/doc/stable/", None),
+    "astropy": ("https://docs.astropy.org/en/stable/", None),
+}
diff --git a/docs/developer-guide/development.rst b/docs/developer-guide/development.rst
index 5c82b81..326802a 100644
--- a/docs/developer-guide/development.rst
+++ b/docs/developer-guide/development.rst
@@ -1,82 +1,78 @@
-#################
+##################
 Development guide
-#################
+##################
 
-This page provides procedures and guidelines for developing and contributing to rubin_rag.
+This page provides procedures and guidelines for developing and contributing to **euclid_rag**.
 
 Scope of contributions
 ======================
 
-rubin_rag is an open source package, meaning that you can contribute to rubin_rag itself, or fork rubin_rag for your own purposes.
+**euclid_rag** is an open-source package. You may contribute to `euclid_rag <https://github.com/jeipollack/euclid_rag>`_ itself, or fork it for your own purposes.
 
-Since rubin_rag is intended for internal use by Rubin Observatory, community contributions can only be accepted if they align with Rubin Observatory's aims.
-For that reason, it's a good idea to propose changes with a new `GitHub issue`_ before investing time in making a pull request.
+If you plan to submit improvements or changes, it's a good idea to propose them in a `GitHub issue`_ before investing time in a pull request.
 
-rubin_rag is developed by the Rubin Observatory SQuaRE team.
-
-.. _GitHub issue: https://github.com/lsst-dm/rubin_rag/issues/new
+.. _GitHub issue: https://github.com/jeipollack/euclid_rag/issues
 
 .. _dev-environment:
 
 Setting up a local development environment
 ==========================================
 
-To develop rubin_rag, create a virtual environment with your method of choice (like virtualenvwrapper) and then clone or fork, and install:
+To develop ``euclid_rag``, create a virtual environment with your method of choice (e.g. ``venv``, ``virtualenvwrapper``), then clone and install:
 
 .. code-block:: sh
 
-   git clone https://github.com/lsst-dm/rubin_rag.git
-   cd rubin_rag
+   git clone https://github.com/jeipollack/euclid_rag.git
+   cd euclid_rag
    make init
 
-This init step does three things:
+This ``init`` step does three things:
 
-1. Installs rubin_rag in an editable mode with its "dev" extra that includes test and documentation dependencies.
-2. Installs pre-commit and tox.
+1. Installs ``euclid_rag`` in editable mode with the "dev" extra that includes test and documentation dependencies.
+2. Installs ``pre-commit`` and ``tox``.
 3. Installs the pre-commit hooks.
 
-You must have Docker installed and configured so that your user can start Docker containers in order to run the test suite.
+You should have Docker installed and configured to run the test suite in full, if needed.
 
 .. _pre-commit-hooks:
 
 Pre-commit hooks
 ================
 
-The pre-commit hooks, which are automatically installed by running the :command:`make init` command on :ref:`set up <dev-environment>`, ensure that files are valid and properly formatted.
-Some pre-commit hooks automatically reformat code:
+The pre-commit hooks, installed via the ``make init`` command, ensure files are valid and formatted.
+
+Some hooks automatically reformat code:
 
 ``ruff``
-    Automatically formats Python code and applies safe fixes to lint issues.
+    Formats Python code and applies safe lint fixes.
 
 ``blacken-docs``
-    Automatically formats Python code in reStructuredText documentation and docstrings.
+    Formats Python code within reStructuredText documentation and docstrings.
 
-When these hooks fail, your Git commit will be aborted.
-To proceed, stage the new modifications and proceed with your Git commit.
+If a hook fails, your Git commit will be aborted. Fix the issues, stage the changes, and retry your commit.
 
 .. _dev-run-tests:
 
 Running tests
 =============
 
-To test the library, run tox_, which tests the library the same way that the CI workflow does:
+To run the full test suite, use ``tox``, which mirrors how CI runs tests:
 
 .. code-block:: sh
 
    tox run
 
-To see a listing of test environments, run:
+To see available environments:
 
 .. code-block:: sh
 
    tox list
 
-To run a specific test or list of tests, you can add test file names (and any other pytest_ options) after ``--`` when executing the ``py`` tox environment.
-For example:
+To run specific tests via ``pytest``, use:
 
 .. code-block:: sh
 
-   tox run -e py -- tests/database_test.py
+   tox run -e py -- tests/example_test.py
 
 .. _dev-build-docs:
 
@@ -91,47 +87,44 @@ Documentation is built with Sphinx_:
 
    tox run -e docs
 
-The built documentation is located in the :file:`docs/_build/html` directory.
+Output will be in the ``docs/_build/html`` directory.
 
 Updating pre-commit
 ===================
 
-To update the versions of the pre-commit hooks, run:
+To update versions of hooks:
 
 .. code-block:: sh
 
    pre-commit autoupdate
 
-You may wish to do this at the start of a development cycle so that you're using the latest versions of the linters.
+This is useful at the start of a new development cycle.
 
 .. _dev-change-log:
 
 Updating the change log
 =======================
 
-rubin_rag uses scriv_ to maintain its change log.
+**euclid_rag** uses `scriv`_ to manage its change log.
+
+To create a new entry:
+
+.. code-block:: sh
+
+   scriv create --edit
 
-When preparing a pull request, run :command:`scriv create`.
-This will create a change log fragment in :file:`changelog.d`.
-Edit that fragment, removing the sections that do not apply and adding entries fo this pull request.
-You can pass the ``--edit`` flag to :command:`scriv create` to open the created fragment automatically in an editor.
+This generates a fragment in ``changelog.d/``. Remove unused sections and summarize your changes.
 
-Change log entries use the following sections:
+Use these section headers:
 
 .. rst-class:: compact
 
 - **Backward-incompatible changes**
 - **New features**
 - **Bug fixes**
-- **Other changes** (for minor, patch-level changes that are not bug fixes, such as logging formatting changes or updates to the documentation)
+- **Other changes**
 
-These entries will eventually be cut and pasted into the release description for the next release, so the Markdown for the change descriptions should be compatible with GitHub's Markdown conventions for the release description.
-Specifically:
-
-- Each bullet point should be entirely on one line, even if it contains multiple sentences.
-  This is an exception to the normal documentation convention of a newline after each sentence.
-  Unfortunately, GitHub interprets those newlines as hard line breaks, so they would result in an ugly release description.
-- Avoid using too much complex markup, such as nested bullet lists, since the formatting in the GitHub release description may not be what you expect and manually editing it is tedious.
+Keep bullet points on one line each to format well on GitHub.
 
 .. _style-guide:
 
@@ -141,25 +134,15 @@ Style guide
 Code
 ----
 
-- The code style follows :pep:`8`, though in practice lean on Black and isort to format the code for you.
-
+- Follow :pep:`8`. Use ``black`` and ``isort`` via pre-commit.
 - Use :pep:`484` type annotations.
-  The ``tox run -e typing`` test environment, which runs mypy_, ensures that the project's types are consistent.
-
-- Write tests for Pytest_.
+- Write tests using ``pytest``.
 
 Documentation
 -------------
 
-- Follow the `LSST DM User Documentation Style Guide`_, which is primarily based on the `Google Developer Style Guide`_.
-
-- Document the Python API with numpydoc-formatted docstrings.
-  See the `LSST DM Docstring Style Guide`_.
-
-- Follow the `LSST DM ReStructuredTextStyle Guide`_.
-  In particular, ensure that prose is written **one-sentence-per-line** for better Git diffs.
+- Follow the `Google Developer Style Guide`_ for user-facing docs.
+- Use ``numpydoc``-formatted docstrings.
+- Write one sentence per line in reStructuredText.
 
-.. _`LSST DM User Documentation Style Guide`: https://developer.lsst.io/user-docs/index.html
-.. _`Google Developer Style Guide`: https://developers.google.com/style/
-.. _`LSST DM Docstring Style Guide`: https://developer.lsst.io/python/style.html
-.. _`LSST DM ReStructuredTextStyle Guide`: https://developer.lsst.io/restructuredtext/style.html
+.. _Google Developer Style Guide: https://developers.google.com/style/
diff --git a/docs/developer-guide/index.rst b/docs/developer-guide/index.rst
index 0d567f1..c95e5c6 100644
--- a/docs/developer-guide/index.rst
+++ b/docs/developer-guide/index.rst
@@ -1,10 +1,10 @@
-:og:description: Learn how to contribute to the rubin_rag open source project.
+:og:description: Learn how to contribute to the euclid_rag open source project.
 
 ############
 Contributing
 ############
 
-Learn how to contribute to the rubin_rag open source project.
+Learn how to contribute to the **euclid_rag** open source project, including how to set up a development environment, run tests, and prepare a release.
 
 .. toctree::
    :caption: Guides
diff --git a/docs/developer-guide/release.rst b/docs/developer-guide/release.rst
index 84df9a3..ded2329 100644
--- a/docs/developer-guide/release.rst
+++ b/docs/developer-guide/release.rst
@@ -2,102 +2,88 @@
 Release procedure
 #################
 
-This page gives an overview of how rubin_rag releases are made.
-This information is only useful for maintainers.
+This page provides an overview of how `euclid_rag <https://github.com/jeipollack/euclid_rag>`_ releases are made.
+This information is primarily useful for maintainers.
 
-rubin_rag's releases are largely automated through GitHub Actions (see the `ci.yaml`_ workflow file for details).
-When a semantic version tag is pushed to GitHub, `rubin_rag is released to PyPI`_ with that version.
-Similarly, documentation is built and pushed for each version (see https://rubin_rag.lsst.io/v).
+Releases are largely automated through GitHub Actions (see the `ci.yaml`_ workflow file for details).
+When a semantic version tag is pushed to GitHub, ``euclid_rag`` is automatically `released to PyPI`_ (coming soon) with that version.
+Documentation is built and published for each version (see `Euclid RAG Documentation`_.).
 
-.. _`rubin_rag is released to PyPI`: https://pypi.org/project/rubin_rag/
-.. _`ci.yaml`: https://github.com/lsst-dm/rubin_rag/blob/main/.github/workflows/ci.yaml
+.. _`Euclid RAG Documentation`: https://github.io/jeipollack/euclid_rag/
+.. _`released to PyPI`: https://pypi.org/
+.. _`ci.yaml`: https://github.com/jeipollack/euclid_rag/blob/main/.github/workflows/ci.yaml
 
 .. _regular-release:
 
 Regular releases
 ================
 
-Regular releases happen from the ``main`` branch after changes have been merged.
-From the ``main`` branch you can release a new major version (``X.0.0``), a new minor version of the current major version (``X.Y.0``), or a new patch of the current major-minor version (``X.Y.Z``).
-See :ref:`backport-release` to patch an earlier major-minor version.
+Releases are made from the ``main`` branch after changes are merged.
+You can release a new major version (``X.0.0``), a new minor version (``X.Y.0``), or a new patch version (``X.Y.Z``).
+To patch an earlier version, see :ref:`backport-release`.
 
-Release tags are semantic version identifiers following the :pep:`440` specification.
+Release tags use semantic versioning according to the :pep:`440` spec.
 
 1. Change log and documentation
 -------------------------------
 
-Change log messages for each release are accumulated using scriv_.
-See :ref:`dev-change-log` in the *Developer guide* for more details.
+Changelog messages are collected using scriv_.
+See :ref:`dev-change-log` in the *Developer Guide* for more.
 
-When it comes time to make the release, there should be a collection of change log fragments in :file:`changelog.d`.
-Those fragments will make up the change log for the new release.
+Before release, gather the changelog fragments in :file:`changelog.d` by running:
 
-Review those fragments to determine the version number of the next release.
-Safir follows semver_, so follow its rules to pick the next version:
+.. code-block:: bash
 
-.. rst-class:: compact
+   scriv collect --version X.Y.Z
 
-- If there are any backward-incompatible changes, incremeent the major version number and set the other numbers to 0.
-- If there are any new features, increment the minor version number and set the patch version to 0.
-- Otherwise, increment the patch version number.
+This creates a full changelog entry in :file:`CHANGELOG.md` and removes the fragments.
 
-Then, run ``scriv collect --version <version>`` specifying the version number you decided on.
-This will delete the fragment files and collect them into :file:`CHANGELOG.md` under an entry for the new release.
-Review that entry and edit it as needed (proofread, change the order to put more important things first, etc.).
-scriv will put blank lines between entries from different files.
-You may wish to remove those blank lines to ensure consistent formatting by various Markdown parsers.
-
-Finally, create a PR from those changes and merge it before continuing with the release process.
+Review, edit, and commit the updated changelog.
+Create a PR, get it merged, and then proceed to tagging the release.
 
 2. GitHub release and tag
 -------------------------
 
-Use `GitHub's Release feature <https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository>`__ to create releases and their corresponding Git tags.
-
-1. Specify a tag from the appropriate branch (typically ``main``).
-   This tag's name is :pep:`440` and is usually formatted at ``X.Y.Z`` (without a ``v`` prefix).
-
-2. For the release name, repeat the version string.
+Use [GitHub Releases](https://docs.github.com/en/repositories/releasing-projects-on-github/managing-releases-in-a-repository) to publish the new version.
 
-3. Fill in the release notes, copied from the release notes.
-   You can use GitHub's change log feature to additionally generate a list of PRs included in the release.
+- Tag from the correct branch (usually ``main``).
+- Use semantic versioning like ``X.Y.Z`` (no ``v`` prefix).
+- Set the release name to the version string.
+- Use the changelog content in the release notes.
 
-The tag **must** follow the :pep:`440` specification since rubin_rag uses setuptools_scm_ to set version metadata based on Git tags.
-In particular, **don't** prefix the tag with ``v``.
+Tags **must** follow :pep:`440`, since version metadata is derived using setuptools_scm_.
 
-.. _setuptools_scm: https://github.com/pypa/setuptools_scm
+Once tagged, the GitHub Actions workflow will publish the package to PyPI and update the documentation site.
 
-The `ci.yaml`_ GitHub Actions workflow uploads the new release to PyPI and documentation to https://rubin_rag.lsst.io.
+.. _setuptools_scm: https://github.com/pypa/setuptools-scm
 
 .. _backport-release:
 
 Backport releases
 =================
 
-The regular release procedure works from the main line of development on the ``master`` Git branch.
-To create a release that patches an earlier major or minor version, you need to release from a **release branch.**
+To patch older major/minor versions, use a **release branch** named after the ``X.Y`` version.
 
 Creating a release branch
 -------------------------
 
-Release branches are named after the major and minor components of the version string: ``X.Y``.
-If the release branch doesn't already exist, check out the latest patch for that major-minor version:
+If a release branch does not yet exist:
 
-.. code-block:: sh
+.. code-block:: bash
 
    git checkout X.Y.Z
    git checkout -b X.Y
-   git push -u
+   git push -u origin X.Y
 
 Developing on a release branch
 ------------------------------
 
-Once a release branch exists, it becomes the "main" branch for patches of that major-minor version.
-Pull requests should be based on, and merged into, the release branch.
-
-If the development on the release branch is a backport of commits on the ``main`` branch, use ``git cherry-pick`` to copy those commits into a new pull request against the release branch.
+Use the release branch for all patch-level updates.
+Backport changes from ``main`` using ``git cherry-pick`` if needed.
 
 Releasing from a release branch
 -------------------------------
 
-Releases from a release branch are equivalent to :ref:`regular releases <regular-release>`, except that the release branch takes the role of the ``main`` branch.
+Follow the same process as a regular release, but tag from the release branch instead of ``main``.
+``ci.yaml`` will still handle publishing to PyPI and updating the documentation.
+
diff --git a/docs/documenteer.toml b/docs/documenteer.toml
deleted file mode 100644
index 645535f..0000000
--- a/docs/documenteer.toml
+++ /dev/null
@@ -1,16 +0,0 @@
-[project]
-title = "rubin_rag"
-copyright = "2025 Association of Universities for Research in Astronomy, Inc. (AURA)"
-
-[project.python]
-package = "rubin_rag"
-
-[sphinx]
-rst_epilog_file = "_rst_epilog.rst"
-disable_primary_sidebars = [
-    "index",
-    "changelog",
-]
-
-[sphinx.intersphinx.projects]
-python = "https://docs.python.org/3/"
diff --git a/docs/index.rst b/docs/index.rst
index 6bf4c52..771b6d8 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -1,19 +1,19 @@
-:og:description: Rubin RAG-basd LLM Application
+:og:description: Euclid RAG LLM Application
 :html_theme.sidebar_secondary.remove:
 
-#########
-rubin_rag
-#########
+##########
+euclid_rag
+##########
 
-Rubin RAG-basd LLM Application
+Euclid RAG LLM Application
 
-Install rubin_rag from PyPI:
+Install euclid_rag from PyPI:
 
 .. code-block:: bash
 
-   pip install rubin_rag
+   pip install euclid_rag
 
-rubin_rag is developed on GitHub at https://github.com/lsst-dm/rubin_rag.
+euclid_rag is developed on GitHub at https://github.com/jeipollack/euclid_rag.
 
 .. toctree::
    :hidden:
@@ -22,3 +22,4 @@ rubin_rag is developed on GitHub at https://github.com/lsst-dm/rubin_rag.
    API <api>
    Change log <changelog>
    Contributing <developer-guide/index>
+
diff --git a/python/euclid/rag/app.py b/python/euclid/rag/app.py
index a1a977a..dea9fdd 100644
--- a/python/euclid/rag/app.py
+++ b/python/euclid/rag/app.py
@@ -5,17 +5,19 @@
 # This product includes software developed by the LSST Project (https://www.lsst.org).
 #
 # Originally licensed under the MIT License.
-# Modifications for the Euclid RAG application were made by members of the Euclid Science Ground Segment.
+# Modifications for the Euclid RAG application were made by members of the
+# Euclid Science Ground Segment.
 #
-# This program is now licensed under the GNU Lesser General Public License (LGPL) v3.0,
-# as published by the Free Software Foundation.
+# This program is now licensed under the GNU Lesser General Public License
+# (LGPL) v3.0, as published by the Free Software Foundation.
 #
-# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
-# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.
 # See the GNU Lesser General Public License for more details.
 #
-# You should have received a copy of the GNU Lesser General Public License along with this program.
-# If not, see <https://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
 #
 
 
@@ -32,12 +34,12 @@
     StreamlitChatMessageHistory,
 )
 
-from rubin.rag.chatbot import (
+from euclid.rag.chatbot import (
     configure_retriever,
     create_qa_chain,
     handle_user_input,
 )
-from rubin.rag.layout import (
+from euclid.rag.layout import (
     setup_header_and_footer,
     setup_landing_page,
     setup_sidebar,
diff --git a/python/euclid/rag/chatbot.py b/python/euclid/rag/chatbot.py
index e8bb14d..89ac305 100644
--- a/python/euclid/rag/chatbot.py
+++ b/python/euclid/rag/chatbot.py
@@ -5,17 +5,19 @@
 # This product includes software developed by the LSST Project (https://www.lsst.org).
 #
 # Originally licensed under the MIT License.
-# Modifications for the Euclid RAG application were made by members of the Euclid Science Ground Segment.
+# Modifications for the Euclid RAG application were made by members of the
+# Euclid Science Ground Segment.
 #
-# This program is now licensed under the GNU Lesser General Public License (LGPL) v3.0,
-# as published by the Free Software Foundation.
+# This program is now licensed under the GNU Lesser General Public License
+# (LGPL) v3.0, as published by the Free Software Foundation.
 #
-# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
-# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.
 # See the GNU Lesser General Public License for more details.
 #
-# You should have received a copy of the GNU Lesser General Public License along with this program.
-# If not, see <https://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
 #
 
 
@@ -102,8 +104,8 @@ def create_qa_chain(
     llm = ChatOpenAI(model="gpt-4o-mini", temperature=0, streaming=True)
 
     # Define the system message template
-    system_template = """You are Rubin AI Assistant, a helpful assistant at
-    Vera C Rubin Observatory.
+    system_template = """You are Euclid AI Assistant, a helpful assistant
+    within the Euclid Consortium Science Ground Segment.
     Do your best to answer the questions in as much detail as possible.
     Do not attempt to provide an answer if you do not know the answer.
     In your response, do not recommend reading elsewhere.
@@ -150,7 +152,7 @@ def handle_user_input(
 
     # Handle new user input
     if user_query := st.chat_input(
-        placeholder="Message Rubin AI", on_submit=submit_text
+        placeholder="Message Euclid AI", on_submit=submit_text
     ):
         with st.chat_message("user", avatar=avatar_images["human"]):
             st.write(user_query)
diff --git a/python/euclid/rag/custom_weaviate_vector_store.py b/python/euclid/rag/custom_weaviate_vector_store.py
index 522c04c..e05b938 100644
--- a/python/euclid/rag/custom_weaviate_vector_store.py
+++ b/python/euclid/rag/custom_weaviate_vector_store.py
@@ -5,17 +5,19 @@
 # This product includes software developed by the LSST Project (https://www.lsst.org).
 #
 # Originally licensed under the MIT License.
-# Modifications for the Euclid RAG application were made by members of the Euclid Science Ground Segment.
+# Modifications for the Euclid RAG application were made by members of the
+# Euclid Science Ground Segment.
 #
-# This program is now licensed under the GNU Lesser General Public License (LGPL) v3.0,
-# as published by the Free Software Foundation.
+# This program is now licensed under the GNU Lesser General Public License
+# (LGPL) v3.0, as published by the Free Software Foundation.
 #
-# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
-# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.
 # See the GNU Lesser General Public License for more details.
 #
-# You should have received a copy of the GNU Lesser General Public License along with this program.
-# If not, see <https://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
 #
 
 
diff --git a/python/euclid/rag/layout.py b/python/euclid/rag/layout.py
index 3c825ed..7ac2055 100644
--- a/python/euclid/rag/layout.py
+++ b/python/euclid/rag/layout.py
@@ -5,17 +5,19 @@
 # This product includes software developed by the LSST Project (https://www.lsst.org).
 #
 # Originally licensed under the MIT License.
-# Modifications for the Euclid RAG application were made by members of the Euclid Science Ground Segment.
+# Modifications for the Euclid RAG application were made by members of the
+# Euclid Science Ground Segment.
 #
-# This program is now licensed under the GNU Lesser General Public License (LGPL) v3.0,
-# as published by the Free Software Foundation.
+# This program is now licensed under the GNU Lesser General Public License
+# (LGPL) v3.0, as published by the Free Software Foundation.
 #
-# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
-# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.
 # See the GNU Lesser General Public License for more details.
 #
-# You should have received a copy of the GNU Lesser General Public License along with this program.
-# If not, see <https://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
 #
 
 
diff --git a/python/euclid/rag/streamlit_callback.py b/python/euclid/rag/streamlit_callback.py
index 42f756d..cc30a54 100644
--- a/python/euclid/rag/streamlit_callback.py
+++ b/python/euclid/rag/streamlit_callback.py
@@ -5,17 +5,19 @@
 # This product includes software developed by the LSST Project (https://www.lsst.org).
 #
 # Originally licensed under the MIT License.
-# Modifications for the Euclid RAG application were made by members of the Euclid Science Ground Segment.
+# Modifications for the Euclid RAG application were made by members of the
+# Euclid Science Ground Segment.
 #
-# This program is now licensed under the GNU Lesser General Public License (LGPL) v3.0,
-# as published by the Free Software Foundation.
+# This program is now licensed under the GNU Lesser General Public License
+# (LGPL) v3.0, as published by the Free Software Foundation.
 #
-# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
-# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.
 # See the GNU Lesser General Public License for more details.
 #
-# You should have received a copy of the GNU Lesser General Public License along with this program.
-# If not, see <https://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
 #
 
 
diff --git a/tox.ini b/tox.ini
index 4a81e9a..7fe94e7 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,6 +1,6 @@
 [tox]
 envlist = py,coverage-report,typing,lint,docs,docs-linkcheck
-isolated_build = True
+isolated_build = true
 
 [testenv]
 description = Run pytest against {envname}.
@@ -28,7 +28,7 @@ deps =
     mypy
     types-requests
 commands =
-    mypy python/rubin tests
+    mypy python/euclid tests
 
 [testenv:lint]
 description = Lint codebase by running pre-commit (Black, isort, Flake8).
@@ -40,7 +40,7 @@ commands = pre-commit run --all-files
 [testenv:docs]
 description = Build documentation (HTML) with Sphinx.
 commands =
-    sphinx-build --keep-going -n -W -T -b html -d {envtmpdir}/doctrees docs docs/_build/html
+    sphinx-build --keep-going -n -T -b html -d {envtmpdir}/doctrees docs docs/_build/html
 
 [testenv:docs-linkcheck]
 description = Check links in the documentation.
@@ -48,3 +48,4 @@ allowlist_externals =
     make
 commands =
     make linkcheck
+


Reviews:
user: login: roryclaydon1994
body: ## Review Feedback

I had a quick scan of the changes. In general these look fine as it's mostly updating name changes. I haven't had a chance to run any of the updated pipelines or test the build instructions, so I would suggest someone else has a go, or if @jeipollack has time, add some examples that these have been tested to the PR. Thank you :+1: 
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-04-28T09:01:30Z
user: login: jeipollack
state: COMMENTED
author_association: OWNER
submitted_at: 2025-04-28T09:14:51Z
user: login: jeipollack
state: COMMENTED
author_association: OWNER
submitted_at: 2025-04-28T09:15:33Z
user: login: jeipollack
state: COMMENTED
author_association: OWNER
submitted_at: 2025-04-28T09:27:40Z
user: login: jeipollack
state: COMMENTED
author_association: OWNER
submitted_at: 2025-04-28T09:32:55Z
user: login: Rolgim
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-04-28T12:57:17Z
user: login: jeipollack
state: COMMENTED
author_association: OWNER
submitted_at: 2025-04-28T13:24:31Z
user: login: jeipollack
state: COMMENTED
author_association: OWNER
submitted_at: 2025-04-28T13:32:19Z

Review comments:
diff_hunk: @@ -61,60 +50,33 @@ jobs:
           tox-plugins: tox-uv
 
   build:
-    permissions:
-        contents: read
-        packages: write  # <-- This is where you set the GITHUB_TOKEN permissions
-
+    if: false  # 🛑 Disabled for now (enable when ready to push docker images)
path: .github/workflows/ci.yaml
user: login: roryclaydon1994
body: I would recommend avoiding adding emojis to any part of the source code
created_at: 2025-04-28T08:34:11Z
author_association: COLLABORATOR
diff_hunk: @@ -1 +1,81 @@
-from documenteer.conf.guide import *
+import os
path: docs/conf.py
user: login: roryclaydon1994
body: This looks like it's generated with AI :) Any reason not to use `documenteer.conf.guide`? Just wondering how the original method worked, but this is quite clear
created_at: 2025-04-28T08:50:00Z
author_association: COLLABORATOR
diff_hunk: @@ -1 +1,81 @@
-from documenteer.conf.guide import *
+import os
path: docs/conf.py
user: login: jeipollack
body: Yes, I am into "vibe-coding" especially for pet projects and bc I am working while on vacation. 😎 I removed it because `documenteer.conf.guide` is a package for sphinx builds that creates documentation in the LSST doc style with LSST logos and other hidden stuff. 

It was best to remove it.
created_at: 2025-04-28T09:14:51Z
author_association: OWNER
diff_hunk: @@ -61,60 +50,33 @@ jobs:
           tox-plugins: tox-uv
 
   build:
-    permissions:
-        contents: read
-        packages: write  # <-- This is where you set the GITHUB_TOKEN permissions
-
+    if: false  # 🛑 Disabled for now (enable when ready to push docker images)
path: .github/workflows/ci.yaml
user: login: jeipollack
body: Okay! Yes, this was an AI feature.  but this reply isn't  :D 
created_at: 2025-04-28T09:15:33Z
author_association: OWNER
diff_hunk: @@ -61,60 +50,33 @@ jobs:
           tox-plugins: tox-uv
 
   build:
-    permissions:
-        contents: read
-        packages: write  # <-- This is where you set the GITHUB_TOKEN permissions
-
+    if: false  # 🛑 Disabled for now (enable when ready to push docker images)
path: .github/workflows/ci.yaml
user: login: jeipollack
body: Emojis removed
created_at: 2025-04-28T09:27:40Z
author_association: OWNER
diff_hunk: @@ -1 +1,81 @@
-from documenteer.conf.guide import *
+import os
path: docs/conf.py
user: login: jeipollack
body: My memory has come back to me. Yes, this `conf.py` was edited with the help of AI. I have only used sphinx once so I wanted a bit of quick help.

The file `conf.py` was empty before because there was a `documenteer.toml` file that the LSST package documenteer used with the config settings.  As stated above, because I couldn't figure out how to get rid of the LSST logo and feared other hidden LSST features, it was best to start from scratch.
created_at: 2025-04-28T09:32:55Z
author_association: OWNER
diff_hunk: @@ -1 +1,80 @@
-from documenteer.conf.guide import *
+import os
+import sys
+import warnings
+
+warnings.filterwarnings("ignore", category=DeprecationWarning)
path: docs/conf.py
user: login: Rolgim
body: Question on this, do we want to filter deprecation warnings? In my opinion, it's better to have them in the development phase, so as to choose on a case-by-case basis.
created_at: 2025-04-28T11:33:46Z
author_association: COLLABORATOR
diff_hunk: @@ -1 +1,80 @@
-from documenteer.conf.guide import *
+import os
+import sys
+import warnings
+
+warnings.filterwarnings("ignore", category=DeprecationWarning)
+
+
+# At top of conf.py, after imports:
+rst_epilog = open(
+    os.path.join(os.path.dirname(__file__), "_rst_epilog.rst"),
+    encoding="utf-8",
+).read()
+
+# Make sure Sphinx can import your package under python/euclid/rag
+sys.path.insert(0, os.path.abspath("../python"))
+
+# ——————————————————————————————
+# Project information
+# ——————————————————————————————
+project = "euclid_rag"
+author = "Euclid Collaboration"
+release = "0.1.0"  # bump to your current version
path: docs/conf.py
user: login: Rolgim
body:  0.10.0 (pre-commit) or 0.1.0?
created_at: 2025-04-28T12:12:11Z
author_association: COLLABORATOR
diff_hunk: @@ -1 +1,80 @@
-from documenteer.conf.guide import *
+import os
+import sys
+import warnings
+
+warnings.filterwarnings("ignore", category=DeprecationWarning)
+
+
+# At top of conf.py, after imports:
+rst_epilog = open(
+    os.path.join(os.path.dirname(__file__), "_rst_epilog.rst"),
+    encoding="utf-8",
+).read()
path: docs/conf.py
user: login: Rolgim
body: Replace with (to avoid forgetting to close the file):
```
rst_epilog_path = os.path.join(os.path.dirname(__file__), "_rst_epilog.rst")
with open(rst_epilog_path, encoding="utf-8") as f:
    rst_epilog = f.read()
```
created_at: 2025-04-28T12:37:36Z
author_association: COLLABORATOR
diff_hunk: @@ -1 +1,81 @@
-from documenteer.conf.guide import *
+import os
path: docs/conf.py
user: login: Rolgim
body: Beginner in sphinx too, but perhaps we could use https://gitlab.euclid-sgs.uk/ST-TOOLS/Elements/-/blob/release-6.2/cmake/doc/Sphinx_conf.py.in as a guideline
created_at: 2025-04-28T12:43:02Z
author_association: COLLABORATOR
path: LICENSE
user: login: Rolgim
body: Tricky question, but shouldn't we use the SGS header (below) for the SGS RAG?
```

# Copyright (C) 2012-2025 Euclid Science Ground Segment
#
# This library is free software; you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation; either version 3.0 of the License, or (at your option)
# any later version.
#
# This library is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this library; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

```
created_at: 2025-04-28T12:47:58Z
author_association: COLLABORATOR
diff_hunk: @@ -5,17 +5,19 @@
 # This product includes software developed by the LSST Project (https://www.lsst.org).
 #
 # Originally licensed under the MIT License.
-# Modifications for the Euclid RAG application were made by members of the Euclid Science Ground Segment.
+# Modifications for the Euclid RAG application were made by members of the
+# Euclid Science Ground Segment.
path: python/euclid/rag/app.py
user: login: Rolgim
body: Same question as in LICENSE - shouldn't we mix with the SGS header?
created_at: 2025-04-28T12:54:01Z
author_association: COLLABORATOR
path: LICENSE
user: login: jeipollack
body: Thanks for sharing. Maybe we can talk about it in today's meeting.
created_at: 2025-04-28T13:24:31Z
author_association: OWNER
diff_hunk: @@ -1 +1,80 @@
-from documenteer.conf.guide import *
+import os
+import sys
+import warnings
+
+warnings.filterwarnings("ignore", category=DeprecationWarning)
path: docs/conf.py
user: login: jeipollack
body: True, while it appears in red all checks still pass when running `tox`, so I removed the filtering. 
created_at: 2025-04-28T13:32:19Z
author_association: OWNER

PR comments:
user: login: jeipollack
created_at: 2025-04-28T09:50:47Z
body: @roryclaydon1994 , I know you're busy but in case you wanted to test building yourself. Here are the steps.

1. Create conda environment with Python > 3.12
2. Inside euclid_rag run `make init` which will install all dependencies
3. Run `tox` in CLI
4. Open doc in browser with `open _build/html/index.html`

here are some snippets: 
![Screenshot 2025-04-28 at 11 47 49](https://github.com/user-attachments/assets/996863af-3b8e-49de-8ca0-0fb34b980e01)
![Screenshot 2025-04-28 at 11 48 42](https://github.com/user-attachments/assets/ac939d4d-22ec-4d82-acef-e25b1549d113)
![Screenshot 2025-04-28 at 11 51 18](https://github.com/user-attachments/assets/b0ff2238-75ed-4ff1-a9a7-a99750987e69)

CI checks are passing. I just decided to add `workflow_dispatch` to allow manual triggers.


author_association: OWNER
user: login: jeipollack
created_at: 2025-04-28T10:01:59Z
body: here's an example of `pre-commit` checks:
![Screenshot 2025-04-28 at 12 01 40](https://github.com/user-attachments/assets/db465240-37be-4c1f-b89a-f848719b2d5c)

author_association: OWNER