summaryrefslogtreecommitdiff
path: root/docs
AgeCommit message (Collapse)Author
2026-05-14docs: fix cfgcmd body indent in interface-disable-flow-control.txt (Copilot ↵Yuriy Andamasov
review)
2026-05-14docs: fix cfgcmd body indent in interface-mirror.txt (Copilot review)Yuriy Andamasov
2026-05-14docs: fix doc-lint failures on dhcpv6-options + ipv6 includesYuriy Andamasov
Wraps the DUID example value in interface-dhcpv6-options.txt with .. stop_vyoslinter / .. start_vyoslinter pragmas to exclude it from vyos-linter MAC-pattern checks. Rewraps a long prose line in interface-ipv6.txt to fit the 80-char limit. Surfaced when the conversion sweep's doc-lint check failed on the 19th commit. These fixes are separate from the MyST→RST conversion work but folded into this PR to keep it self-contained. 🤖 Generated by [robots](https://vyos.io)
2026-05-14docs: convert _include/interface-vrf.txt MyST→RST (per RST-leftovers ↵Yuriy Andamasov
cleanup design)
2026-05-14docs: convert _include/interface-vlan-8021q.txt MyST→RST (per ↵Yuriy Andamasov
RST-leftovers cleanup design)
2026-05-14docs: convert _include/interface-per-client-thread.txt MyST→RST (per ↵Yuriy Andamasov
RST-leftovers cleanup design)
2026-05-14docs: convert _include/interface-mtu.txt MyST→RST (per RST-leftovers ↵Yuriy Andamasov
cleanup design)
2026-05-14docs: convert _include/interface-mirror.txt MyST→RST (per RST-leftovers ↵Yuriy Andamasov
cleanup design)
2026-05-14docs: convert _include/interface-mac.txt MyST→RST (per RST-leftovers ↵Yuriy Andamasov
cleanup design)
2026-05-14docs: convert _include/interface-ipv6.txt MyST→RST (per RST-leftovers ↵Yuriy Andamasov
cleanup design)
2026-05-14docs: convert _include/interface-ip.txt MyST→RST (per RST-leftovers ↵Yuriy Andamasov
cleanup design)
2026-05-14docs: convert _include/interface-evpn-uplink.txt MyST→RST (per ↵Yuriy Andamasov
RST-leftovers cleanup design)
2026-05-14docs: convert _include/interface-eapol.txt MyST→RST (per RST-leftovers ↵Yuriy Andamasov
cleanup design)
2026-05-14docs: convert _include/interface-disable.txt MyST→RST (per RST-leftovers ↵Yuriy Andamasov
cleanup design)
2026-05-14docs: convert _include/interface-disable-link-detect.txt MyST→RST (per ↵Yuriy Andamasov
RST-leftovers cleanup design)
2026-05-14docs: convert _include/interface-disable-flow-control.txt MyST→RST (per ↵Yuriy Andamasov
RST-leftovers cleanup design)
2026-05-14docs: convert _include/interface-dhcpv6-prefix-delegation.txt MyST→RST ↵Yuriy Andamasov
(per RST-leftovers cleanup design)
2026-05-14docs: convert _include/interface-dhcpv6-options.txt MyST→RST (per ↵Yuriy Andamasov
RST-leftovers cleanup design)
2026-05-14docs: convert _include/interface-dhcp-options.txt MyST→RST (per ↵Yuriy Andamasov
RST-leftovers cleanup design)
2026-05-14docs: convert _include/interface-description.txt MyST→RST (per ↵Yuriy Andamasov
RST-leftovers cleanup design)
2026-05-14docs: convert _include/interface-address.txt MyST→RST (per RST-leftovers ↵Yuriy Andamasov
cleanup design)
2026-05-14docs: convert _include/interface-address-with-dhcp.txt MyST→RST (per ↵Yuriy Andamasov
RST-leftovers cleanup design)
2026-05-13Merge pull request #2030 from vyos/yuriy/sagitta-break-rst-include-chainmergify[bot]
fix(includes): break the RST `.. include::` chain that pulls need_improvement.txt on sagitta
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): 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-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-14Merge pull request #2022 from vyos/yuriy/finish-conversion-sagittaYuriy Andamasov
docs(sagitta): finish RST→MD conversion — port cli + aws from rolling
2026-05-14fix(includes): break the RST `.. include::` chain that pulls ↵Yuriy Andamasov
need_improvement.txt on sagitta `_include/interface-vlan-8021ad.txt` started with `.. include:: /_include/need_improvement.txt`. After PR #2008 the `{cmdincludemd}` directive parses included `.txt` content as RST, so the three MD pages that consume interface-vlan-8021ad.txt (ethernet.md:161, virtual-ethernet.md:46, wireless.md:485) reach need_improvement.txt through an RST parser. `need_improvement.txt` is now MyST (`::::{only} not latex / :::{admonition}`), so the RST parser would render those directives as literal text on three interface pages. Rolling does not have this regression — rolling's `_include/interface-vlan-8021ad.txt` is MyST/MD content and does not include need_improvement.txt at all. The sagitta file is older RST-shape content with the include chain at the top, an artifact of the mid-migration state on sagitta. Strip line 1 (`.. include:: /_include/need_improvement.txt`) and the blank line that follows. The QinQ overview content below is untouched and still parses as RST under `{cmdincludemd}`. Spotted by Copilot inline review on #2026. 🤖 Generated by [robots](https://vyos.io)
2026-05-14fix(includes): rewrite need_improvement.txt as MyST so plain `{include}` ↵Yuriy Andamasov
renders correctly (backport #2016) Manual backport of #2016 to sagitta — Mergify auto-backport failed because sagitta's version of the file is a partial MyST conversion with leftover RST garbage (` \fi` line, RST `:ref:` syntax in MyST file). Same fix as rolling: wrap the MyST admonition in `::::{only} not latex` to preserve the LaTeX/PDF suppression from the original `.. raw:: latex \iffalse / \fi` guard. `.readthedocs.yml` declares `formats: - pdf`, so PDF output is a live downstream artifact. Sagitta does not have the `{eval-rst}` wrapper around the include that rolling had, so the highavailability/index.md change from #2016 is not needed here. 🤖 Generated by [robots](https://vyos.io)
2026-05-14docs: finish RST→MD conversion on sagittaYuriy Andamasov
Port docs/cli.md and docs/installation/cloud/aws.md from rolling (the canonical, production-tested MyST versions) and remove the remaining cli.rst + aws.rst. Earlier conversion attempts on myst/sagitta had title-level errors flagged for separate fix; rolling's versions are clean. Drop the `cli.html` workaround in `_templates/llms.txt.j2` now that `cli.md` exists and is copied by `_copy_md_sources` — matches the rolling-branch template byte for byte at that line. 🤖 Generated by [robots](https://vyos.io)
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) (cherry picked from commit 9c815d689a2a4a5d433ba15154cb606bd986fc8d)
2026-05-12T8843: Fix conflict markers committed by Mergify backport of #1994Yuriy Andamasov
The auto-backport PR #1998 committed literal git conflict markers into docs/conf.py because _copy_md_sources sits before _write_llms_txt on sagitta but after it on rolling — cherry-pick failed to locate the patch context and dropped the entire new function as a duplicate with markers. Removes the conflict-marker block and applies the actual 3-line guard to the existing _copy_md_sources function. Build was failing with "SyntaxError: invalid syntax (conf.py)". 🤖 Generated by [robots](https://vyos.io)
2026-05-12Fix recursive _build directory nesting errorQuill Cronwall
(cherry picked from commit ec6f33f3c256e839b443bb2baac14bff32132811) # Conflicts: # docs/conf.py
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 landed. The mechanism's surface area is dead weight and the rst-*.rst shadows scattered across the source tree cause Context7's parser to misclassify the project as RST. Sibling PRs: - yuriy/remove-rst-swap-mechanism (rolling) - yuriy/remove-rst-swap-mechanism-circinus Changes: - Move 210 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. - Strip swap_sources.py invocation from docs/Makefile. - 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 AGENTS.md: drop the "RST override mechanism" section and the test-runner snippet for the deleted test. Note: .readthedocs.yml on sagitta has no jobs: block to remove (the swap was wired only at build-time via the Makefile chain on this branch). Verified: sphinx-build -b html with --keep-going produces identical warning set (409 unique — pre-existing cli.rst/aws.rst title-level warnings on this branch), identical sitemap entry count (215), identical llms.txt entry count (23), zero rst-* URLs in any artifact. 🤖 Generated by [robots](https://vyos.io)
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): add title attribute to GTM noscript iframe for a11yYuriy Andamasov
🤖 Generated by [robots](https://vyos.io)
2026-05-07fix(docs): use window.dataLayer in gtag() and remove stray closing script tagcopilot-swe-agent[bot]
Agent-Logs-Url: https://github.com/vyos/vyos-documentation/sessions/498fb4de-0a2a-43b8-b567-eb8d8883111b 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): increase copyFailedNotifier specificity to override copyDiv base styleYuriy Andamasov
🤖 Generated by [robots](https://vyos.io)
2026-05-07fix(codecopier): guard UI updates against out-of-order async completionsYuriy Andamasov
Rapid re-clicks queue multiple `navigator.clipboard.writeText` promises; without a request token, an older promise resolving later can overwrite the newer click's UI (or have its 2-second timeout fire on the new click's state). Add a per-button `copyRequestId` that each click increments and captures locally; the success/failure UI flip and the revert-timeout body all bail out early if the captured token no longer matches the current one. Addresses CodeRabbit review feedback on PR #1890. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07fix(codecopier): prevent state class crossover on rapid re-clicksYuriy Andamasov
Reset both notifier classes and cancel any pending revert timeout at the start of each click so a fast failure-then-success (or vice versa) can't leave `copiedNotifier` and `copyFailedNotifier` applied simultaneously, and so the 2-second auto-revert window restarts cleanly per click. Addresses Copilot review feedback on PR #1890. 🤖 Generated by [robots](https://vyos.io)
2026-05-07fix(codecopier): exclude Copy label from clipboard and stop showing false ↵Yuriy Andamasov
success Two real bugs in the docs site copy-to-clipboard handler, both flagged by copilot review on PR #1886 (deferred there because that PR is scoped to typos). Bug 1: Copy label leaked into copied snippets on narrow screens The handler read `currentTarget.offsetParent.innerText`. The same handler appends a visible `.copyDiv` (with a 'Copy' <p>) into that container. Below the 992px breakpoint the label is visible (see code-snippets.css .copyDiv > p) so users got 'Copy' appended to every copied snippet. Fix: extract text from the <pre> element inside the container instead, which excludes the injected button. Also switched the lookup root from `offsetParent` to `parentElement` so the source-of-truth is the DOM relationship (the .copyDiv is inserted as a beforeend child of the inner .highlight div via insertAdjacentHTML), not CSS positioning. Bug 2: Failed clipboard writes still showed 'Copied!' The try/catch only logged on failure but the surrounding code still flipped the button into the copiedNotifier success state. Users got false success when writeText rejected (insecure context, permission denied, etc.). Fix: move the success UI flip inside the try, add an explicit failure UI flip ('Failed' text + new `.copyFailedNotifier` class with red background) in the catch. setTimeout still reverts both classes after 2s. Verified in browser with a sphinx-rendered fixture (jQuery 3.7 + Pygments output): both snippets copy their own text without the Copy label, success flow shows Copied!, simulated writeText rejection shows Failed, both states revert after 2s. 🤖 Generated by [robots](https://vyos.io)
2026-05-07fix(docs): integrate swap_sources into sagitta MakefileYuriy Andamasov
`current` and `circinus` Makefiles auto-run `swap_sources.py --swap` as a prerequisite of `html`/`dirhtml`/`pdf`/`livehtml`, with a `--restore` trap on exit so the working tree is left clean. Sagitta's Makefile lacked this entirely — `make html` would skip the swap mechanism and the build would render whatever was on disk (fine while the override list is empty, but a footgun the moment a maintainer adds an entry to `docs/_rst_overrides.txt`). Adopt current/circinus's Makefile verbatim (they're already identical), giving sagitta: - `SWAP` variable + `swap`/`restore` targets - `html: swap`, `dirhtml: swap`, `pdf: swap`, `livehtml: swap` with `--restore` trap-on-exit - `defaultvalue: html` (no longer needs to inline the sphinx-build invocation now that `html` carries the swap) After this lands, sagitta's CLAUDE.md (in [#1907](https://github.com/vyos/vyos-documentation/pull/1907)) will need a small follow-up — Copilot's commit on that PR currently says "swap is manual" which becomes wrong post-merge here. Will update #1907 to match current/circinus wording once this PR is merged. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07docs(robots): allow AI crawlers + correct sitemap URL on sagittaYuriy Andamasov
Two changes (was buried inside the now-closed [#1870](https://github.com/vyos/vyos-documentation/pull/1870), the rest of which became redundant after [#1876](https://github.com/vyos/vyos-documentation/pull/1876) replaced `_html_extra/llms.txt` with a build-time render): 1. Allow rules for the AI training/retrieval crawlers we want to index the docs (GPTBot, ClaudeBot, Google-Extended, CCBot, PerplexityBot, ChatGPT-User, Claude-SearchBot, Claude-User, OAI-SearchBot, Perplexity-User). These are the same rules already present on `current` and `circinus`, just backported to sagitta. 2. Fix the `Sitemap:` URL. Previously `https://docs.vyos.io/sitemap.xml`, which doesn't exist on RTD's per-version layout. The actual sitemap is at `/en/1.4/sitemap.xml` (matching `html_baseurl` and `sphinx-sitemap`'s output, both already configured by [#1876](https://github.com/vyos/vyos-documentation/pull/1876)). The `atlassian-bot` Allow that was previously here is dropped to match the same form as `current` and `circinus` — `User-agent: *` covers all well-behaved crawlers including atlassian-bot. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07Merge remote-tracking branch 'origin/sagitta' into fix/docs-html-title-sagittaYuriy Andamasov
# Conflicts: # docs/conf.py
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)