| Age | Commit message (Collapse) | Author |
|
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)
|
|
The pre-existing comment said "keep curated render via setup hook" but
didn't say where the source template lives. After moving llms.txt off
`html_extra_path` and onto a build-time render, point readers explicitly
at `_templates/llms.txt.j2` and `_write_llms_txt()` so future updates
land in the right place.
Addresses Copilot review feedback on PR #1874.
π€ Generated by [robots](https://vyos.io)
|
|
- Tests: replace bare `pytest tests/` with the working invocation
(`cd tests && PYTHONPATH=../scripts python -m pytest ...`) since the
test imports from `scripts/` which is not on PYTHONPATH by default.
- Vale: expand the single-file invocation into a copy-pasteable
`docker run` command instead of the placeholder `docker run ...`.
- Sphinx extensions bullet: add the missing `cmdincludemd`,
`cfgcmdlist`, `opcmdlist` directives (and `cfgcmd`/`opcmd` roles)
registered by `docs/_ext/vyos.py`.
- Command directives section: clarify that the MyST include directive is
`cmdincludemd` (not `cmdinclude`) β RST pages use `cmdinclude`,
MD pages use `cmdincludemd`.
- Linter suppression markers: clarify that `{eval-rst}` blocks inside
Markdown pages keep the `..` RST marker form, while top-level Markdown
uses the `%` MyST comment form.
π€ 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)
|
|
The CLAUDE.md scaffolded by /init reflected the pre-MyST repo and was
never updated as the migration landed. Replaces it with a current
description of how the repo actually works:
- MD is the canonical source for migrated pages on all three release
branches (current/circinus/sagitta) as of 2026-05-06. RST is the
canonical source for pages that haven't been migrated yet.
- Documents the rare RST override mechanism: rst-<page>.rst plus
docs/_rst_overrides.txt, scripts/swap_sources.py CLI flags. The
override list is empty by default; the mechanism is a no-op.
- Editing rules: edit the .md for migrated pages, the .rst for
non-migrated pages, write new pages as .md from the start. The
md- prefix used during the migration is gone.
Also adds previously-missing sections: tests command, vale lint
command, branches/versions table with constellationβversion mapping,
PR review flow with Copilot+CodeRabbit, worktree convention.
Generated by robots https://vyos.io
|
|
feat: MD as primary, RST as override β Phase 1 (rename + exclude flip on current)
|
|
Phase 2 of the MD-as-primary flip. Inverts swap_sources.py so it activates
RST overrides (rst-<stem>.rst β <stem>.rst, with the matching <stem>.md
excluded via _md_exclude.txt) for stems listed in docs/_rst_overrides.txt.
Changes:
- scripts/swap_sources.py: rewritten with inverted rename direction and
renamed runtime artifacts (_rst_override_state.json, _md_exclude.txt).
CLI flags --swap/--restore/--dry-run/--status kept for compatibility with
the Makefile and Read the Docs config.
- docs/conf.py: clean up the runtime-artifact references that Phase 1 left
pointing at the old _swap_state.json and _swap_exclude.txt names.
- scripts/import_myst.py and tests/test_import_myst.py deleted; obsolete
after the flip (MD is canonical, no separate import workflow needed).
- tests/test_swap_sources.py: rewritten for the new semantics. All 10 tests
pass under pytest.
Smoke-tested end-to-end on a real worktree page (quick-start): adding the
stem to _rst_overrides.txt, --dry-run, --swap, --status, --restore, all
behave correctly. State JSON has version 2 (bumped from 1 to surface the
incompatibility on rollback if old state lingers).
Phase 3 will verify Makefile, .readthedocs.yml, docs/_ext/vyos.py don't
reference any of the old names, then mark the PR ready-for-review.
Generated by robots https://vyos.io
|
|
This is the first of three phases inverting the per-page swap mechanism
so MD becomes the canonical primary and RST becomes the rare override.
Phase 1 β file renames + conf.py exclude_patterns flip only:
- Rename docs/**/md-<stem>.md to docs/**/<stem>.md (drop md- prefix)
for all 254 stems previously listed in docs/_swap.txt
- Rename docs/**/<stem>.rst to docs/**/rst-<stem>.rst (add rst- prefix)
for the same 254 stems
- Repurpose docs/_swap.txt as docs/_rst_overrides.txt; initially empty
comment-only since no pages need the RST fallback right now
- conf.py exclude_patterns flipped: rst-*.rst is now excluded by default
instead of md-*.md
- conf.py runtime-artifact references updated to _rst_override_state.json
and _md_exclude.txt (Phase 2 will rewrite swap_sources.py to produce
these names; for now no swap script runs because overrides list is empty)
Phase 2 (next commit on this branch) will rewrite scripts/swap_sources.py
with inverted rename direction, delete scripts/import_myst.py + tests, and
update tests/test_swap_sources.py for the new semantics.
Phase 3 will be the cleanup pass and ready-for-review flip.
Generated by robots https://vyos.io
|
|
docs: fix typos and grammar (ported from #1852 RST β MyST)
|
|
Agent-Logs-Url: https://github.com/vyos/vyos-documentation/sessions/782645e7-c7a9-4da7-8c0f-46a0c82f9314
Co-authored-by: andamasov <12631358+andamasov@users.noreply.github.com>
|
|
Agent-Logs-Url: https://github.com/vyos/vyos-documentation/sessions/9994d03c-fd5a-43d8-a923-dfc9ea3a0a5e
Co-authored-by: andamasov <12631358+andamasov@users.noreply.github.com>
|