<feed xmlns='http://www.w3.org/2005/Atom'>
<title>vyos-documentation.git/docs/_templates/llms.txt.j2, branch circinus</title>
<subtitle>VyOS readthedocs (mirror of https://github.com/vyos/vyos-documentation.git)
</subtitle>
<id>https://git.amelek.net/vyos/vyos-documentation.git/atom?h=circinus</id>
<link rel='self' href='https://git.amelek.net/vyos/vyos-documentation.git/atom?h=circinus'/>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos-documentation.git/'/>
<updated>2026-05-07T06:34:22+00:00</updated>
<entry>
<title>docs(llms.txt): point links at .md sources, not .html</title>
<updated>2026-05-07T06:34:22+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@vyos.io</email>
</author>
<published>2026-05-07T06:34:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos-documentation.git/commit/?id=98183560bd92e8a21d709ac78afe6497ae0d2042'/>
<id>urn:sha1:98183560bd92e8a21d709ac78afe6497ae0d2042</id>
<content type='text'>
Per the [llms.txt spec](https://llmstxt.org/), `/llms.txt` links should
point at markdown files (the spec example: `[API docs](https://example.com/api.md)`).
We were using `.html` URLs, which still work but force LLM consumers
through HTML parsing for content that's already available as raw MyST
at the same path (the `.md` is copied to HTML root by
`_copy_md_sources`).

Pivot the curated llms.txt template to `.md` URLs across all 22
entries. Spec-compliant, no extra requests, LLMs get raw markdown
without the navigation chrome.

Verified locally: `/en/&lt;ver&gt;/&lt;page&gt;.md` returns 200 with raw MyST
content (frontmatter + body) for all linked paths on this branch.

Same pivot applied symmetrically across [#1874](https://github.com/vyos/vyos-documentation/pull/1874) (current),
[#1876](https://github.com/vyos/vyos-documentation/pull/1876) (sagitta), and [#1903](https://github.com/vyos/vyos-documentation/pull/1903) (circinus).

🤖 Generated by [robots](https://vyos.io)
</content>
</entry>
<entry>
<title>docs: render llms.txt at build time (circinus)</title>
<updated>2026-05-07T05:48:02+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@vyos.io</email>
</author>
<published>2026-05-07T05:48:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos-documentation.git/commit/?id=23d6a3ef8afb0fddc0cc7c4591014b971ee2edf4'/>
<id>urn:sha1:23d6a3ef8afb0fddc0cc7c4591014b971ee2edf4</id>
<content type='text'>
Parity with [#1874](https://github.com/vyos/vyos-documentation/pull/1874) (current) and [#1876](https://github.com/vyos/vyos-documentation/pull/1876)
(sagitta). Replaces the static `docs/_html_extra/llms.txt` with a Jinja
template (`docs/_templates/llms.txt.j2`) rendered at build time via a
`build-finished` hook in `conf.py`. URLs and the version line are
interpolated from `html_baseurl` and `release`, so the rendered file
always matches what circinus actually serves.

Hook behavior matches `current`/`sagitta` exactly, including the two
review-cycle hardenings landed on those PRs:

- Skips on builders other than `html` and `readthedocs` — the curated
  template encodes `.html` URLs which don't match `dirhtml` output.
- `RuntimeError` if `html_baseurl` is empty rather than silently
  rendering broken root-relative URLs.
- Jinja `Environment(undefined=StrictUndefined)` so a typo in
  `llms.txt.j2` raises at build time instead of writing a half-blank
  `llms.txt`.

The closed PR [#1875](https://github.com/vyos/vyos-documentation/pull/1875) was the previous attempt; this re-lands the change after the
post-flip rebase situation cleared.

Verified locally: hook tests (happy-path render, fail-fast on
`html_baseurl=None`/`''`, `StrictUndefined` catches `{{ relase }}`
typo, skips `dirhtml`, skips on build exception) pass against this
worktree.

\xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
</content>
</entry>
</feed>
