summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-05-08Merge pull request #1877 from LiudmylaNad/remove-deprecated-cloud-init-docsYuriy Andamasov
DOCS: Remove deprecated cloud-init page
2026-05-08docs: Remove deprecated cloud-init pageMilaNad
2026-05-07Merge pull request #1871 from vyos/feat/docs-cookiebot-gtm-consentYuriy Andamasov
feat(docs): add Cookiebot CMP and GTM with Consent Mode v2
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-07Merge pull request #1925 from vyos/chore/docs-agents-md-bot-workflowYuriy Andamasov
docs(agents-md): document bot review workflow (Copilot=draft, CodeRabbit=ready)
2026-05-07Merge pull request #1922 from vyos/fix/codecopier-css-specificityYuriy Andamasov
fix(css): increase copyFailedNotifier specificity to override copyDiv base style
2026-05-07fix(agents-md): add language tag to Mergify command fenced blockYuriy Andamasov
🤖 Generated by [robots](https://vyos.io)
2026-05-07docs(agents-md): Mergify commands work in comments only, not PR bodyYuriy Andamasov
🤖 Generated by [robots](https://vyos.io)
2026-05-07docs(agents-md): document bot review workflow (Copilot=draft, CodeRabbit=ready)Yuriy Andamasov
Copilot review must only be triggered on draft PRs. CodeRabbit review must only be triggered on ready-for-review PRs. Auto-reviews are disabled on this repo so CodeRabbit requires manual trigger. 🤖 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-07Merge pull request #1919 from vyos/T8595-add-agents-mdYuriy Andamasov
general: T8595: switch CLAUDE.md to AGENTS.md (+ Copilot symlink)
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-07general: T8595: switch CLAUDE.md to AGENTS.md (+ Copilot symlink)Yuriy Andamasov
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-07Merge pull request #1916 from vyos/chore/docs-claude-md-fix-formattingYuriy Andamasov
docs(claude-md): fix llms.txt backtick, redirect aliases, template path examples
2026-05-07Merge pull request #1913 from vyos/chore/docs-readme-remove-vale-sectionYuriy Andamasov
chore(readme): remove broken vale lint section
2026-05-07docs(claude-md): fix llms.txt backtick, redirect aliases, template path examplesYuriy Andamasov
- Wrap llms.txt in backticks where missing (formatting consistency) - Expand redirect alias patterns to explicit destinations (/en/circinus/* → /en/1.5/ etc.) - Use exact template paths (vpp/index.md, contributing/index.md) in branch-specific example - Add RTD table re-verification note 🤖 Generated by [robots](https://vyos.io)
2026-05-07Merge pull request #1910 from vyos/chore/docs-makefile-remove-dead-autooptsYuriy Andamasov
chore(makefile): remove dead AUTOOPTS variable
2026-05-07Merge pull request #1909 from vyos/chore/docs-pr-template-grammar-fixYuriy Andamasov
chore(github): fix grammar in PR template comment
2026-05-07chore(readme): remove broken vale lint sectionYuriy Andamasov
The Test-the-docs section documented running vale through Docker, but vale is not in the Docker image, no .vale.ini exists, and no styles directory is present. CI uses vyoslinter (doc-linter.py) for linting. 🤖 Generated by [robots](https://vyos.io)
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-07chore(github): fix grammar in PR template commentYuriy Andamasov
"All PR should follow" → "All PRs should follow". 🤖 Generated by [robots](https://vyos.io)
2026-05-07Merge pull request #1905 from vyos/fix/docs-robots-sitemap-url-currentYuriy Andamasov
docs(robots): fix stale sitemap URL on current
2026-05-07Merge pull request #1902 from vyos/chore/claude-md-post-flipYuriy Andamasov
chore(claude-md): update for post-flip MyST-as-primary state
2026-05-07docs(claude-md): drop literal ``command`` example, link RST quickref insteadYuriy Andamasov
The previous wording `Inline code: use double backticks (\`\`command\`\`)` included literal backslashes intended to escape the inner backticks. Markdown doesn't interpret backslashes inside code spans, so the backslashes rendered verbatim — the rendered output read as \`\`command\`\` instead of the intended ``command``. Replace with a prose-only line that links the RST docutils quickref (Inline markup section). No literal RST snippet to escape; rendering is straightforward. Same fix applied symmetrically across [#1902](https://github.com/vyos/vyos-documentation/pull/1902)/[#1906](https://github.com/vyos/vyos-documentation/pull/1906)/[#1907](https://github.com/vyos/vyos-documentation/pull/1907) — the trio is byte-identical (md5 `bdea8e5c...`). \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07docs(claude-md): align rst- prefix wording with the canonical detailed versionYuriy Andamasov
Yuriy/Copilot SWE pushed a more detailed rst-prefix block to [#1906](https://github.com/vyos/vyos-documentation/pull/1906) that gives an explicit subdirectory example and a counter-example (`configuration/firewall/zone` maps to `docs/configuration/firewall/rst-zone.rst`, NOT `docs/rst-configuration/firewall/zone.rst`). Adopt that exact wording on the other two PRs in the trio so all three CLAUDE.md files match again (md5 `acd58911...`). \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07docs(claude-md): fix Markdown rendering + clarify rst- prefix wordingYuriy Andamasov
Three rendering/clarity fixes flagged by Copilot review across the post-flip CLAUDE.md trio (#1902/#1906/#1907): 1. **Triple-backtick examples in single-backtick code spans broke Markdown rendering.** The MyST fence example ```{cfgcmd} set system ...``` was wrapped in a single-backtick span, where the inner triple backticks confuse the parser. Switch to a four-backtick code span so the literal fence renders cleanly. Same fix applied to the "Configuration page structure" bullet. 2. **RST inline-literal example used confusing nested backticks.** The line "Inline code: \`\`\`\`command\`\`\`\`" parsed but was hard to read. Replace with a plain explanation: "Inline code: use double backticks (\`\`command\`\`)". 3. **Clarify that the `rst-` override prefix attaches to the basename, not the path stem.** The previous wording `docs/rst-<page>.rst` could be misread as a top-level prefix. The actual behavior in `scripts/swap_sources.py` is: for a page at `docs/automation/cloud-init.md`, the override file lives at `docs/automation/rst-cloud-init.rst` (basename-prefixed sibling). Spell that out with a concrete example. Same fixes applied symmetrically across [#1902](https://github.com/vyos/vyos-documentation/pull/1902) (current), [#1906](https://github.com/vyos/vyos-documentation/pull/1906) (circinus), and [#1907](https://github.com/vyos/vyos-documentation/pull/1907) (sagitta) — all three worktrees back to byte-identical (md5 `d1ceaddc...`). \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07Revert "docs(claude-md): document PR review bot workflow"Yuriy Andamasov
The bot review workflow is a cross-repo convention that lives in the org-level rule file (`vyos-github`-style global instructions), not in per-repo CLAUDE.md. Documenting it here would duplicate the canonical source and risk drift if the workflow changes. This reverts the section added in the previous commit on this branch. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07docs(claude-md): document PR review bot workflowYuriy Andamasov
Add a "PR review workflow" section after CI describing how Copilot and CodeRabbit are used on this repo: - Copilot is opt-in (`@copilot review`) and works on drafts. - CodeRabbit auto-runs when a PR flips to ready-for-review and does not review drafts. - Convention: draft → iterate with Copilot → flip ready → iterate CodeRabbit → human review. - Every review thread needs an explicit reply before resolving. This matches the cross-repo workflow in `vyos-github` org rules and makes the convention discoverable for new contributors landing on the repo without prior context. \xf0\x9f\xa4\x96 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-07Merge pull request #1874 from vyos/feat/docs-llms-txt-currentYuriy Andamasov
docs: render llms.txt at build time (current)
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)
2026-05-07docs(conf.py): use FileSystemLoader/get_template for better tracebacksYuriy Andamasov
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)
2026-05-07chore(ci): empty commit to refresh stuck pull/1874/head refYuriy Andamasov
GitHub's `refs/pull/1874/head` was stuck at the prior commit (86e4d184) even though the branch ref had advanced to 17e840a3, which made RTD's `git checkout 17e840a3` fail with "reference is not a tree". This empty commit nudges GitHub to refresh the pull ref. Will be squashed away on merge — not part of the substantive change set. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07docs(conf.py): name the rolling docs as "rolling (current)", not stale circinusYuriy Andamasov
The `current` branch's `release` literal was `'1.5.x (circinus)'` — stale since circinus split off as its own LTS branch. The rendered llms.txt verification on the RTD preview surfaced the bug as the canonical version label of the rolling docs: > This documentation covers 1.5.x (circinus). …on a build whose URLs are `/en/rolling/`. The new build-time render introduced by this PR makes the inconsistency a user-visible artifact exposed to LLM consumers, so fix the source-of-truth literal here. Now `release = 'rolling (current)'` and `version = 'rolling'`. Sphinx also exposes `release` in the page footer ("v: rolling (current)") and search metadata, so fixing this string is a single source-of-truth change for the rolling docs. Sagitta and circinus `release` strings are correct already (`'1.4.x (sagitta)'` and `'1.5.x (circinus)'` respectively); no cross-branch sweep needed for `release`. Addresses CodeRabbit review feedback on PR #1874 (the originally pushed-back release-mismatch finding — verification proved the push-back wrong). \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-06fix(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-06docs(conf.py): fail loudly when html_baseurl is missingYuriy Andamasov
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 — better to fail the build than to ship an llms.txt full of broken root-relative URLs (`/quick-start.html`, `/cli.html`, etc.). Addresses CodeRabbit review feedback on PR #1874. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-06Merge remote-tracking branch 'origin/current' into feat/docs-llms-txt-currentYuriy Andamasov
# Conflicts: # docs/conf.py
2026-05-06Merge remote-tracking branch 'origin/current' into ↵Yuriy Andamasov
fix/codecopier-snippet-leak-and-clipboard-error # Conflicts: # docs/_static/js/codecopier.js
2026-05-06chore(claude-md): correct vale claim and Sphinx extension listYuriy Andamasov
Three follow-up Copilot findings on the post-flip CLAUDE.md: 1. Docker image doesn't bundle vale — the repo has no `.vale.ini`, `docker/Dockerfile` doesn't install vale, and there's no Vale CI workflow. Replace the entire "Lint (vale)" section with an honest description of how linting actually happens (`vyoslinter` / `doc-linter.py` in `vyos/.github`, run by `lint-doc.yml` on changed files only). The Docker build header is updated too — it says "bundles Sphinx and the MyST/RTD plugin set" instead of the inaccurate "incl. vale". 2. `docs/_ext/releasenotes.py` and `testcoverage.py` are not Sphinx extensions — neither has a `setup()` function and neither is in `extensions = [...]` in `conf.py`. Reword the bullet so the only files described as Sphinx extensions are `vyos.py` and `autosectionlabel.py` (both registered in `extensions`); the other two are described as standalone helper scripts. Addresses Copilot review feedback on PR #1902. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-06docs(conf.py): drop dirhtml from llms.txt builder list, use StrictUndefinedYuriy Andamasov
Two follow-up Copilot findings on the curated llms.txt render: 1. Drop `dirhtml` from the builder allow-list. The template hard-codes `.html` URLs (`quick-start.html`), which don't exist under `dirhtml` output (`quick-start/index.html`). Production publishes via the `html`/`readthedocs` builders, so `make dirhtml` would only emit a misleading file. Cleaner to skip than to branch URL generation on builder type for a path we don't actually ship. 2. Use a Jinja `Environment` with `StrictUndefined` instead of a bare `Template`. A typo in `llms.txt.j2` (e.g. `{{ relase }}`) now raises at build time instead of silently rendering as an empty string and shipping a half-blank `llms.txt`. Also set `keep_trailing_newline` so the rendered file's terminating newline is preserved. Addresses Copilot review feedback on PR #1874. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)