<feed xmlns='http://www.w3.org/2005/Atom'>
<title>vyos-documentation.git/docs/_static, branch mergify/bp/circinus/pr-2136</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=mergify%2Fbp%2Fcircinus%2Fpr-2136</id>
<link rel='self' href='https://git.amelek.net/vyos/vyos-documentation.git/atom?h=mergify%2Fbp%2Fcircinus%2Fpr-2136'/>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos-documentation.git/'/>
<updated>2026-06-17T19:26:11+00:00</updated>
<entry>
<title>Fix Cookiebot consent dialog rendering unstyled and breaking the page (#2108) (#2109)</title>
<updated>2026-06-17T19:26:11+00:00</updated>
<author>
<name>mergify[bot]</name>
<email>37929162+mergify[bot]@users.noreply.github.com</email>
</author>
<published>2026-06-17T19:26:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos-documentation.git/commit/?id=82ee5037e394cb11ce58c734141ee606dfba410e'/>
<id>urn:sha1:82ee5037e394cb11ce58c734141ee606dfba410e</id>
<content type='text'>
On a fresh (no-consent) load the consent banner could render completely
unstyled and expand to full page height. Cookiebot delivers its dialog CSS as
a constructed stylesheet on document.adoptedStyleSheets; ReadTheDocs'
readthedocs-addons.js reassigns that whole-array property with a destructive
replace, and when that lands after Cookiebot's network-gated adoption it drops
Cookiebot's sheet, leaving #CybotCookiebotDialog at position:static expanded to
~6700px. It is a race, so it is intermittent and clears once consent is given
(the dialog then never renders).

- layout.html: a small adoptedStyleSheets shim, installed before any page
  script, that preserves Cookiebot's sheet so another library cannot drop it.
- custom.css: a leak-safe safety net that keeps the dialog contained even if
  its adopted sheet is ever absent. It uses only properties Cookiebot itself
  sets, so it has verifiably no effect on the normal, styled banner.

🤖 Generated by [robots](https://vyos.io)

(cherry picked from commit dce7bb521e3947af59fe18895b609ec353e0450e)

Co-authored-by: Yuriy Andamasov &lt;yuriy@vyos.io&gt;</content>
</entry>
<entry>
<title>fix(css): use .highlight &gt; .copyDiv.copyFailedNotifier for strict specificity</title>
<updated>2026-05-07T14:08:51+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@vyos.io</email>
</author>
<published>2026-05-07T13:12:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos-documentation.git/commit/?id=869dd9a194bce5b578708b5bd5fa4899e501e4df'/>
<id>urn:sha1:869dd9a194bce5b578708b5bd5fa4899e501e4df</id>
<content type='text'>
Specificity (0,2,1) &gt; (0,1,1) — no longer relies on rule order.

🤖 Generated by [robots](https://vyos.io)

(cherry picked from commit ae4a58675633f59dde7b95c34bddc1a60a744483)
</content>
</entry>
<entry>
<title>fix(css): increase copyFailedNotifier specificity to override copyDiv base style</title>
<updated>2026-05-07T12:55:49+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@vyos.io</email>
</author>
<published>2026-05-07T12:55:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos-documentation.git/commit/?id=2098afd5836ef76eac8af695c17eda3f2c6e27c5'/>
<id>urn:sha1:2098afd5836ef76eac8af695c17eda3f2c6e27c5</id>
<content type='text'>
🤖 Generated by [robots](https://vyos.io)
</content>
</entry>
<entry>
<title>fix(codecopier): guard UI updates against out-of-order async completions</title>
<updated>2026-05-07T12:51:10+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@vyos.io</email>
</author>
<published>2026-05-06T20:46:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos-documentation.git/commit/?id=50eba82e54c5cc5df65e03916179226d6996798a'/>
<id>urn:sha1:50eba82e54c5cc5df65e03916179226d6996798a</id>
<content type='text'>
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)
</content>
</entry>
<entry>
<title>fix(codecopier): prevent state class crossover on rapid re-clicks</title>
<updated>2026-05-07T12:51:10+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@vyos.io</email>
</author>
<published>2026-05-06T19:50:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos-documentation.git/commit/?id=66e74e62bb6efd5cb6af9628fc8dabc5076d1088'/>
<id>urn:sha1:66e74e62bb6efd5cb6af9628fc8dabc5076d1088</id>
<content type='text'>
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)
</content>
</entry>
<entry>
<title>fix(codecopier): exclude Copy label from clipboard and stop showing false success</title>
<updated>2026-05-07T12:51:10+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@vyos.io</email>
</author>
<published>2026-05-05T22:59:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos-documentation.git/commit/?id=efb53fe14af6b279bc2c35bf7b87555db50c106a'/>
<id>urn:sha1:efb53fe14af6b279bc2c35bf7b87555db50c106a</id>
<content type='text'>
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' &lt;p&gt;) into that container.
Below the 992px breakpoint the label is visible (see code-snippets.css
.copyDiv &gt; p) so users got 'Copy' appended to every copied snippet.

Fix: extract text from the &lt;pre&gt; 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)
</content>
</entry>
<entry>
<title>feat: import MyST swap mechanism, llms.txt feature, and content from current</title>
<updated>2026-05-06T14:47:58+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@vyos.io</email>
</author>
<published>2026-05-06T14:47:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos-documentation.git/commit/?id=b61087c396860bb507be1adea50244a8c8e3242c'/>
<id>urn:sha1:b61087c396860bb507be1adea50244a8c8e3242c</id>
<content type='text'>
Replaces the broken #1885/#1869/#1875 trio with a single PR for circinus.

This PR:
- Imports 254 md-*.md files from currents working MyST conversion (the
  broken converter that produced #1885s md-*.md files is not used here;
  currents files are correct as verified on /en/rolling/).
- Adds the per-page RST-to-MyST swap mechanism: scripts/swap_sources.py,
  scripts/import_myst.py, tests, _swap.txt, _ext/vyos.py and Makefile
  swap-wrapped targets, .readthedocs.yml pre/post hooks.
- Replaces 175 .jpg/.png with 187 .webp images for swapped pages.
- Adds the llms.txt + sitemap feature (sphinx_llms_txt, sphinx_sitemap)
  with circinus-tailored html_baseurl https://docs.vyos.io/en/1.5/ and
  curated docs/_html_extra/llms.txt for 1.5.x.
- Updates docs/_html_extra/robots.txt with AI crawler Allow rules and
  the /en/1.5/sitemap.xml reference.
- Drops configuration/service/suricata from the swap set (no matching
  RST sibling on circinus; suricata is a current-only feature).

Supersedes:
- #1885 (broken md-*.md converter output)
- #1869 (LLM doc adaptation backport, bundled here)
- #1875 (llms.txt circinus, bundled here)

Generated by robots https://vyos.io
</content>
</entry>
<entry>
<title>Revert "docs: fix typos and grammar (ported from #1852 RST → MyST)"</title>
<updated>2026-05-06T14:16:23+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@andamasov.com</email>
</author>
<published>2026-05-06T14:16:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos-documentation.git/commit/?id=7730d865c6a5792fdee3e3c3855a582557de7b70'/>
<id>urn:sha1:7730d865c6a5792fdee3e3c3855a582557de7b70</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs: fix typos and a few grammar issues (ported from #1852 RST → MyST)</title>
<updated>2026-05-06T13:18:42+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@vyos.io</email>
</author>
<published>2026-05-05T20:21:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos-documentation.git/commit/?id=9f9bc3435b7195b4f5f2a80fc267b2886a842015'/>
<id>urn:sha1:9f9bc3435b7195b4f5f2a80fc267b2886a842015</id>
<content type='text'>
Ports the typo/grammar sweep originally captured in PR #1852 from .rst
files to their .md equivalents, plus the eventhandler grammar fix that
Copilot flagged in #1852's review (which the RST PR explicitly skipped
as scope-stretch).

Sources:
- 73 typo/grammar substitutions from PR #1852 (rebased from #1801)
- "Using environments is more preferable" → "Using environment variables
  is preferable" (Copilot review comment on #1852)

#1852 itself is being discarded since it targets RST and we are phasing
out the RST tree in favor of MyST.

The 4 RST-linter line-wrap comments and 1 RST section-underline comment
from Copilot's #1852 review are RST-specific and do not apply to .md.

🤖 Generated by [robots](https://vyos.io)
</content>
</entry>
<entry>
<title>feat(swap-circinus): add incremental RST-to-MyST swap mechanism</title>
<updated>2026-05-06T13:18:42+00:00</updated>
<author>
<name>Yuriy Andamasov</name>
<email>yuriy@vyos.io</email>
</author>
<published>2026-05-02T18:13:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.amelek.net/vyos/vyos-documentation.git/commit/?id=038b3a3a2ad91f67f074ba05a35d800c3dac2c07'/>
<id>urn:sha1:038b3a3a2ad91f67f074ba05a35d800c3dac2c07</id>
<content type='text'>
Backport of the swap mechanism from feat/incremental-myst-swap onto
the circinus release branch. Built directly on top of origin/circinus,
so the underlying RST tree is circinus's (not current's).

Mechanism:
- scripts/import_myst.py — import md from myst/* with md- prefix
- scripts/swap_sources.py — rename md-{name}.md → {name}.md before
  Sphinx builds, restore after; writes _build/_swap_state.json and
  _build/_swap_exclude.txt
- docs/Makefile — html/dirhtml/pdf/livehtml all run swap → build →
  trap restore; explicit `swap` and `restore` targets too
- docs/conf.py — MyST extensions enabled; swap exclude_patterns
  loader; _prefer_webp builder hook so html prefers webp over png

Content (all from origin/myst/circinus):
- 253 md-prefixed pages alongside each {name}.rst counterpart
- 1 plain MyST-only page kept at canonical name (docs/copyright.md,
  no .rst counterpart)
- 182 .webp images added (circinus release previously had only
  PNG/JPG; this PR brings webp into circinus alongside the originals)
- docs/_swap.txt populated with all 253 stems → MyST is served by
  default; revert a page by removing its stem from _swap.txt

🤖 Generated by [robots](https://vyos.io)
</content>
</entry>
</feed>
