| Age | Commit message (Collapse) | Author |
|
previews) (#2140)
* docs-infra: scaffold Cloudflare workers workspace (versions.json v2, matrix, toolchain)
π€ Generated by [robots](https://vyos.io)
* docs-infra: record full Phase-0 plan decision in workers/PLAN.md
π€ Generated by [robots](https://vyos.io)
* docs-infra: shared content worker β asset serving, cache classes, X-Docs-Build, canary no-store
π€ Generated by [robots](https://vyos.io)
* docs-infra: run worker script before assets; test fetch entrypoint
π€ Generated by [robots](https://vyos.io)
* docs-infra: apex manifest loader + dispatch map + runtime binding guard (TDD)
π€ Generated by [robots](https://vyos.io)
* docs-infra: apex redirects (aliases, PDF, trailing-slash) + special paths (TDD)
π€ Generated by [robots](https://vyos.io)
* docs-infra: PDF redirect honors pdf:null and preserves query
π€ Generated by [robots](https://vyos.io)
* docs-infra: apex UA gate β allowlist-wins, log-only AI crawlers, empty block list at launch
π€ Generated by [robots](https://vyos.io)
* docs-infra: apex router (pipeline Β§3.2), themed 404/503, /kb seam, env configs + congruence test
π€ Generated by [robots](https://vyos.io)
* docs-infra: add missing-User-Agent regression test for apex UA gate
π€ Generated by [robots](https://vyos.io)
* docs-infra: R2-streaming preview worker β MIME map, noindex, no-store (TDD)
π€ Generated by [robots](https://vyos.io)
* docs-infra: preview 404 no-store + fetch handler tests
π€ Generated by [robots](https://vyos.io)
* docs-infra: bootstrap script β binding-target workers must exist before apex deploys
π€ Generated by [robots](https://vyos.io)
* docs-infra: apex run_worker_first, lockfile for npm ci, PDF Location from manifest
π€ Generated by [robots](https://vyos.io)
* docs-infra: derive html_baseurl from DOCS_VERSION_SLUG with RTD fallback (canonical gate prereq)
π€ Generated by [robots](https://vyos.io)
* docs-infra: version picker + status banner + language scaffold (vanilla JS, TDD pure core)
π€ Generated by [robots](https://vyos.io)
* docs-infra: picker preserves query+hash across switch; valid breadcrumb markup
π€ Generated by [robots](https://vyos.io)
* docs-infra: Pagefind search wrapper with runtime base-path + preview prefix handling (TDD)
π€ Generated by [robots](https://vyos.io)
* docs-infra: pagefind wrapper β asset-failure notice + UI stylesheet load
π€ Generated by [robots](https://vyos.io)
* docs-infra: gate Pagefind searchbox to CF builds (RTD keeps stock search until cutover)
π€ Generated by [robots](https://vyos.io)
* docs-infra: deploy sanity gates β limits, critical pages, count-delta, canonical (TDD)
π€ Generated by [robots](https://vyos.io)
* docs-infra: hermetic gate tests via fixture versions.json
π€ Generated by [robots](https://vyos.io)
* docs-infra: docs-build workflow β candidate/smoke/promote two-stage deploy + registry + rollback
Two-stage CF Workers pipeline: build in pinned container, assemble artifact,
sanity gates, deploy candidate, scoped pre-traffic smoke via canary apex,
promote (rollback-id capture, hostname purge, registry upload), post-promote
probe + auto-rollback. DOCS_CF_LIVE repo variable gates every docs.vyos.io
production interaction pre-cutover.
scripts/docs_gates/smoke.py adds one authorized check beyond the spec: the
version's index.html probe asserts the #vyos-search mount div is present in
the response body, guarding CI silently forgetting DOCS_VERSION_SLUG (which
would otherwise ship stock RTD search without the Pagefind gate noticing).
π€ Generated by [robots](https://vyos.io)
* docs-infra: build docs image in-workflow with buildx cache (v4.1 β digest pin dropped)
Plan v4.1 amendment: the ghcr.io digest-pinned image does not exist (workflow
would hard-fail at the first docker step on every push). Replace the BUILD_IMAGE
env placeholder with an in-workflow docker build from docker/Dockerfile via
docker/setup-buildx-action@v3 + docker/build-push-action@v6 (context: docker/,
load: true, tags: docs-build:local, GHA cache from/to). The checked-out commit
is the pin; buildx GHA cache keeps repeat builds cheap. Sphinx-build step swaps
to docs-build:local; inner script unchanged.
π€ Generated by [robots](https://vyos.io)
* docs-infra: apex/preview deploy workflow β canary auto, production behind environment approval
* docs-infra: apex-deploy concurrency guard (per-ref, cancel-in-progress)
π€ Generated by [robots](https://vyos.io)
* docs-infra: fork-safe PR preview pipeline β approval record, R2 prefixes, label consumption, cleanup
* docs-infra: nightly preview sweep β pipefail + per-prefix failure isolation
π€ Generated by [robots](https://vyos.io)
* docs-infra: nightly canary QA β per-entry sweep + URL-parity corpus vs RTD
π€ Generated by [robots](https://vyos.io)
* docs-infra: parity sweep scoped to CF-built versions; transport-error resilience
π€ Generated by [robots](https://vyos.io)
* docs-infra: one-off bootstrap workflow (binding targets β runs once on this push)
π€ Generated by [robots](https://vyos.io)
* docs-infra: remove one-off bootstrap workflow (bootstrap complete)
π€ Generated by [robots](https://vyos.io)
* docs-infra: one-off canary apex + preview deploy (route targets for Task 3.6 step 2c)
π€ Generated by [robots](https://vyos.io)
* docs-infra: remove one-off canary deploy workflow (targets live)
π€ Generated by [robots](https://vyos.io)
* docs-infra: address Phase-0 CodeRabbit findings (canonical gate, error caching, registry pointer, validation)
π€ Generated by [robots](https://vyos.io)
* docs-infra: strengthen manifest tests (full dispatch iteration, mutation-free validate)
π€ Generated by [robots](https://vyos.io)
* docs-infra: address GitHub CodeRabbit review (pointer-after-probe, fail-closed sweeps, block-precedence UA gate, preview hardening)
π€ Generated by [robots](https://vyos.io)
* docs-infra: adversarial review fixes β error no-store, probe retry, PR-list membership, preview dotted-segment
π€ Generated by [robots](https://vyos.io)
* docs-infra: serve oversized legacy PDF from R2 via apex (spec Β§5 fallback)
The 1.3 PDF (29.2 MiB) exceeds the 25 MiB static-asset cap and is absent
from the legacy content Worker's build, so /_/downloads/en/1.3/pdf/ (and
the picker's PDF link) 301'd into a dead-end 404 post-cutover. Add the R2
object fallback spec Β§5 already documented but never implemented: a
DOCS_PDFS R2 bucket binding on the apex Worker, a manifest pdf_r2_key
field (1.3 only), and a router step ahead of version dispatch that streams
the object with its own cache class (canary/error still force no-store).
π€ Generated by [robots](https://vyos.io)
* docs-infra: PDF R2 fallback honors Range + If-None-Match, preserves ETag
π€ Generated by [robots](https://vyos.io)
|
|
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)
|
|
π€ 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)
|
|
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)
|
|
Replace the static curated llms.txt with a build-time render that
interpolates html_baseurl and release into the file, so the file always
matches the branch it was built from. llms-full.txt is already
auto-generated by sphinx-llms-txt.
π€ Generated by [robots](https://vyos.io)
|
|
|
|
|
|
|
|
Per https://blog.vyos.io/vyos-1.3.0-lts-release
|
|
|
|
|
|
|