From ab5bcd24bb8c3e311e31c09980c8defefb3c8e74 Mon Sep 17 00:00:00 2001 From: Yuriy Andamasov Date: Mon, 4 May 2026 11:07:46 +0300 Subject: docs: add llms.txt and llms-full.txt generation (sagitta) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Pin sphinx-llms-txt 0.7.1 and sphinx-sitemap 2.9.0 - Set html_baseurl to https://docs.vyos.io/en/sagitta/ - llms.txt rendered at build time from a Jinja template; llms-full.txt auto-generated by sphinx-llms-txt - Optional section adapted to sagitta layout (no contributing index, no VPP) - Same change applied to current and circinus in separate PRs 🤖 Generated by [robots](https://vyos.io) --- docs/_templates/llms.txt.j2 | 53 +++++++++++++++++++++++++++++++++++++++++++++ docs/conf.py | 30 +++++++++++++++++++++++-- 2 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 docs/_templates/llms.txt.j2 (limited to 'docs') diff --git a/docs/_templates/llms.txt.j2 b/docs/_templates/llms.txt.j2 new file mode 100644 index 00000000..e1e466a0 --- /dev/null +++ b/docs/_templates/llms.txt.j2 @@ -0,0 +1,53 @@ +# VyOS + +> VyOS is a free, open-source network operating system based on Debian GNU/Linux. +> It provides routing, firewall, and VPN functionality via a unified CLI using +> `set`/`delete`/`show` command hierarchy. This documentation covers {{ release }}. + +VyOS configuration follows a tree structure. All configuration commands start with +`set` (to add/change) or `delete` (to remove). Changes are staged and applied with +`commit`. The CLI hierarchy maps directly to the documentation structure. + +## Quick Start + +- [Quick Start Guide]({{ baseurl }}quick-start.html): Minimal setup walkthrough +- [CLI Overview]({{ baseurl }}cli.html): Command-line interface usage + +## Configuration + +- [Firewall]({{ baseurl }}configuration/firewall/index.html): Zone-based firewall, rules, groups +- [Interfaces]({{ baseurl }}configuration/interfaces/index.html): Ethernet, bonding, bridge, VLAN, tunnel, wireless +- [Protocols]({{ baseurl }}configuration/protocols/index.html): BGP, OSPF, IS-IS, static routing, MPLS +- [VPN]({{ baseurl }}configuration/vpn/index.html): IPsec, OpenVPN, WireGuard, L2TP, PPTP +- [NAT]({{ baseurl }}configuration/nat/index.html): Source NAT, destination NAT, NAT66 +- [System]({{ baseurl }}configuration/system/index.html): DNS, NTP, syslog, users, task scheduler +- [High Availability]({{ baseurl }}configuration/highavailability/index.html): VRRP +- [Load Balancing]({{ baseurl }}configuration/loadbalancing/index.html): WAN and reverse proxy +- [Containers]({{ baseurl }}configuration/container/index.html): Podman-based container support +- [PKI]({{ baseurl }}configuration/pki/index.html): Certificate management +- [Policy]({{ baseurl }}configuration/policy/index.html): Route maps, prefix lists, access lists +- [Traffic Policy]({{ baseurl }}configuration/trafficpolicy/index.html): QoS and shaping +- [Service]({{ baseurl }}configuration/service/index.html): DHCP, DNS forwarding, SNMP, SSH, HTTPS API +- [VRF]({{ baseurl }}configuration/vrf/index.html): Virtual routing and forwarding + +## Operations + +- [Operational Commands]({{ baseurl }}operation/index.html): Show, monitor, restart commands + +## Installation + +- [Installation Guide]({{ baseurl }}installation/index.html): Bare metal, virtual, cloud deployments + +## Automation + +- [Automation]({{ baseurl }}automation/index.html): Ansible, Terraform, HTTP API, NETCONF + +## Configuration Examples + +- [Blueprints]({{ baseurl }}configexamples/index.html): Real-world topology examples + +## Optional + +- [Build VyOS]({{ baseurl }}contributing/build-vyos.html): Building images from source +- [Development]({{ baseurl }}contributing/development.html): Development workflow +- [Debugging]({{ baseurl }}contributing/debugging.html): Debugging VyOS diff --git a/docs/conf.py b/docs/conf.py index 7d933306..9bfdd4d9 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -48,7 +48,9 @@ extensions = ['sphinx.ext.intersphinx', 'autosectionlabel', 'myst_parser', 'sphinx_design', - 'vyos' + 'vyos', + 'sphinx_llms_txt', + 'sphinx_sitemap', ] # Add any paths that contain templates here, relative to this directory. @@ -98,6 +100,15 @@ todo_include_todos = True # html_theme = "sphinx_rtd_theme" +html_baseurl = 'https://docs.vyos.io/en/sagitta/' + +# sphinx-sitemap: baseurl already includes /en/sagitta/, so skip lang+version +sitemap_url_scheme = '{link}' + +# sphinx-llms-txt: disable auto-generated llms.txt, keep curated render via setup +# hook; llms-full.txt is still auto-generated +llms_txt_file = False + # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. @@ -193,5 +204,20 @@ texinfo_documents = [ ] +def _write_llms_txt(app, exception): + if exception is not None or app.builder.name != 'html': + return + from pathlib import Path + from jinja2 import Template + tpl_path = Path(app.srcdir) / '_templates' / 'llms.txt.j2' + out_path = Path(app.outdir) / 'llms.txt' + baseurl = (app.config.html_baseurl or '').rstrip('/') + '/' + rendered = Template(tpl_path.read_text(encoding='utf-8')).render( + baseurl=baseurl, + release=app.config.release, + ) + out_path.write_text(rendered, encoding='utf-8') + + def setup(app): - pass + app.connect('build-finished', _write_llms_txt) -- cgit v1.2.3 From bfef17c8c31e217c57d028de86222b297a364da0 Mon Sep 17 00:00:00 2001 From: Yuriy Andamasov Date: Mon, 4 May 2026 11:15:36 +0300 Subject: docs: use canonical /en/1.4/ baseurl instead of /en/sagitta/ alias MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RTD redirects /en/sagitta/* to /en/1.4/*. Pointing html_baseurl at the canonical slug makes and the sitemap match the URL RTD actually serves, so crawlers skip the redirect hop. /en/sagitta/ still works as an alias. 🤖 Generated by [robots](https://vyos.io) --- docs/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'docs') diff --git a/docs/conf.py b/docs/conf.py index 9bfdd4d9..dff64f63 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -100,9 +100,9 @@ todo_include_todos = True # html_theme = "sphinx_rtd_theme" -html_baseurl = 'https://docs.vyos.io/en/sagitta/' +html_baseurl = 'https://docs.vyos.io/en/1.4/' -# sphinx-sitemap: baseurl already includes /en/sagitta/, so skip lang+version +# sphinx-sitemap: baseurl already includes /en/1.4/, so skip lang+version sitemap_url_scheme = '{link}' # sphinx-llms-txt: disable auto-generated llms.txt, keep curated render via setup -- cgit v1.2.3 From c7e09acb74cec3dc5e5218f6e5daa29f06f7a4dc Mon Sep 17 00:00:00 2001 From: Yuriy Andamasov Date: Wed, 6 May 2026 23:46:51 +0300 Subject: docs(conf.py): fail loudly when html_baseurl is missing Same fix as `current`: replace the silent `(app.config.html_baseurl or '').rstrip('/') + '/'` fallback with an explicit `RuntimeError`. Every supported branch sets html_baseurl, so a missing value would only ever happen as a regression. Addresses CodeRabbit review feedback on PR #1876. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io) --- docs/conf.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/conf.py b/docs/conf.py index 3af7b99b..4778063e 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -259,11 +259,17 @@ def _write_llms_txt(app, exception): if exception is not None or app.builder.name not in ( 'html', 'readthedocs'): return + if not app.config.html_baseurl: + # Fail loudly rather than rendering /quick-start.html etc. as a + # silently-broken root-relative URL — every supported branch + # sets html_baseurl, so a missing value is a regression. + raise RuntimeError( + 'html_baseurl must be set to render llms.txt') from pathlib import Path from jinja2 import Environment, StrictUndefined tpl_path = Path(app.srcdir) / '_templates' / 'llms.txt.j2' out_path = Path(app.outdir) / 'llms.txt' - baseurl = (app.config.html_baseurl or '').rstrip('/') + '/' + baseurl = app.config.html_baseurl.rstrip('/') + '/' # StrictUndefined: missing template variables raise rather than # silently render as empty strings, so a typo in llms.txt.j2 fails # the build instead of shipping a half-blank llms.txt. -- cgit v1.2.3 From 1b3277b4579a7b0a7231e3cfd5b98ac405ba45c0 Mon Sep 17 00:00:00 2001 From: Yuriy Andamasov Date: Thu, 7 May 2026 09:16:25 +0300 Subject: docs(conf.py): use FileSystemLoader/get_template for better tracebacks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Switch from `Environment.from_string(tpl_path.read_text(...))` to `Environment(loader=FileSystemLoader(...)).get_template('llms.txt.j2')`. When `StrictUndefined` raises on a typo in `llms.txt.j2` (e.g. `{{ relase }}`), the traceback now references the real template filename and line number instead of an anonymous in-memory template. That makes debugging template typos materially easier without changing any other behavior — same fail-fast guard, same trailing-newline handling, same rendered output. Same change 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) so the hook stays identical across branches. Addresses CodeRabbit/Copilot review feedback on PR #1903. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io) --- docs/conf.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'docs') diff --git a/docs/conf.py b/docs/conf.py index 4778063e..d2267dd0 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -266,15 +266,23 @@ def _write_llms_txt(app, exception): raise RuntimeError( 'html_baseurl must be set to render llms.txt') from pathlib import Path - from jinja2 import Environment, StrictUndefined - tpl_path = Path(app.srcdir) / '_templates' / 'llms.txt.j2' + from jinja2 import Environment, FileSystemLoader, StrictUndefined + tpl_dir = Path(app.srcdir) / '_templates' out_path = Path(app.outdir) / 'llms.txt' baseurl = app.config.html_baseurl.rstrip('/') + '/' - # StrictUndefined: missing template variables raise rather than - # silently render as empty strings, so a typo in llms.txt.j2 fails - # the build instead of shipping a half-blank llms.txt. - env = Environment(undefined=StrictUndefined, keep_trailing_newline=True) - template = env.from_string(tpl_path.read_text(encoding='utf-8')) + # FileSystemLoader + get_template (rather than from_string) makes + # Jinja tracebacks reference the real template filename and line + # number — useful when StrictUndefined trips on a typo in + # llms.txt.j2. StrictUndefined: missing template variables raise + # rather than silently render as empty strings, so a typo in + # llms.txt.j2 fails the build instead of shipping a half-blank + # llms.txt. + env = Environment( + loader=FileSystemLoader(str(tpl_dir)), + undefined=StrictUndefined, + keep_trailing_newline=True, + ) + template = env.get_template('llms.txt.j2') rendered = template.render( baseurl=baseurl, release=app.config.release, -- cgit v1.2.3 From ec20a9585043c11cf16be5cb9543f44a3763ee03 Mon Sep 17 00:00:00 2001 From: Yuriy Andamasov Date: Thu, 7 May 2026 09:25:56 +0300 Subject: docs(conf.py): set Jinja autoescape=False explicitly for llms.txt template MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The llms.txt template renders plain text (markdown), not HTML, so the HTML autoescape rules that bandit/ruff S701 flags don't apply. Explicit `autoescape=False` silences the lint while documenting the intent — there's no HTML context to escape into here. Behavior unchanged (Jinja's default `autoescape=False` was already in effect); this just makes it visible. Same change 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). Addresses CodeRabbit review feedback (S701) on PR #1876. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io) --- docs/conf.py | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'docs') diff --git a/docs/conf.py b/docs/conf.py index d2267dd0..7e06ae56 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -281,6 +281,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( -- cgit v1.2.3 From 429463d9bcb177c7715e8e0cf5e3d22212ecfaa7 Mon Sep 17 00:00:00 2001 From: Yuriy Andamasov Date: Thu, 7 May 2026 09:34:21 +0300 Subject: docs(llms.txt): point links at .md sources, not .html MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 22 of 23 entries. The single exception is `cli.html` — sagitta's `docs/cli.rst` hasn't been migrated to MyST (rst-to-myst chokes on the heading hierarchy), so no `cli.md` is served at the HTML root. A Jinja comment in the template documents the exception and references the follow-up cli.rst migration as a separate PR. Verified locally: every linked `.md` path returns 200 in production. 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) --- docs/_templates/llms.txt.j2 | 49 +++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 22 deletions(-) (limited to 'docs') diff --git a/docs/_templates/llms.txt.j2 b/docs/_templates/llms.txt.j2 index e1e466a0..dd112ae4 100644 --- a/docs/_templates/llms.txt.j2 +++ b/docs/_templates/llms.txt.j2 @@ -10,44 +10,49 @@ VyOS configuration follows a tree structure. All configuration commands start wi ## Quick Start -- [Quick Start Guide]({{ baseurl }}quick-start.html): Minimal setup walkthrough +- [Quick Start Guide]({{ baseurl }}quick-start.md): Minimal setup walkthrough +{# cli.html (not cli.md) — sagitta's `docs/cli.rst` hasn't been + migrated to MyST (rst-to-myst chokes on the heading hierarchy in + that file), so no `.md` source is copied to the HTML root by + `_copy_md_sources`. Pin this one entry to `.html` until cli.rst is + migrated; tracked as a separate cleanup PR. -#} - [CLI Overview]({{ baseurl }}cli.html): Command-line interface usage ## Configuration -- [Firewall]({{ baseurl }}configuration/firewall/index.html): Zone-based firewall, rules, groups -- [Interfaces]({{ baseurl }}configuration/interfaces/index.html): Ethernet, bonding, bridge, VLAN, tunnel, wireless -- [Protocols]({{ baseurl }}configuration/protocols/index.html): BGP, OSPF, IS-IS, static routing, MPLS -- [VPN]({{ baseurl }}configuration/vpn/index.html): IPsec, OpenVPN, WireGuard, L2TP, PPTP -- [NAT]({{ baseurl }}configuration/nat/index.html): Source NAT, destination NAT, NAT66 -- [System]({{ baseurl }}configuration/system/index.html): DNS, NTP, syslog, users, task scheduler -- [High Availability]({{ baseurl }}configuration/highavailability/index.html): VRRP -- [Load Balancing]({{ baseurl }}configuration/loadbalancing/index.html): WAN and reverse proxy -- [Containers]({{ baseurl }}configuration/container/index.html): Podman-based container support -- [PKI]({{ baseurl }}configuration/pki/index.html): Certificate management -- [Policy]({{ baseurl }}configuration/policy/index.html): Route maps, prefix lists, access lists -- [Traffic Policy]({{ baseurl }}configuration/trafficpolicy/index.html): QoS and shaping -- [Service]({{ baseurl }}configuration/service/index.html): DHCP, DNS forwarding, SNMP, SSH, HTTPS API -- [VRF]({{ baseurl }}configuration/vrf/index.html): Virtual routing and forwarding +- [Firewall]({{ baseurl }}configuration/firewall/index.md): Zone-based firewall, rules, groups +- [Interfaces]({{ baseurl }}configuration/interfaces/index.md): Ethernet, bonding, bridge, VLAN, tunnel, wireless +- [Protocols]({{ baseurl }}configuration/protocols/index.md): BGP, OSPF, IS-IS, static routing, MPLS +- [VPN]({{ baseurl }}configuration/vpn/index.md): IPsec, OpenVPN, WireGuard, L2TP, PPTP +- [NAT]({{ baseurl }}configuration/nat/index.md): Source NAT, destination NAT, NAT66 +- [System]({{ baseurl }}configuration/system/index.md): DNS, NTP, syslog, users, task scheduler +- [High Availability]({{ baseurl }}configuration/highavailability/index.md): VRRP +- [Load Balancing]({{ baseurl }}configuration/loadbalancing/index.md): WAN and reverse proxy +- [Containers]({{ baseurl }}configuration/container/index.md): Podman-based container support +- [PKI]({{ baseurl }}configuration/pki/index.md): Certificate management +- [Policy]({{ baseurl }}configuration/policy/index.md): Route maps, prefix lists, access lists +- [Traffic Policy]({{ baseurl }}configuration/trafficpolicy/index.md): QoS and shaping +- [Service]({{ baseurl }}configuration/service/index.md): DHCP, DNS forwarding, SNMP, SSH, HTTPS API +- [VRF]({{ baseurl }}configuration/vrf/index.md): Virtual routing and forwarding ## Operations -- [Operational Commands]({{ baseurl }}operation/index.html): Show, monitor, restart commands +- [Operational Commands]({{ baseurl }}operation/index.md): Show, monitor, restart commands ## Installation -- [Installation Guide]({{ baseurl }}installation/index.html): Bare metal, virtual, cloud deployments +- [Installation Guide]({{ baseurl }}installation/index.md): Bare metal, virtual, cloud deployments ## Automation -- [Automation]({{ baseurl }}automation/index.html): Ansible, Terraform, HTTP API, NETCONF +- [Automation]({{ baseurl }}automation/index.md): Ansible, Terraform, HTTP API, NETCONF ## Configuration Examples -- [Blueprints]({{ baseurl }}configexamples/index.html): Real-world topology examples +- [Blueprints]({{ baseurl }}configexamples/index.md): Real-world topology examples ## Optional -- [Build VyOS]({{ baseurl }}contributing/build-vyos.html): Building images from source -- [Development]({{ baseurl }}contributing/development.html): Development workflow -- [Debugging]({{ baseurl }}contributing/debugging.html): Debugging VyOS +- [Build VyOS]({{ baseurl }}contributing/build-vyos.md): Building images from source +- [Development]({{ baseurl }}contributing/development.md): Development workflow +- [Debugging]({{ baseurl }}contributing/debugging.md): Debugging VyOS -- cgit v1.2.3 From d0d7980ad2301ad98ed05bd3cbbc13109a989f83 Mon Sep 17 00:00:00 2001 From: Yuriy Andamasov Date: Thu, 7 May 2026 09:40:49 +0300 Subject: docs(llms.txt): update dirhtml-skip rationale after .md pivot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The previous comment on `_write_llms_txt` (and on the LLM-Facing Files section in CLAUDE.md) justified the `dirhtml` skip by claiming the template's `.html` URLs wouldn't resolve under `dirhtml` output. That became stale after [#1874@5fe7f9ad](https://github.com/vyos/vyos-documentation/pull/1874/commits/5fe7f9ad) (and parity commits on [#1876](https://github.com/vyos/vyos-documentation/pull/1876)/[#1903](https://github.com/vyos/vyos-documentation/pull/1903)) pivoted the curated template to `.md` URLs — `_copy_md_sources` puts `.md` files at their source-relative paths regardless of builder, so the rendered llms.txt would actually resolve fine under `dirhtml` now. The real reason we skip `dirhtml` is simpler: production publishes only via the `html`/`readthedocs` builders, and we don't render llms.txt for builds we don't ship. Local `make dirhtml` is a developer convenience, not a publish target. Reword the conf.py comment and the CLAUDE.md section to say that plainly. No code-behavior change. Addresses Copilot review feedback on PR #1874 (3 threads on docs/conf.py, docs/_templates/llms.txt.j2, and CLAUDE.md flagging the inconsistency). \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io) --- docs/conf.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'docs') diff --git a/docs/conf.py b/docs/conf.py index 7e06ae56..a534b47a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -252,10 +252,12 @@ def _copy_md_sources(app, exception): shutil.copy2(path, dest) def _write_llms_txt(app, exception): - # Skip dirhtml: the curated template encodes `.html` URLs (e.g. - # `quick-start.html`), which don't exist under `dirhtml` output - # (`quick-start/index.html`). Production publishes via the html / - # readthedocs builders, so dirhtml output would just be misleading. + # Skip dirhtml: production publishes via the `html` / `readthedocs` + # builders only. The `.md` links in the curated template do + # actually resolve under `dirhtml` (`_copy_md_sources` puts `.md` + # files at their source-relative paths regardless of builder), but + # we still don't render llms.txt for builds we don't ship — local + # `make dirhtml` is a developer convenience, not a publish target. if exception is not None or app.builder.name not in ( 'html', 'readthedocs'): return -- cgit v1.2.3 From e42de316317d100d87c720e5f7c6df3373ee46dc Mon Sep 17 00:00:00 2001 From: Yuriy Andamasov Date: Thu, 7 May 2026 09:48:08 +0300 Subject: docs(conf.py): fix stale .html reference in fail-fast comment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Last residual `.html` reference in the `_write_llms_txt` hook comments — the html_baseurl-empty failure-path comment said "rendering /quick-start.html etc." but the template now emits `.md` URLs. Update the example to `/quick-start.md` to match the actual output. Comment-only change. Same fix applied symmetrically across [#1874](https://github.com/vyos/vyos-documentation/pull/1874), [#1876](https://github.com/vyos/vyos-documentation/pull/1876), and [#1903](https://github.com/vyos/vyos-documentation/pull/1903). Addresses Copilot review feedback on PR #1903. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io) --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docs') diff --git a/docs/conf.py b/docs/conf.py index a534b47a..4a31d081 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -262,7 +262,7 @@ def _write_llms_txt(app, exception): 'html', 'readthedocs'): return if not app.config.html_baseurl: - # Fail loudly rather than rendering /quick-start.html etc. as a + # Fail loudly rather than rendering /quick-start.md etc. as a # silently-broken root-relative URL — every supported branch # sets html_baseurl, so a missing value is a regression. raise RuntimeError( -- cgit v1.2.3