| Age | Commit message (Collapse) | Author |
|
DOCS: Remove deprecated cloud-init page
|
|
|
|
feat(docs): add Cookiebot CMP and GTM with Consent Mode v2
|
|
🤖 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/f6d95cc7-cdbe-4d76-8077-f7fae5e9ddf2
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)
|
|
docs(agents-md): document bot review workflow (Copilot=draft, CodeRabbit=ready)
|
|
fix(css): increase copyFailedNotifier specificity to override copyDiv base style
|
|
🤖 Generated by [robots](https://vyos.io)
|
|
🤖 Generated by [robots](https://vyos.io)
|
|
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)
|
|
Specificity (0,2,1) > (0,1,1) — no longer relies on rule order.
🤖 Generated by [robots](https://vyos.io)
|
|
general: T8595: switch CLAUDE.md to AGENTS.md (+ Copilot symlink)
|
|
.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)
|
|
|
|
vyos/fix/codecopier-snippet-leak-and-clipboard-error
fix(codecopier): exclude Copy label from clipboard and stop showing false success
|
|
docs(claude-md): fix llms.txt backtick, redirect aliases, template path examples
|
|
chore(readme): remove broken vale lint section
|
|
- 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)
|
|
chore(makefile): remove dead AUTOOPTS variable
|
|
chore(github): fix grammar in PR template comment
|
|
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)
|
|
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)
|
|
"All PR should follow" → "All PRs should follow".
🤖 Generated by [robots](https://vyos.io)
|
|
docs(robots): fix stale sitemap URL on current
|
|
chore(claude-md): update for post-flip MyST-as-primary state
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
docs: render llms.txt at build time (current)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
# Conflicts:
# docs/conf.py
|
|
fix/codecopier-snippet-leak-and-clipboard-error
# Conflicts:
# docs/_static/js/codecopier.js
|
|
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)
|
|
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)
|