summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CLAUDE.md11
-rw-r--r--docs/conf.py4
2 files changed, 12 insertions, 3 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index 4785e8bc..7c204a96 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -107,9 +107,14 @@ Each configuration page should contain:
## LLM-Facing Files (`llms.txt`, `llms-full.txt`)
-Both files are regenerated on every Sphinx HTML build. They're shipped at the
-docs root for each version (`https://docs.vyos.io/en/<version>/llms.txt`,
-`.../llms-full.txt`).
+Both files are regenerated on every `html` and `readthedocs` builder run.
+The `dirhtml` builder is intentionally skipped (the curated template
+encodes `.html` URLs which don't match `dirhtml` output paths). Local
+`make dirhtml` won't emit `llms.txt` — production publishes via the
+`html`/`readthedocs` builders, where the file lands.
+
+Files are shipped at the docs root for each version
+(`https://docs.vyos.io/en/<version>/llms.txt`, `.../llms-full.txt`).
- **`llms-full.txt`** — auto-generated by the `sphinx_llms_txt` extension from
the full corpus. No curation; configured by `llms_txt_file = False` (which
diff --git a/docs/conf.py b/docs/conf.py
index 00324771..d3db8d2b 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -283,6 +283,10 @@ def _write_llms_txt(app, exception):
loader=FileSystemLoader(str(tpl_dir)),
undefined=StrictUndefined,
keep_trailing_newline=True,
+ # Plain-text template (not HTML), so HTML autoescape is not
+ # appropriate. Setting autoescape=False explicitly to silence
+ # bandit/ruff S701 and document the intent.
+ autoescape=False,
)
template = env.get_template('llms.txt.j2')
rendered = template.render(