| Age | Commit message (Collapse) | Author |
|
review)
|
|
|
|
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)
|
|
cleanup design)
|
|
RST-leftovers cleanup design)
|
|
RST-leftovers cleanup design)
|
|
cleanup design)
|
|
cleanup design)
|
|
cleanup design)
|
|
cleanup design)
|
|
cleanup design)
|
|
RST-leftovers cleanup design)
|
|
cleanup design)
|
|
cleanup design)
|
|
RST-leftovers cleanup design)
|
|
RST-leftovers cleanup design)
|
|
(per RST-leftovers cleanup design)
|
|
RST-leftovers cleanup design)
|
|
RST-leftovers cleanup design)
|
|
RST-leftovers cleanup design)
|
|
cleanup design)
|
|
RST-leftovers cleanup design)
|
|
fix(includes): break the RST `.. include::` chain that pulls need_improvement.txt on sagitta
|
|
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)
|
|
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)
|
|
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)
|
|
docs(sagitta): finish RST→MD conversion — port cli + aws from rolling
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
(cherry picked from commit ec6f33f3c256e839b443bb2baac14bff32132811)
# Conflicts:
# docs/conf.py
|
|
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)
|
|
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)
|
|
🤖 Generated by [robots](https://vyos.io)
|
|
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)
|
|
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)
|
|
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)
|
|
🤖 Generated by [robots](https://vyos.io)
|
|
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>
|
|
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)
|
|
🤖 Generated by [robots](https://vyos.io)
|
|
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)
|
|
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)
|
|
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)
|
|
`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)
|
|
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)
|
|
# Conflicts:
# docs/conf.py
|
|
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)
|