summaryrefslogtreecommitdiff
path: root/docs
AgeCommit message (Collapse)Author
2026-05-28docs: Update Static page to VyOS 1.5 standards (#2049)LiudmylaNad
* docs: Update Static page to VyOS 1.5 standards * Update static.md * Remove needless words * Fix an incorrect fact about RIB not preserving routes after interface state changes --------- Co-authored-by: Daniil Baturin <daniil@baturin.org>
2026-05-28ipsec: T7555: Documentation of `ikev2-reauth` option for site-to-site peers ↵Alexandr K.
(#2047)
2026-05-26docs: Update BFD page to VyOS 1.5 standards (#2056)LiudmylaNad
* docs: Update BFD page to VyOS 1.5 standards * Update bfd.md * Remove mentions of security from the minimum-ttl section --------- Co-authored-by: Daniil Baturin <daniil@baturin.org>
2026-05-26docs: Update IGMP Proxy page to VyOS 1.5 standards (#2054)LiudmylaNad
* docs: Update IGMP Proxy page to VyOS 1.5 standards * Minor formatting corrections * docs: use RFC 5737 IP range * Apply suggestions from code review Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update igmp-proxy.md --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-05-26docs: Update Multicust page to VyOS 1.5 standards (#2057)LiudmylaNad
2026-05-26docs: Update PIMv6 page to VyOS 1.5 standards (#2059)LiudmylaNad
2026-05-20Merge pull request #2053 from natali-rs1985/T7059Viacheslav Hletenko
high-availability: T7059: Add persistence-timeout option in virtual-server
2026-05-20high-availability: T7059: Add persistence-timeout option in virtual-serverNataliia Solomko
2026-05-18Update Git branch to 'rolling'Quill Cronwall
Update the upstream Git branch from 'current' to 'rolling in the 'Write Documentation' instructions.
2026-05-14bgp: T8607: Add CLI support for BGP update-delay and establish-wait (#1891)Nataliia S.
* bgp: T8607: Add CLI support for BGP update-delay and establish-wait * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * T8607: Apply Copilot's suggestions --------- Co-authored-by: Christian Breunig <christian@breunig.cc> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-14Merge pull request #2024 from vyos/yuriy/cli-aws-doc-fixesYuriy Andamasov
docs: fix CLI typo, orphan fences, CloudWatch case, terraformvyos link labels
2026-05-14docs(cli, aws): hard-wrap pre-existing long prose lines to <=80 charsYuriy Andamasov
doc-lint regression on [vyos-documentation#2024](https://github.com/vyos/vyos-documentation/pull/2024): the CI workflow's `scripts/doc-linter.py` scans every line of every changed file (not just changed lines), so the typo fix on `cli.md:464` and the capitalization fix on `aws.md:118` surfaced 57 pre-existing >80-char violations that have lived on rolling since the MyST migration. `cli.md` — 53 prose paragraphs hard-wrapped at word boundaries to 80 chars, preserving content fidelity. List items use hanging-indent continuations under their `- ` marker. No content reworded; only soft-wrap → hard-wrap. `aws.md` — wrapped the inline AWS GWLB blog link (L164) and the References section (L185-187) with `% stop_vyoslinter` / `% start_vyoslinter` markers. These are URL-bearing lines that cannot be shortened (URL itself >80 chars). Verified locally: `python3 scripts/doc-linter.py "['docs/cli.md','docs/installation/cloud/aws.md','docs/automation/terraform/terraformvyos.md']"` → exit 0, no violations. 🤖 Generated by [robots](https://vyos.io)
2026-05-14docs(terraform): wrap long install URL in vyoslinter suppressionYuriy Andamasov
The full HashiCorp install-CLI URL is 79 chars, so any reference definition `[X]: <URL>` form exceeds the 80-char docs-lint limit regardless of label length. Existing `% stop_vyoslinter` / `% start_vyoslinter` markers in this file were back-to-back with no content between them (flagged by Copilot on [vyos-documentation#2021](https://github.com/vyos/vyos-documentation/pull/2021)) — put them to work by wrapping the long `[install Terraform]:` reference. The shorter `[Terraform introduction]:` reference (73 chars) sits outside the suppression range. Both Copilot and CodeRabbit flagged the docs-lint regression on [vyos-documentation#2024](https://github.com/vyos/vyos-documentation/pull/2024) — verified locally with `python3 scripts/doc-linter.py docs/automation/terraform/terraformvyos.md`: no warnings. 🤖 Generated by [robots](https://vyos.io)
2026-05-14docs(terraform): replace non-descriptive [link]/[install] reference labelsYuriy Andamasov
Surfaced by CodeRabbit on the circinus RST→MD conversion PR [vyos-documentation#2021](https://github.com/vyos/vyos-documentation/pull/2021) (`terraformvyos.md:14`). Both labels violate MD059 (descriptive link text) — generic words like "link" don't convey the destination to screen-reader users or search indexers. Pre-existing on rolling; out of scope for the conversion port, fixed here at the source. Mergify will backport to circinus and sagitta. Sibling `automation/terraform/index.md` already uses the descriptive form ([Terraform], [Ansible]). 🤖 Generated by [robots](https://vyos.io)
2026-05-14fix(includes): wrap admonition in `{only} not latex` to preserve PDF suppressionYuriy Andamasov
The original RST `_include/need_improvement.txt` wrapped the admonition in `.. raw:: latex \iffalse / \fi`, intentionally hiding the "Call for Contributions" notice from the LaTeX/PDF builder (see b222a313, 2020). `.readthedocs.yml` enables `formats: - pdf` and `conf.py` configures `latex_elements`/`latex_documents`, so PDF output is a real downstream artifact. The previous commit (82a06e1d) dropped that suppression. Restore it using Sphinx's `only` directive with `not latex`, which is the MyST equivalent of the original RST builder-conditional pattern. Spotted by Copilot inline review on #2016. 🤖 Generated by [robots](https://vyos.io)
2026-05-14docs: fix CLI typo, orphan colon fences, CloudWatch capitalizationYuriy Andamasov
Three pre-existing rolling docs bugs, surfaced by Copilot review on the sagitta RST→MD conversion PR #2022 against the byte-for-byte ports of `cli.md` and `aws.md`: - `cli.md` line 464: `set interface ethernet …` is wrong; the CLI command is `set interfaces ethernet …` (plural). Users copying the example verbatim would hit "Configuration path is not valid". - `cli.md` lines 527-528: orphan `:::` / `::::` fence closers after the `{cfgcmd} save` block. The `(save)=` directive opens at line 503 and closes at line 506; the two `` ``` none `` blocks at 508-526 are self-contained; nothing opens these colon fences. MyST/Sphinx tolerates them silently today but they're literal noise. Drop both. - `aws.md` line 118: "Cloudwatch" → "CloudWatch", matching the surrounding correctly-cased uses on lines 115/121/122 and AWS's product naming. Mergify will backport to circinus and sagitta via the standard `@Mergifyio backport circinus sagitta` post-merge. 🤖 Generated by [robots](https://vyos.io)
2026-05-13fix(includes): rewrite need_improvement.txt as MyST so plain `{include}` ↵Yuriy Andamasov
renders correctly After the RST→MyST migration, ~45 MD pages use the plain `{include}` MyST directive to pull in `_include/need_improvement.txt`. The included file still contained RST (`.. raw:: html`, `.. raw:: latex`, `:ref:`), and MyST's built-in `{include}` parses the content with the *outer* file's parser — i.e. as MyST. RST directives then render as literal paragraphs. Visible symptom on docs.vyos.io/en/rolling (and across 1.5/1.4): the VPP index, VPP subpages, haproxy, isis, bfd, policy, pki, salt, flowtables, webproxy, and others all show: .. raw:: latex \iffalse .. raw:: html Call for Contributions Help improve this section ... For contribution guidelines, see :ref: documentation . Fix: rewrite `_include/need_improvement.txt` as a native MyST admonition (`:::{admonition} Call for Contributions / :class: error / ... / :::`) and drop the now-unnecessary `{eval-rst}` wrapper at the single callsite (`configuration/highavailability/index.md`) that wrapped the include for RST processing. The fix is companion to 9c815d68 (cmdincludemd RST plumbing) but targets the plain-`{include}` path which doesn't route through our custom extension. 🤖 Generated by [robots](https://vyos.io)
2026-05-12Merge pull request #1997 from vyos/claude/scan-typos-errors-VJZ5EViacheslav Hletenko
docs: fix typos across configuration, contributing, and vpp docs
2026-05-12fix(ext): parse cmdincludemd content as RST so legacy `_include/*.txt` ↵Yuriy Andamasov
directives render The `_include/*.txt` library is written in reStructuredText (`.. cfgcmd::`, `.. code-block::`, `.. note::`, `.. cmdinclude::`). After the RST→MyST migration, the `{cmdincludemd}` fence on .md pages routed include content through `MockState.nested_parse`, which in MyST 2.0 simply replays the content through the MyST renderer (see myst_parser/mocking.py:153). RST directives in the .txt file then rendered as literal paragraph text: <p>.. cmdinclude:: /_include/interface-description.txt</p> <p>.. cfgcmd:: set interfaces ethernet ...</p> <p>.. code-block:: none</p> User-visible symptom (reported on rolling docs): the Ethernet, dummy, tunnel, bonding, bridge, macsec, vxlan, l2tpv3, pseudo-ethernet, virtual-ethernet, and wireless pages all showed unprocessed `.. cfgcmd::` and `.. cmdinclude::` directives instead of styled command boxes. Fix: mirror MyST's own `{eval-rst}` plumbing (`MockRSTParser().parse(text, doc)` per `mdit_to_docutils/base.py:1655`). Build a fresh document that inherits the outer document's settings + reporter, run `MockRSTParser` over the substituted include content, and graft the resulting children back into the calling document with explicit-target registration. Keeps the Sphinx env available to `cfgcmd`/`opcmd`/`cmdinclude` directives. Verified locally on rolling (Sphinx 7.x, myst-parser 2.0): zero literal `cfgcmd::` / `cmdinclude::` / `code-block::` / `opcmd::` / `note::` / `include::` strings remain in any built HTML page under `configuration/`, `automation/`, `installation/`, `operation/`, `vpp/`; all 11 affected interface pages now render proper `cfgcmd-heading` / `cfgcmd-body` blocks (e.g. ethernet.html: 160, wireless.html: 172, dummy.html: 4). 🤖 Generated by [robots](https://vyos.io)
2026-05-12docs: address ready-flip review (webproxy hostname, ospf grammar, ipsec polish)Yuriy Andamasov
- webproxy.md: replace `ftp.univ-tlse1.fr` with `ftp.example.com` so the hostname matches the documentation-reserved IP `192.0.2.249` (Copilot). - ospf.md: insert missing preposition in `show ip ospf interface` and `show ipv6 ospfv3 interface` op-cmd descriptions (CodeRabbit). - ipsec.md: rewrite intro sentence ("can significantly speed up …") and hyphenate `feature-rich` (CodeRabbit). 🤖 Generated by [robots](https://vyos.io)
2026-05-11docs: address Copilot grammar review on ospf and vpp ipsecClaude
- ipsec.md: "to speed-up" -> "to speed up"; drop article in "creates a corresponding SAs and policies"; "there routes" -> "these routes". - ospf.md: "Cost calculation wireguard interfaces" -> "Cost calculation for WireGuard interfaces". https://claude.ai/code/session_01RDpSBDLSWLKMGnyPCaKECB
2026-05-11docs: hard-wrap pre-existing long prose lines to satisfy doc-linterClaude
scripts/doc-linter.py enforces an 80-character limit outside fenced code blocks and treats any finding as a failure. Wrap long paragraphs in files that this PR touched so CI passes: - docs/configuration/protocols/ospf.md: wrap the WireGuard cost note. - docs/configuration/protocols/traffic-engineering.md: wrap the IS-IS/ OSPF note. - docs/contributing/debugging.md: wrap the Phabricator paragraph, and guard the long [bootchart.conf]/[vyatta-cfg] link references at EOF with `% stop_vyoslinter`/`% start_vyoslinter`. - docs/vpp/configuration/ipsec.md: wrap the integration, requirements, algorithm, ACL, VTI example, troubleshooting paragraphs. Pure reformatting; no semantic changes. https://claude.ai/code/session_01RDpSBDLSWLKMGnyPCaKECB
2026-05-11docs: address review feedback and pre-existing doc-lint errorsClaude
- terraformAWS.md: balance the orphan `.. stop_vyoslinter` directive inside the eval-rst block and wrap the long MyST link references at EOF with `% stop_vyoslinter`/`% start_vyoslinter`. - webproxy.md: replace real-world IP 193.49.48.249 with doc-range 192.0.2.249 in the blacklist update example output. - console-server.md: "some times" -> "sometimes". - bgp.md: "command disable" -> "command disables"; add comma before "use the delete form"; "Route dampening which described in" -> "Route dampening, described in". https://claude.ai/code/session_01RDpSBDLSWLKMGnyPCaKECB
2026-05-11docs: fix typos across configuration, contributing, and vpp docsClaude
Corrections include: adresses->addresses, oder->other, Them->The, criterias->criteria, seeting->setting, carefull->careful, beeing->being, reenable->re-enable, wich->which, derection->direction, Whith->With, assosiate->associate, fpr->for, bootup->boot, trough->through. https://claude.ai/code/session_01RDpSBDLSWLKMGnyPCaKECB
2026-05-11Fix recursive _build directory nesting errorQuill Cronwall
2026-05-10docs: drop stray terraformvyos.rst and remove .rst from source_suffixYuriy Andamasov
The .md equivalent already exists alongside it; with both present and `source_suffix = ['.rst', '.md']`, Sphinx silently preferred the .rst. Deletion removes the shadowing and the only active .rst left in tree (legacy is archived under docs/_rst_legacy/). Restricting source_suffix to ['.md'] prevents future stray .rst files from being picked up, and is what external indexers (e.g. context7) look at when classifying the source format of the docs. 🤖 Generated by [robots](https://vyos.io)
2026-05-10chore: livehtml — drop stale md-* ignore, add _rst_legacy ignoreYuriy Andamasov
The md- prefix on MyST-migrated pages was retired; the ignore was dead config. Replace with _rst_legacy/ so sphinx-autobuild watches don't trigger on archive edits. Addresses Copilot's low-confidence suggestion on PR #1940. 🤖 Generated by [robots](https://vyos.io)
2026-05-10chore: remove RST swap mechanism, archive rst-*.rst under docs/_rst_legacy/Yuriy Andamasov
The swap mechanism (RST-as-fallback for migrated MD pages) is dormant — docs/_rst_overrides.txt has been empty since the MyST flip trio (#1899/#1900/#1901) landed in May 2026. The mechanism's surface area (scripts/swap_sources.py, its 245-line test, RTD pre/post hooks, Makefile glue, conf.py dynamic loader) is dead weight, and the rst-*.rst shadows scattered across the source tree cause Context7's parser to misclassify the project as RST. Changes: - Move 253 rst-*.rst shadow files into docs/_rst_legacy/ preserving subdirectory structure. They remain in the repo for reference; Sphinx excludes the folder via exclude_patterns; Context7 excludes it via excludeFolders. - Strip swap_sources.py invocation from docs/Makefile (swap/restore targets, : swap deps, trap chains). - Strip jobs: pre_build/post_build block from .readthedocs.yml. - Strip rst-*.rst exclude entry and the _md_exclude.txt loader from docs/conf.py; replace with a single _rst_legacy exclude. - Delete scripts/swap_sources.py, tests/test_swap_sources.py, docs/_rst_overrides.txt. - Update context7.json: add docs/_rst_legacy to excludeFolders; fix stale "Branch current tracks…" rule to "Branch rolling tracks…" (default branch was renamed 2026-05-10). - Update AGENTS.md: drop the "RST override mechanism" section and the test-runner snippet for the deleted test; describe _rst_legacy as archive only. Verified: sphinx-build -b html with --keep-going produces identical warning set (68 unique), identical sitemap entry count (257), identical llms.txt entry count (22), zero rst-* URLs in any artifact. 🤖 Generated by [robots](https://vyos.io)
2026-05-10ci/docs: drop current branch references after rename to rollingYuriy Andamasov
Cleanup PR following the current→rolling default-branch rename. Drops the now-stale current branch from workflow triggers, flips remaining defaults, and updates documentation/templates. Workflows: - pr-mirror-repo-sync.yml: branches narrowed to [rolling]; workflow_dispatch default and choice list now rolling-only; sync_branch fallback flipped from 'current' to 'rolling'. - check-open-prs-conflict.yml: dropped current from push.branches. - update-version-tags.yml: dropped current from push.branches and from the case statement (now bare 'rolling) TAG=rolling'). - submodules.yml: renamed update_current job, branch update-dependencies-current, and the related commit/title strings to rolling. - update-translations.yml: PR branch update-translations-current renamed to update-translations-rolling. - ai-validation.yml: prompt example updated. Docs/templates: - docs/conf.py: READTHEDOCS_GIT_IDENTIFIER fallback flipped to 'rolling'; comment block updated to describe the rolling branch (the user-facing "(current)" suffix is release-channel terminology and remains). - README.md: branching-scheme section now describes rolling as the default branch, with a note about the rename date. - .github/PULL_REQUEST_TEMPLATE.md: CONTRIBUTING link points at blob/rolling. External @current refs to vyos/.github and vyos/vyos-cla-signatures are left untouched — they reference those repos' default branches and are unaffected by this repo's rename. 🤖 Generated by [robots](https://vyos.io)
2026-05-10Merge pull request #1878 from anderbak/t8608-tcp-ping-docsYuriy Andamasov
troubleshooting: T8608: document TCP ping
2026-05-10Merge pull request #1927 from natali-rs1985/T8600Yuriy Andamasov
T8600: Add option to change logging verbosity in Kea
2026-05-08T8600: Add option to change logging verbosity in KeaNataliia Solomko
2026-05-08docs: Remove deprecated cloud-init pageMilaNad
2026-05-08troubleshooting: T8608: document TCP pinganderbak
2026-05-07fix(docs): add missing space after colon in personalization_storageYuriy Andamasov
🤖 Generated by [robots](https://vyos.io)
2026-05-07feat(docs): move Cookiebot CBID to COOKIEBOT_ID env varYuriy Andamasov
Read COOKIEBOT_ID from the environment via conf.py html_context, replacing the hardcoded data-cbid value in layout.html. Guards tightened to {% if gtm_id and cookiebot_id %} so neither GTM nor Cookiebot loads unless both IDs are present. 🤖 Generated by [robots](https://vyos.io)
2026-05-07fix(docs): guard GTM/Cookiebot blocks with {% if gtm_id %}Yuriy Andamasov
Prevents broken googletagmanager.com requests with empty container IDs when GTM_ID is not set (local builds, preview environments). 🤖 Generated by [robots](https://vyos.io)
2026-05-07feat(docs): read GTM_ID from environment instead of hardcodingYuriy Andamasov
Move the Google Tag Manager container ID out of the template and into conf.py via os.environ.get('GTM_ID', ''), exposed to Jinja via html_context. Set GTM_ID in the RTD project environment variables. 🤖 Generated by [robots](https://vyos.io)
2026-05-07fix(docs): remove stray </script> and add title to GTM noscript iframeYuriy Andamasov
🤖 Generated by [robots](https://vyos.io)
2026-05-07fix(docs): deduplicate GTM ID via Jinja var and use window.dataLayer in gtag()copilot-swe-agent[bot]
Agent-Logs-Url: https://github.com/vyos/vyos-documentation/sessions/f6d95cc7-cdbe-4d76-8077-f7fae5e9ddf2 Co-authored-by: andamasov <12631358+andamasov@users.noreply.github.com>
2026-05-07feat(docs): add Cookiebot CMP and GTM with Consent Mode v2Yuriy Andamasov
Inject Cookiebot CMP, Google Consent Mode v2 defaults, and Google Tag Manager into the Sphinx layout. Cookiebot loads first so its auto-blocker can scan and block other tags before they execute; Consent Mode v2 starts denied for all categories except security_storage and updates only after Cookiebot fires the consent update. 🤖 Generated by [robots](https://vyos.io)
2026-05-07fix(css): use .highlight > .copyDiv.copyFailedNotifier for strict specificityYuriy Andamasov
Specificity (0,2,1) > (0,1,1) — no longer relies on rule order. 🤖 Generated by [robots](https://vyos.io)
2026-05-07fix(css): increase copyFailedNotifier specificity to override copyDiv base styleYuriy Andamasov
.copyFailedNotifier (0,1,0) was losing to .highlight > .copyDiv (0,1,1), so the red failure background never rendered. Adding .copyDiv to the selector brings specificity to (0,2,0) which overrides the base rule. 🤖 Generated by [robots](https://vyos.io)
2026-05-07Merge pull request #1890 from ↵Yuriy Andamasov
vyos/fix/codecopier-snippet-leak-and-clipboard-error fix(codecopier): exclude Copy label from clipboard and stop showing false success
2026-05-07chore(makefile): remove dead AUTOOPTS variableYuriy Andamasov
AUTOOPTS = --watch . was defined but never referenced — livehtml uses explicit --ignore flags instead. Drop the dead assignment. Circinus is unaffected; its livehtml still uses $(AUTOOPTS) directly. 🤖 Generated by [robots](https://vyos.io)
2026-05-07docs(robots): fix stale sitemap URL on currentYuriy Andamasov
Was `https://docs.vyos.io/sitemap.xml` — doesn't exist on RTD's per-version layout. The actual sitemap is at `/en/rolling/sitemap.xml` (matching `html_baseurl` and `sphinx-sitemap`'s output). `circinus`/`1.5` already has the correct `/en/1.5/sitemap.xml`; `sagitta`/`1.4` is being fixed in [#1904](https://github.com/vyos/vyos-documentation/pull/1904). \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07docs(conf.py): fix stale .html reference in fail-fast commentYuriy Andamasov
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)
2026-05-07docs(llms.txt): update dirhtml-skip rationale after .md pivotYuriy Andamasov
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)
2026-05-07docs(llms.txt): point links at .md sources, not .htmlYuriy Andamasov
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/<ver>/<page>.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)
2026-05-07docs(conf.py): set Jinja autoescape=False explicitly for llms.txt templateYuriy Andamasov
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)