Skip to content

refactor(docs): switch to VitePress Plus theme with multi-version builds - #6010

Open
rh-hemartin wants to merge 1 commit into
mainfrom
refactor/vitepress-plus-theme
Open

refactor(docs): switch to VitePress Plus theme with multi-version builds#6010
rh-hemartin wants to merge 1 commit into
mainfrom
refactor/vitepress-plus-theme

Conversation

@rh-hemartin

@rh-hemartin rh-hemartin commented Aug 7, 2026

Copy link
Copy Markdown
Member

Summary

Closes #5717

  • Replace the default VitePress theme with @lando/vitepress-theme-default-plus, which provides built-in multi-version doc support via git-tag discovery and the mvb CLI
  • Keep the hand-rolled escapeVueSyntax markdown preprocessor for most pages; skip it only for v/index.md so Theme+ Vue components on that page can compile
  • Add a versions landing page at docs/v/index.md and a sidebar version switcher
  • Override the theme's pink/indigo accent palette with the project's green brand colors
  • Simplify Vite alias resolution with import.meta.resolve instead of manual path.resolve chains

Test plan

  • npm run docs:dev starts without errors and renders the site with green branding
  • Version switcher appears in the sidebar with stable/edge/dev links
  • npm run docs:build completes (mvb discovers tags and builds versioned output)
  • Pages with {{ }} and non-HTML <tags> in markdown render correctly with escapeVueSyntax still applied (except v/index.md)
  • /v/ versions page lists discovered tags

🤖 Generated with Claude Code

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 7, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 1:59 PM UTC · Completed 2:19 PM UTC

Commit: 399214e · View workflow run →

@codecov

codecov Bot commented Aug 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review

Findings

Medium

  • [protected-path] .github/workflows/site-build.yml — Modifies a file under the .github/ protected path (adds timeout-minutes: 10, fetch-tags: true, fetch-depth: 0, mvb cache steps, and VPL_MVB_BRANCH env var for multi-version builds). The linked issue Add multi-version documentation support #5717 provides context for these CI changes. Human approval is required for all protected-path changes regardless of justification.

  • [scope-vs-authorization] .github/workflows/site-build.yml:1 — The workflow uses path filters (on.push.paths and on.pull_request.paths) but does not include merge_group: as a trigger. Per docs/contributing/ci-workflows.md, path-filtered workflows must include merge_group: with a path-relevance guard step. This is a pre-existing gap not introduced by this PR, but surfaced because the PR modifies the workflow.
    Remediation: Add merge_group: to the on: triggers and add a path-relevance guard step.

Low

  • [runtime-mechanism] docs/.vitepress/config.ts:17 — The version variable reads .version from package.json, which has no version field in the repo. The ?? "dev" fallback always triggers for local and PR CI builds. The mechanism is intentional: mvb injects the version into package.json during tagged-release sub-builds in a temp checkout, and doc-site.md documents this behavior.

  • [edge-case] package.json:17 — The docs:preview script (vitepress preview docs) serves a single VitePress build. After an mvb multi-version build, the output structure includes versioned subdirectories that vitepress preview may not correctly route, causing 404s for versioned paths.

  • [acceptance-criteria-gap] — Issue Add multi-version documentation support #5717 acceptance criterion Use AI to help formalise intent after rapid local prototyping #4 requires "/docs/ redirects to /docs/latest/". No redirect configuration is visible in this diff. The PR relies on the theme to handle this automatically, but this is not verified.
    Remediation: Add the redirect verification to the test plan.

  • [stale-documentation] docs/site-deployment.md:92 — Local preview section shows npm run docs:build without noting that this command now runs mvb docs (multi-version build) which requires a full git clone with tags.
    Remediation: Add a note about the full-clone prerequisite for versioned builds.

  • [stale-documentation] docs/architecture.md:872 — States the documentation site is "built from docs/ by VitePress (npm run docs:build)". After this PR, docs:build runs mvb docs which orchestrates per-tag VitePress builds. The description is incomplete.
    Remediation: Update to mention mvb as the build orchestrator.

  • [inconsistent-formatting-across-siblings] docs/.vitepress/theme/components/EnlargeDialog.vue — The PR reformats Mermaid.vue, ReadingProgress.vue, and index.ts to double-quote style but leaves sibling files EnlargeDialog.vue and EnlargeContent.vue in single-quote style. Since .prettierignore now includes these files, they should be reformatted.
    Remediation: Run prettier on the remaining sibling files.

  • [incomplete-formatting-within-file] docs/.vitepress/theme/components/Mermaid.vue:58 — Most of Mermaid.vue reformatted to double-quote + semicolon style, but the openLightbox and onFigureClick functions still use single quotes and omit semicolons.
    Remediation: Run prettier on the whole file.

  • [removed-code-comment] docs/.vitepress/config.ts — The explanatory comment attributing the v-pre inline-code workaround to VitePress maintainer brc-dd (linking to vuejs/vitepress/discussions/3724) was removed. The workaround code itself is unchanged but the rationale and upstream reference are lost.
    Remediation: Restore the attribution comment above config: (md) => {.

  • [hardcoded-path-exemption] docs/.vitepress/config.ts — The preConfig markdown parser hardcodes if (rel === "v/index.md") to skip escapeVueSyntax. This is a magic-string exemption that will silently break if the file is renamed or if additional pages need raw Vue syntax.
    Remediation: Consider using a frontmatter key (e.g., rawVue: true) instead of a literal path string.

  • [weak-type-declarations] docs/.vitepress/lando-theme.d.ts:5sidebarEnder and multiVersionBuild are typed as unknown in the declaration file, plus a catch-all [key: string]: unknown index signature. This provides minimal type safety for the VPL theme config extensions.
    Remediation: Define the shapes of sidebarEnder and multiVersionBuild to match their usage in config.ts.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run

Review

Findings

Medium

  • [protected-path] .github/workflows/site-build.yml — Modifies a file under the .github/ protected path (adds timeout-minutes: 10, fetch-tags: true, fetch-depth: 0, mvb cache steps, and VPL_MVB_BRANCH env var for multi-version builds). The linked issue Add multi-version documentation support #5717 provides context for these CI changes. Human approval is required for all protected-path changes regardless of justification.

  • [scope-vs-authorization] .github/workflows/site-build.yml:1 — The workflow uses path filters (on.push.paths and on.pull_request.paths) but does not include merge_group: as a trigger. Per docs/contributing/ci-workflows.md, path-filtered workflows must include merge_group: with a path-relevance guard step. This is a pre-existing gap not introduced by this PR, but surfaced because the PR modifies the workflow.
    Remediation: Add merge_group: to the on: triggers and add a path-relevance guard step.

Low

  • [runtime-mechanism] docs/.vitepress/config.ts:9 — The version variable reads .version from package.json, which has no version field. The ?? "dev" fallback always triggers for local and PR CI builds. The mechanism is intentional — mvb injects the version into package.json during tagged-release sub-builds in a temp checkout, and doc-site.md documents this behavior. Follow up by verifying the first tagged release build shows the correct version label.

  • [edge-case] docs/.vitepress/config.ts — The v/index.md bypass in preConfig uses exact string equality (rel === "v/index.md"). VitePress consistently uses forward-slash paths, but a more defensive rel.endsWith("v/index.md") would guard against future path normalization changes.

  • [edge-case] package.json — The docs:preview script (vitepress preview docs) may not correctly serve the multi-version directory structure produced by mvb. Versioned sub-paths (e.g., /docs/stable/) could 404 under vitepress preview.
    Remediation: Test npm run docs:preview after a local mvb build, or document this limitation.

  • [stale-documentation] docs/site-deployment.md:92 — The local preview section shows npm run docs:build without noting that docs:build now runs mvb docs, which requires a full clone with tags (fetch-depth: 0, fetch-tags: true). A developer with a shallow clone would get incomplete versioned output.
    Remediation: Add a note about the full-clone prerequisite for versioned builds.

  • [stale-documentation] docs/architecture.md:866 — States the documentation site is "built from docs/ by VitePress (npm run docs:build)". After this PR, docs:build runs mvb docs which orchestrates per-tag VitePress builds. The description is incomplete.
    Remediation: Update to mention mvb as the build orchestrator.

  • [acceptance-criteria-gap] docs/.vitepress/config.ts — Issue Add multi-version documentation support #5717 acceptance criterion Use AI to help formalise intent after rapid local prototyping #4 requires "/docs/ redirects to /docs/latest/". No redirect configuration is visible in this diff. The issue body states the theme handles this automatically — verify during testing.

  • [removed-code-comment] docs/.vitepress/config.ts:443 — The explanatory comment attributing the v-pre inline-code workaround to VitePress maintainer brc-dd (linking to vuejs/vitepress#3724) was removed. The code itself is unchanged, but the rationale and upstream reference are lost.
    Remediation: Restore the comment above config: (md) => {.

  • [inconsistent-formatting-across-siblings] docs/.vitepress/theme/components/Mermaid.vue — The PR reformats Mermaid.vue, ReadingProgress.vue, and index.ts from single-quote to double-quote style (matching the Prettier config now that .prettierignore includes docs/.vitepress/). Sibling files EnlargeDialog.vue and EnlargeContent.vue in the same directory remain in single-quote style.
    Remediation: Run Prettier on the remaining sibling files for consistency.

Previous run (2)

Review

Findings

Medium

  • [logic-error] docs/.vitepress/config.ts:9 — The version variable reads package.json's .version field with a ?? "dev" fallback, but package.json has no version field (private: true, no version). The nullish coalescing always produces "dev", so the sidebarEnder version label will display "dev" in every build — including tagged release builds. Additionally, docs/doc-site.md states that config.ts reads VPL_MVB_VERSION per sub-build, but the actual code does not reference VPL_MVB_VERSION. See also: [stale-documentation] finding at docs/doc-site.md:20.
    Remediation: Read the env var that mvb sets per sub-build: const version = process.env.VPL_MVB_VERSION ?? "dev";

  • [stale-documentation] docs/doc-site.md:48 — The Submodules section states "CI uses submodules: true on actions/checkout", but this PR removed submodules: true from the workflow and replaced it with fetch-tags: true + fetch-depth: 0, with submodule init in a separate git submodule update --init step. This is a factual inaccuracy in a file modified by this PR.
    Remediation: Update the Submodules section to reflect the new CI approach.

  • [stale-documentation] docs/doc-site.md:20 — The Building section states "config.ts reads this [VPL_MVB_VERSION] to label the sidebar version switcher" but config.ts actually reads package.json's .version field, not the VPL_MVB_VERSION env var. The documented behavior does not match the actual code. See also: [logic-error] finding at config.ts:9.
    Remediation: Either update the doc text to match the code, or update config.ts to read VPL_MVB_VERSION as the doc claims.

  • [protected-path] .github/workflows/site-build.yml — Modifies a file under the .github/ protected path (adds timeout-minutes: 10, fetch-tags: true, fetch-depth: 0, cache steps, and VPL_MVB_BRANCH env var for multi-version builds). The linked issue Add multi-version documentation support #5717 provides context for these CI changes. Human approval is required for all protected-path changes regardless of justification.

Low

  • [pr-description-accuracy] docs/.vitepress/config.ts — The PR body claims "Drop the hand-rolled escapeVueSyntax markdown preprocessor (the theme handles Vue syntax escaping)", but escapeVueSyntax is still defined and called for all pages except v/index.md. The function was not dropped; only v/index.md is exempted.
    Remediation: Update the PR description to accurately reflect that escapeVueSyntax is retained but bypassed for v/index.md.

  • [missing-section-comment] docs/.vitepress/theme/custom.css — The new --vp-c-pink-* and --vp-c-indigo-* variable blocks override upstream theme accent tokens with the project's green brand values, but have no comment explaining why pink/indigo names carry green values. The rest of the CSS follows a convention of section-header comments.
    Remediation: Add a comment such as /* Override upstream VPL accent tokens (pink/indigo) to match brand green palette */.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run (3)

Review

Findings

Medium

  • [version-label-always-dev] docs/.vitepress/config.ts:9 — The version variable is read from package.json's .version field, but package.json does not have a version field. The ?? "dev" fallback will always trigger, so the sidebarEnder version label will display "dev" in every build — including tagged release builds. Additionally, the PR's own docs/doc-site.md states that mvb sets VPL_MVB_VERSION per sub-build and that config.ts reads this to label the sidebar version switcher, but the actual code does not reference VPL_MVB_VERSION at all. The documentation and code are inconsistent.
    Remediation: Read the env var that mvb sets per sub-build: const version = process.env.VPL_MVB_VERSION ?? "dev";

  • [stale-documentation] docs/doc-site.md — The Submodules section still states "CI uses submodules: true on actions/checkout", but this same PR changed the workflow to use fetch-tags: true + fetch-depth: 0, with submodule init happening in a separate git submodule update --init step. This is a factual inaccuracy in a file modified by this PR.
    Remediation: Update the Submodules section to reflect the new CI approach.

  • [protected-path] .github/workflows/site-build.yml — Modifies a file under the .github/ protected path (adds timeout-minutes: 10, fetch-tags: true, fetch-depth: 0, cache steps, and VPL_MVB_BRANCH env var for multi-version builds). The linked issue Add multi-version documentation support #5717 provides context for these CI changes. Human approval is required for all protected-path changes regardless of justification.

Low

  • [cache-key-collision] .github/workflows/site-build.yml — The actions/cache/restore and actions/cache/save steps use a static key lando-mvb with no hash or differentiator. GitHub Actions cache keys are immutable once created — cache/save will silently skip if the key already exists. The cache will never be updated after the first successful build.

  • [preview-incompatibility] package.json — The docs:preview script still runs vitepress preview docs, which serves standard VitePress build output (docs/.vitepress/dist/). But docs:build now runs mvb docs, which produces a multi-version directory structure that vitepress preview may not correctly serve.

  • [pr-description-accuracy] docs/.vitepress/config.ts — The PR body claims "Drop the hand-rolled escapeVueSyntax markdown preprocessor (the theme handles Vue syntax escaping)", but escapeVueSyntax is still defined and called for all pages except v/index.md. The function was not dropped; only v/index.md is exempted.
    Remediation: Update the PR description to accurately reflect that escapeVueSyntax is retained but bypassed for v/index.md.

  • [acceptance-criteria-gap] — Issue Add multi-version documentation support #5717 acceptance criterion Use AI to help formalise intent after rapid local prototyping #4 states "/docs/ redirects to /docs/latest/". No redirect configuration is visible in this diff. The issue body states the theme handles this automatically — verify this during testing.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run (4)

Review

Findings

Medium

  • [env-var-mismatch] docs/.vitepress/config.ts:6 — The sidebar version label reads process.env.VPL_MVB_BRANCH (set by CI to the commit SHA), but the PR's own docs/doc-site.md states that mvb sets VPL_MVB_VERSION per sub-build for version labeling. During a multi-version build, every versioned sub-build's sidebar will display the commit SHA rather than the version tag (e.g., v0.38.0). The documentation and code are inconsistent about which env var carries the version label.
    Remediation: Read VPL_MVB_VERSION first, falling back to VPL_MVB_BRANCH, then "dev": const version = process.env.VPL_MVB_VERSION ?? process.env.VPL_MVB_BRANCH ?? "dev";

  • [protected-path] .github/workflows/site-build.yml — Modifies a file under the .github/ protected path (adds fetch-tags: true, fetch-depth: 0, timeout-minutes: 10, and VPL_MVB_BRANCH env var for multi-version builds). The linked issue Add multi-version documentation support #5717 provides context for these CI changes. Human approval is required for all protected-path changes regardless of justification.

Low

  • [doc-staleness] docs/doc-site.md — The Submodules section still states "CI uses submodules: true on actions/checkout", but this same PR changed the workflow to use fetch-tags: true + fetch-depth: 0, with submodule init happening in a separate git submodule update --init step.
    Remediation: Update the Submodules section to reflect the new CI approach.

  • [pr-description-accuracy] docs/.vitepress/config.ts — The PR body claims "Drop the hand-rolled escapeVueSyntax markdown preprocessor (the theme handles Vue syntax escaping)", but escapeVueSyntax is still defined and called for all pages except v/index.md. The function was not dropped; only v/index.md is exempted.
    Remediation: Update the PR description to accurately reflect that escapeVueSyntax is retained but bypassed for v/index.md.

  • [acceptance-criteria-gap] — Issue Add multi-version documentation support #5717 acceptance criterion Use AI to help formalise intent after rapid local prototyping #4 states "/docs/ redirects to /docs/latest/". No redirect configuration is visible in this diff. The issue body states the theme handles this automatically — verify this during testing.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run (5)

Review

Findings

Medium

  • [ci-configuration] .github/workflows/site-build.yml:46 — The checkout step uses fetch-tags: true without overriding the default fetch-depth: 1. With a shallow clone (depth=1), fetch-tags: true does not reliably fetch tags — this is a well-documented issue (fetch-tags: true doesn't actually fetch any tags actions/checkout#1471, ADR: require is_authorized check on all agent slash commands #1662). The mvb tool discovers documentation versions from git tags matching satisfies: ">=0.38.0". Without tags present, mvb will not find any qualifying versions and may build only a single dev version, defeating the purpose of multi-version documentation.
    Remediation: Set fetch-depth: 0 on the checkout step, or add a separate step git fetch --tags --force after checkout, to ensure all tags are available for mvb version discovery.

  • [env-var-mismatch] docs/.vitepress/config.ts:5 — The sidebar version label reads process.env.VPL_MVB_BRANCH (line 5), and CI sets VPL_MVB_BRANCH to the commit SHA. The PR's own docs/doc-site.md states that mvb sets VPL_MVB_VERSION per sub-build for version labeling. If the theme's mvb tool sets VPL_MVB_VERSION (a distinct env var), config.ts never reads it — so every versioned sub-build's sidebar will display the same commit SHA rather than the actual version string (e.g., v0.38.0). Either the code should read VPL_MVB_VERSION, or the documentation is incorrect about which env var mvb sets.
    Remediation: Verify which env var mvb sets per sub-build by checking the theme's source. If it sets VPL_MVB_VERSION, change line 5 to: const version = process.env.VPL_MVB_VERSION ?? process.env.VPL_MVB_BRANCH ?? "dev";

  • [protected-path] .github/workflows/site-build.yml — Modifies a file under the .github/ protected path (adds fetch-tags: true, timeout-minutes: 10, and VPL_MVB_BRANCH env var for multi-version builds). The linked issue Add multi-version documentation support #5717 provides context for these CI changes. Human approval is required for all protected-path changes regardless of justification.

Low

  • [acceptance-criteria-gap] — Issue Add multi-version documentation support #5717 acceptance criterion Use AI to help formalise intent after rapid local prototyping #4 states "/docs/ redirects to /docs/latest/". No redirect configuration is visible in this diff. The issue body states the theme handles this automatically — verify this during testing.

  • [pr-description-accuracy] docs/.vitepress/config.ts — The PR body claims "Drop the hand-rolled escapeVueSyntax markdown preprocessor (the theme handles Vue syntax escaping)", but escapeVueSyntax is still defined and called for all pages except v/index.md. The function was not dropped; only v/index.md is exempted.
    Remediation: Update the PR description to accurately reflect that escapeVueSyntax is retained but bypassed for v/index.md.

  • [doc-staleness] docs/doc-site.md — The Submodules section still states "CI uses submodules: true on actions/checkout", but this PR changed the workflow to use fetch-tags: true instead, with submodule init happening in a separate build step.
    Remediation: Update the Submodules section to reflect the new CI approach: checkout uses fetch-tags: true and submodules are initialized via git submodule update --init in the build step.

  • [quote-style-inconsistency] docs/.vitepress/theme/components/Mermaid.vue — The PR reformats the bulk of this component's <script> block from single quotes to double quotes with trailing semicolons, but the openLightbox and onFigureClick functions (lines 730–738) still use single quotes and omit semicolons, creating an intra-file inconsistency.
    Remediation: Run npm run format to apply Prettier consistently, or manually update the remaining functions.

  • [missing-section-comment] docs/.vitepress/theme/custom.css — The new --vp-c-pink-* and --vp-c-indigo-* variable blocks override upstream theme accent tokens with the project's green brand values, but have no comment explaining why pink/indigo names carry green values. The rest of the CSS follows a convention of section-header comments.
    Remediation: Add a comment such as /* Override upstream theme accent tokens (pink/indigo) to match brand palette */.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run (6)

Review

Findings

High

  • [submodule-initialization] .github/workflows/site-build.yml — The PR removes submodules: true from the checkout step and changes the build command from npm run docs:build (which runs git submodule update --init && mvb docs) to npx mvb docs (which does not initialize submodules). The experiments submodule provides content consumed by getMarkdownFiles("experiments", "experiments") in docs/.vitepress/config.ts. Without submodule initialization, the experiments/ directory will be empty in CI builds, and all experiment documentation pages will silently disappear from the site. The build will not fail — getMarkdownFiles gracefully returns [] for missing directories.
    Remediation: Either add a git submodule update --init step before npx mvb docs in the CI workflow, use npm run docs:build (which includes submodule initialization), or if experiments content is intentionally excluded from versioned builds, document this decision.

Medium

  • [ci-configuration] .github/workflows/site-build.yml — The checkout step uses fetch-tags: true without overriding the default fetch-depth: 1. The mvb multi-version build tool needs git tags to discover documentation versions (the config specifies multiVersionBuild.satisfies: ">=0.38.0"). With a shallow clone, tags may not be reliably fetched, potentially causing mvb to build only a single version or fail.
    Remediation: Set fetch-depth: 0 to ensure all tags and their reachability are available for mvb to enumerate versions.

  • [protected-path] .github/workflows/site-build.yml — Modifies a file under the .github/ protected path (adds fetch-tags: true, timeout-minutes: 10, and VPL_MVB_BRANCH env var for multi-version builds). The linked issue Add multi-version documentation support #5717 provides context for these CI changes. Human approval is required for all protected-path changes regardless of justification.

Low

  • [env-var-mismatch] docs/.vitepress/config.ts — The version constant reads process.env.VPL_MVB_VERSION, and CI only sets VPL_MVB_BRANCH. The PR's own docs/doc-site.md documents that mvb sets VPL_MVB_VERSION per sub-build — verify this claim holds at build time.

  • [error-handling] docs/.vitepress/theme/index.ts:12 — The expression VPLTheme.Layout! uses a TypeScript non-null assertion. If @lando/vitepress-theme-default-plus does not export Layout, this produces a runtime error. Risk is low since removing Layout would be a semver-breaking change and the ^1.2.0 range constrains to 1.x.

  • [acceptance-criteria-gap] — Issue Add multi-version documentation support #5717 acceptance criterion Use AI to help formalise intent after rapid local prototyping #4 states "/docs/ redirects to /docs/latest/". No redirect configuration is visible in this diff. The issue body states the theme handles this automatically — verify this during testing.
    Remediation: Add a test plan item to verify that the built output includes a redirect from /docs/ to /docs/latest/.

  • [pr-description-accuracy] docs/.vitepress/config.ts — The PR body claims "Drop the hand-rolled escapeVueSyntax markdown preprocessor (the theme handles Vue syntax escaping)", but escapeVueSyntax is still defined and called for all pages except v/index.md. The function was not dropped; only v/index.md is exempted.
    Remediation: Update the PR description to accurately reflect that escapeVueSyntax is retained but bypassed for v/index.md.

  • [comment-removal] docs/.vitepress/config.ts — The PR removes the comment attributing the v-pre inline-code workaround to VitePress maintainer brc-dd (linking to How to solve escaping of inline code blocks vuejs/vitepress#3724). This attribution aids future maintainers understanding why the workaround exists.
    Remediation: Keep the comment (or a shortened version) above the config callback.

  • [frontmatter-capitalization] docs/v/index.md:2 — Description reads "All Other documentation versions" — the capital "O" should be lowercase for sentence-case consistency.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run (7)

Review

Findings

Medium

  • [protected-path] .github/workflows/site-build.yml — Modifies a file under the .github/ protected path (adds fetch-tags, fetch-depth: 0, and VPL_MVB_BRANCH env var for multi-version builds). The linked issue Add multi-version documentation support #5717 provides context for these CI changes. Human approval is required for all protected-path changes regardless of justification.

Low

  • [acceptance-criteria-gap] — Issue Add multi-version documentation support #5717 acceptance criterion Use AI to help formalise intent after rapid local prototyping #4 states "/docs/ redirects to /docs/latest/". No redirect configuration is visible in this diff. The mvb tool likely handles this automatically, but it is not verified or documented in the PR.
    Remediation: Verify that mvb produces a /docs//docs/latest/ redirect. If it does, add a brief note in docs/doc-site.md confirming the behavior.

  • [error-handling] docs/.vitepress/config.ts — Removal of the escapeVueSyntax preprocessor removes automatic protection against bare {{ }} in markdown prose being interpreted as Vue template expressions. All current content is protected (code fences, inline backticks with v-pre, and the ADR template was updated), but future docs with bare {{ }} patterns outside code fences would fail at build time.

  • [error-handling] docs/.vitepress/theme/index.ts:12 — The expression VPLTheme.Layout! uses a TypeScript non-null assertion. If the @lando/vitepress-theme-default-plus package exports a theme without Layout, this produces a runtime error. Risk is low since removing Layout would be a semver-breaking change, and the ^1.2.0 range constrains to 1.x.
    Remediation: Add a runtime guard: return h(VPLTheme.Layout ?? VPLTheme, null, { ... }).

  • [script-consistency] package.json — The docs:preview script still uses vitepress preview docs, but docs:build now invokes mvb docs. If mvb produces output in a different directory structure than docs/.vitepress/dist/, the preview command may serve incorrect content.

  • [env-var-mismatch] docs/.vitepress/config.ts:7 — The version constant reads process.env.VPL_MVB_VERSION, and CI only sets VPL_MVB_BRANCH. The PR's own docs/doc-site.md documents that mvb sets VPL_MVB_VERSION per sub-build — verify this claim holds at build time.

  • [frontmatter-capitalization] docs/v/index.md:2 — Description reads "All Other documentation versions" — the capital "O" should be lowercase for sentence-case consistency.

  • [directory-naming] docs/v/index.md — The new docs/v/ directory uses a single-letter abbreviation, while every other docs subdirectory uses a descriptive name. If the path is not dictated by the @lando theme's conventions, docs/versions/ would be more consistent.

  • [stale-roadmap-entry] docs/roadmap.md — "Versioned docs" is listed under "Now" (in-progress) but this PR implements the feature. Move to the completed section after merge.

Previous run (8)

Review

Findings

Medium

  • [protected-path] .github/workflows/site-build.yml — Modifies a file under the .github/ protected path (adds fetch-tags, fetch-depth: 0, and VPL_MVB_BRANCH env var for multi-version builds). The linked issue Add multi-version documentation support #5717 provides context for these CI changes. Human approval is required for all protected-path changes regardless of justification.

Low

  • [acceptance-criteria-gap] — Issue Add multi-version documentation support #5717 acceptance criterion Use AI to help formalise intent after rapid local prototyping #4 states "/docs/ redirects to /docs/latest/". No redirect configuration is visible in this diff. The mvb tool likely handles this automatically, but it is not verified or documented in the PR.
    Remediation: Verify that mvb produces a /docs//docs/latest/ redirect. If it does, add a brief note in docs/doc-site.md confirming the behavior.

  • [error-handling] docs/.vitepress/config.ts — Removal of the escapeVueSyntax preprocessor removes automatic protection against bare {{ }} in markdown prose being interpreted as Vue template expressions. All current content is protected (code fences, inline backticks with v-pre, and the ADR template was updated), but future docs with bare {{ }} patterns outside code fences would fail at build time.

  • [script-consistency] package.json — The docs:preview script still uses vitepress preview docs, but docs:build now invokes mvb docs. If mvb produces output in a different directory structure than docs/.vitepress/dist/, the preview command may serve incorrect content.

  • [env-var-mismatch] docs/.vitepress/config.ts:7 — The version constant reads process.env.VPL_MVB_VERSION, and CI only sets VPL_MVB_BRANCH. The PR's own docs/doc-site.md documents that mvb sets VPL_MVB_VERSION per sub-build — verify this claim holds at build time.

  • [dependency-ordering] package.json@lando/vitepress-theme-default-plus is inserted after wrangler rather than grouped with the other @-scoped packages in the docs/site dependency group.

  • [frontmatter-capitalization] docs/v/index.md:2 — Description reads "All Other documentation versions" — the capital "O" should be lowercase for sentence-case consistency.

  • [stale-roadmap-entry] docs/roadmap.md — "Versioned docs" is listed under "Now" (in-progress) but this PR implements the feature. Move to the completed section after merge (noting that Move VitePress config from website/ to docs/ #5718 may still be outstanding).


Labels: PR modifies .github/workflows/site-build.yml (CI pipeline for doc builds)

Previous run (9)

Review

Findings

Medium

  • [acceptance-criteria-gap] — Issue Add multi-version documentation support #5717 acceptance criterion Use AI to help formalise intent after rapid local prototyping #4 states "/docs/ redirects to /docs/latest/". No redirect configuration is visible in this diff. The mvb tool may generate this automatically, but it is not verified or documented in the PR.
    Remediation: Verify that mvb produces a /docs//docs/latest/ redirect. If not, add one explicitly and document the behavior in docs/doc-site.md.

  • [protected-path] .github/workflows/site-build.yml — Modifies a file under the .github/ protected path (adds fetch-tags, fetch-depth: 0, and VPL_MVB_BRANCH env var for multi-version builds). The linked issue Add multi-version documentation support #5717 provides context for these CI changes. Human approval is required for all protected-path changes regardless of justification.

Low

  • [error-handling] docs/.vitepress/config.ts — Removal of the escapeVueSyntax preprocessor removes protection against {{ }} in markdown prose being interpreted as Vue template expressions. All current content is protected (code fences, inline backticks, and the ADR template was updated), but future docs with bare {{ }} patterns would fail at build time. Consider documenting this constraint for markdown authors.

  • [dependency-ordering] package.json@lando/vitepress-theme-default-plus is inserted after wrangler rather than grouped with the other @-scoped packages.

  • [frontmatter-capitalization] docs/v/index.md:2 — Description reads "All Other documentation versions" — the capital "O" should be lowercase for sentence-case consistency.

  • [stale-roadmap-entry] docs/roadmap.md — "Versioned docs" is listed under "Now" (in-progress) but this PR implements the feature. Move to the completed section after merge.

Previous run (10)

Review

Findings

Medium

  • [protected-path] .github/workflows/site-build.yml — This PR modifies a file under .github/, which is a protected path. The changes (adding fetch-tags: true, fetch-depth: 0, and VPL_MVB_BRANCH env var) support multi-version documentation builds (issue Add multi-version documentation support #5717). Human approval is required for protected-path changes regardless of context.

Low

  • [logic-error] docs/.vitepress/config.ts:5 — The config reads process.env.VPL_MVB_VERSION to determine the sidebar version string, but nothing in the build pipeline explicitly sets this variable. The mvb CLI likely sets VPL_MVB_* variables during sub-builds, so the fallback to "dev" is probably safe, but this should be confirmed.
    Remediation: Verify that mvb sets VPL_MVB_VERSION during sub-builds, or add a comment clarifying the intended behavior.

  • [stale-documentation] docs/doc-site.md — Multiple stale references: (1) "before the VitePress build" should reference the mvb command, (2) "markdown processing" reference is stale since escapeVueSyntax was removed, (3) missing explanation of VPL_MVB_VERSION/VPL_MVB_BRANCH env vars and mvb command.
    Remediation: Update descriptive text to reference mvb, clarify or remove stale "markdown processing" claim, add brief explanation of multi-version build mechanics.

  • [latent-regression-risk] docs/.vitepress/config.ts — The escapeVueSyntax preprocessor is removed. Currently safe since all {{ }} patterns are inside code fences or inline code (protected by the retained v-pre attribute), but future additions of Vue-incompatible syntax in prose will cause build errors without the safety net.

Previous run (11)

Review

Findings

Medium

  • [logic-error] docs/.vitepress/config.ts — The Vite alias for vue uses path.dirname(resolve("vue")). import.meta.resolve('vue') resolves to the package's ESM entry file (e.g., node_modules/vue/dist/vue.runtime.esm-bundler.js), so path.dirname() yields the dist/ subdirectory rather than the package root. The old code pointed to the package root (node_modules/vue), which contains package.json with exports/module fields that Vite uses for bare-specifier resolution. The dist/ directory lacks a package.json, so Vite may not resolve bare vue imports correctly, potentially causing build failures or runtime errors from duplicate Vue instances.
    Remediation: Use resolve('vue') directly (pointing to the exact ESM entry file) or use path.resolve(path.dirname(resolve('vue')), '..') to reach the package root, matching the previous behavior.

  • [protected-path] .github/workflows/site-build.yml — This PR modifies a file under .github/, which is a protected path. The changes (adding fetch-tags: true, fetch-depth: 0, and VPL_MVB_BRANCH env var) support multi-version documentation builds (issue Add multi-version documentation support #5717). Human approval is required for protected-path changes regardless of context.

Low

  • [decision-authority] docs/doc-site.md — The PR removes the "Documentation versioning (investigation)" section that recommended deferring versioned docs in favor of git tag snapshots. The PR implements VitePress multi-version builds instead. The removed section was an informal recommendation (not a formal ADR) that anticipated being revisited, but no ADR documents this decision change.
    Remediation: Consider filing an ADR documenting why VitePress multi-version was chosen over git tag snapshots.

  • [layout-regression] docs/.vitepress/theme/index.ts:10 — Layout changed from slot-based composition (layout-top slot) to wrapping ReadingProgress and VPLTheme.Layout in a plain div. The wrapper div may affect CSS assumptions (full-height flex layouts, sticky headers, viewport-relative sizing).
    Remediation: Consider adding style="display: contents" to the wrapper div or check if VPLTheme.Layout accepts a layout-top slot.

  • [stale-documentation] docs/doc-site.md — Multiple stale references: (1) "before the VitePress build" is inaccurate since the build now uses mvb, (2) "markdown processing" reference is stale since escapeVueSyntax was removed, (3) missing explanation of VPL_MVB_VERSION/VPL_MVB_BRANCH env vars, mvb command, and version access for users.
    Remediation: Update descriptive text to reference mvb instead of vitepress build, remove stale "markdown processing" claim, add brief section on multi-version docs mechanics.

  • [identifier-mismatch] docs/doc-site.md — The doc refers to sideBarEnder (capital B) but the actual config key is sidebarEnder (lowercase). Contributors searching for the config key would not find a match.
    Remediation: Change sideBarEnder to sidebarEnder to match the actual config key.

  • [quote-style-inconsistency] docs/v/index.md — The <script setup> block uses single quotes while the rest of the PR converts all docs/.vitepress/ files from single to double quotes to match the repo's Prettier convention.
    Remediation: Switch to double quotes to match convention.

  • [unused-imports] docs/v/index.mdVPLCollectionPage, VPLCollectionPageSection, VPLCollectionPageTitle are imported but unused in the template. aliasLinks is destructured from useTags() but unused.
    Remediation: Remove unused imports and destructured variable.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run (12)

Review

Findings

Medium

  • [logic-error] docs/.vitepress/config.ts:302 — The Vite alias for vue uses path.dirname(resolve("vue")). Since import.meta.resolve('vue') resolves to the package's ESM entry file (e.g., node_modules/vue/dist/vue.runtime.esm-bundler.js), path.dirname() yields the dist/ subdirectory rather than the package root. The old code pointed to the package root (node_modules/vue), which contains package.json with exports/module fields that Vite uses for resolution. The dist/ directory lacks a package.json, so Vite may not resolve bare vue imports identically to before. Whether this actually breaks depends on Vite's alias resolution behavior for directories without package.json.
    Remediation: Use resolve('vue') directly (pointing to the exact ESM entry file) or use path.resolve(path.dirname(resolve('vue')), '..') to reach the package root, matching the previous behavior.

  • [protected-path] .github/workflows/site-build.yml — This PR modifies a file under .github/, which is a protected path. The changes (adding fetch-tags: true, fetch-depth: 0, and VPL_MVB_BRANCH env var) support multi-version documentation builds (issue Add multi-version documentation support #5717). Human approval is required for protected-path changes regardless of context.

Low

  • [decision-authority] docs/doc-site.md — The PR removes the "Documentation versioning (investigation)" section that recommended deferring versioned docs in favor of git tag snapshots. The PR implements VitePress multi-version builds instead. While the @lando/vitepress-theme-default-plus theme provides built-in support not evaluated in the original investigation, no ADR documents this decision change.
    Remediation: Consider filing an ADR documenting why VitePress multi-version was chosen over git tag snapshots.

  • [stale-documentation] docs/doc-site.md — The updated "How it works" section mentions multiVersionBuild and sideBarEnder but does not explain the VPL_MVB_VERSION/VPL_MVB_BRANCH environment variables, the mvb build command (which replaced vitepress build), or how users access different doc versions.
    Remediation: Add a brief section explaining how multi-version documentation works, including the mvb command, environment variables, and version access.

  • [layout-regression] docs/.vitepress/theme/index.ts:9 — Layout changed from slot-based composition (layout-top slot) to wrapping ReadingProgress and VPLTheme.Layout in a plain div. The wrapper div may affect CSS assumptions (full-height flex layouts, sticky headers, viewport-relative sizing).
    Remediation: Consider using a fragment or adding style="display: contents" to the wrapper div to avoid layout interference.

  • [css-duplication] docs/.vitepress/theme/custom.css:622 — The background-clip property is declared identically twice at lines 622–623 and 629–630, a mechanical artifact of changing -webkit-background-clip to background-clip without removing the now-duplicate standard property line.
    Remediation: Remove the duplicate background-clip: text; declarations (lines 622 and 629).

Previous run (13)

Review

Findings

High

  • [logic-error] docs/.vitepress/config.ts:10 — The Vite alias for vue uses path.dirname(resolve('vue')). import.meta.resolve('vue') resolves to the main ESM entry file (e.g., node_modules/vue/dist/vue.runtime.esm-bundler.js), so path.dirname yields the dist/ subdirectory (e.g., node_modules/vue/dist/). The base branch pointed to the package root (node_modules/vue), which contains package.json with module/exports fields that Vite uses to resolve bare import 'vue' statements. The dist/ directory has no package.json or index.js, so Vite cannot resolve the vue alias, likely causing build failures for any file that imports from vue.
    Remediation: Use resolve('vue') directly as the replacement (the exact ESM entry file), or use path.resolve(path.dirname(resolve('vue')), '..') to reach the package root, matching the previous behavior.

Medium

  • [protected-path] .github/workflows/site-build.yml — This PR modifies a file under .github/, which is a protected path requiring human approval. The changes (adding fetch-tags: true, fetch-depth: 0, and VPL_MVB_BRANCH env var) are justified by issue Add multi-version documentation support #5717's acceptance criterion Add problem areas: Tekton pipeline review, migration path, multi-tenancy #2 (CI builds versions from git tags). Human approval is required regardless of context.

  • [decision-authority] docs/doc-site.md — The PR removes the "Documentation versioning (investigation)" section that recommended deferring versioned docs and suggested "git tag snapshots" as the best approach when needed. The PR implements "VitePress multi-version" instead (the option the investigation rated "Medium–high" effort). No ADR documents this architectural decision or explains why the investigation's recommendation was overridden.
    Remediation: Consider filing an ADR documenting why VitePress multi-version was chosen over git tag snapshots.

Low

  • [layout-regression] docs/.vitepress/theme/index.ts:10 — Layout changed from slot-based composition (layout-top slot) to wrapping ReadingProgress and VPLTheme.Layout in a plain div. The wrapper div may affect CSS assumptions (full-height flex layouts, sticky headers, viewport-relative sizing). Since VPL+ is a different theme from DefaultTheme, the slot API may differ and the wrapper approach may be intentional, but the CSS impact should be verified.
    Remediation: Consider returning a fragment (return [h(ReadingProgress), h(VPLTheme.Layout!)]) or adding style="display: contents" to avoid layout interference.

  • [regression] docs/.vitepress/config.ts — The escapeVueSyntax preprocessor was removed. Existing {{ }} and non-HTML <tag> patterns in the docs appear to be inside code fences or inline code (protected by VitePress defaults and the preserved code_inline v-pre rule). Residual risk is limited to future markdown content with bare Vue-incompatible syntax outside code contexts.

  • [quote-style] docs/.vitepress/theme/index.ts:1 — Import statements use single quotes, but the repo's Prettier config specifies singleQuote: false. The .prettierignore change adds !docs/.vitepress/, re-including these files for Prettier formatting — running Prettier will flag this inconsistency.

  • [scope-alignment] docs/ADRs/0000-adr-template.md:16 — The PR wraps {Accepted | Deprecated | Superseded} in backticks as a Vue escaping workaround. The template is filtered by isNonContent() and never rendered on the live site, so the inconsistency is minor.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run (14)

Review

Findings

High

  • [logic-error] docs/.vitepress/config.ts — The Vite alias for vue uses path.dirname(resolve('vue')), which resolves to the dist/ subdirectory of the vue package (e.g., node_modules/vue/dist/). The base branch pointed to the package root (node_modules/vue), which contains package.json with exports fields for Vite resolution. The dist/ directory has no package.json, so Vite cannot resolve bare import 'vue' statements against it, likely causing build failures. The vue/server-renderer and mermaid aliases are fine (they resolve to exact files).
    Remediation: Use resolve('vue') directly (the exact ESM entry file) or path.resolve(path.dirname(resolve('vue')), '..') to reach the package root.

Medium

  • [layout-regression] docs/.vitepress/theme/index.ts:10 — Layout changed from slot-based composition ('layout-top' slot) to wrapping ReadingProgress and VPLTheme.Layout in a plain div. The wrapper div may break CSS assumptions (flex layouts, :first-child selectors, viewport-relative sizing) that VitePress and the Lando theme rely on. Since ReadingProgress uses position: fixed, the visual effect works either way, but the slot-based approach is safer and semantically correct.
    Remediation: Use slot-based composition: return h(VPLTheme.Layout!, null, { 'layout-top': () => h(ReadingProgress) }).

  • [protected-path] .github/workflows/site-build.yml — This PR modifies a file under .github/, which is a protected path requiring human approval. The changes (adding fetch-tags: true, fetch-depth: 0, and VPL_MVB_BRANCH env var) are justified by issue Add multi-version documentation support #5717's acceptance criterion Add problem areas: Tekton pipeline review, migration path, multi-tenancy #2 (CI builds versions from git tags). Human approval is required regardless of context.

Low

  • [scope-alignment] docs/ADRs/0000-adr-template.md:16 — The PR wraps {Accepted | Deprecated | Superseded} in backticks as a Vue escaping workaround while claiming the theme handles escaping. The template is filtered by isNonContent() and never rendered on the live site, so the inconsistency is minor.

  • [regression] docs/.vitepress/config.ts — The escapeVueSyntax preprocessor was removed. After verification, existing {{ }} and non-HTML <tag> patterns are inside code fences or inline code (which get v-pre via VitePress defaults and the preserved code_inline rule). Residual risk is limited to future markdown content with bare Vue-incompatible syntax outside code contexts, which would now lack the safety net.

  • [quote-style] docs/.vitepress/theme/index.ts:1 — Import statements use single quotes, but the repo's Prettier config specifies singleQuote: false. Pre-existing issue preserved by the PR. The .prettierignore change now includes these files for formatting, making this a good opportunity to fix.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run (15)

Review

Findings

High

  • [logic-error] docs/.vitepress/config.ts:68 — The Vite alias for vue changed from pointing to the package root (node_modules/vue, which has package.json with proper exports/module fields for Vite resolution) to path.dirname(resolve('vue')), which resolves to the dist/ subdirectory (e.g., node_modules/vue/dist/). This directory lacks a package.json, so Vite cannot resolve bare import 'vue' statements against it, potentially breaking the build.
    Remediation: Use resolve('vue') directly (the exact ESM entry file) instead of path.dirname(resolve('vue')), or use path.resolve(path.dirname(resolve('vue')), '..')to reach the package root.

  • [scope-completeness] .github/workflows/site-build.yml — The CI workflow calls npm run docs:build, which this PR changes to invoke mvb docs. The mvb tool discovers documentation versions from git tags. If the CI checkout uses actions/checkout with the default shallow fetch (which excludes tags), mvb cannot discover versions and the multi-version build will be non-functional. Issue Add multi-version documentation support #5717 acceptance criterion Add problem areas: Tekton pipeline review, migration path, multi-tenancy #2 requires versioned builds from git tags.
    Remediation: Add fetch-depth: 0 or fetch-tags: true to the actions/checkout step in the site-build workflow so mvb can discover version tags.

  • [scope-completeness] docs/doc-site.md — Issue Add multi-version documentation support #5717 acceptance criterion docs: add agent infrastructure problem document #5 requires documenting the versioning setup in docs/doc-site.md. The current file contains: (a) a stale reference to the vitepress build docs build command (now mvb docs), (b) no documentation of the VitePress Plus theme adoption or multiVersionBuild/sidebarEnder configuration, (c) a stale description of markdown processing that references the removed preConfig hook and escapeVueSyntax function, and (d) a "Documentation versioning (investigation)" section recommending against versioning — which contradicts this implementation.
    Remediation: Update docs/doc-site.md to document the VitePress Plus theme, multi-version build setup via mvb, and replace or update the obsolete versioning investigation section.

Medium

  • [regression] docs/.vitepress/config.ts — The escapeVueSyntax preprocessor was removed, but the docs contain numerous bare angle-bracket patterns (e.g., <name>, <image>, <policy>) across markdown files that Vue will interpret as component tags. The ADR template backtick workaround in this same PR (see scope-alignment finding below) provides direct evidence that the Lando theme does not fully handle Vue syntax escaping, contradicting the PR description's claim.
    Remediation: Either retain the escapeVueSyntax preprocessor alongside the new theme, or systematically escape bare <placeholder> patterns across docs with backticks or :::v-pre containers.

  • [layout-regression] docs/.vitepress/theme/index.ts:10 — Layout changed from slot-based composition ('layout-top' slot) to wrapping ReadingProgress and VPLTheme.Layout in a plain div. The extra wrapper div may break CSS assumptions (flex layouts, full-viewport positioning) that the VitePress theme relies on for root-level layout. The Lando theme extends VitePress and likely supports the same slot API.
    Remediation: Check if VPLTheme.Layout supports the 'layout-top' slot. If so, prefer h(VPLTheme.Layout, null, { 'layout-top': () => h(ReadingProgress) }).

  • [scope-alignment] docs/ADRs/0000-adr-template.md:16 — The PR wraps {Accepted | Deprecated | Superseded} in backticks as a Vue escaping workaround, while simultaneously claiming the new theme handles Vue syntax escaping (justifying the escapeVueSyntax removal). If the theme handles escaping, this change is unnecessary; if it does not, the preprocessor removal will cause regressions across many docs. This internal inconsistency undermines the PR's core architectural claim.
    Remediation: Clarify whether the Lando theme handles Vue syntax escaping. Test the ADR template rendering with and without the backtick change.

Low

  • [inconsistency] package.json:21docs:build uses mvb docs but docs:dev and docs:preview still use standard vitepress commands. This is likely fine since mvb is a production build concern, but should be verified.
    Remediation: Confirm npm run docs:dev starts without errors with the Lando theme's defineConfig.

Labels: PR modifies VitePress documentation infrastructure and adds multi-version doc support.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review fullsend-ai-review Bot added the component/docs User-facing documentation label Aug 7, 2026
@rh-hemartin
rh-hemartin force-pushed the refactor/vitepress-plus-theme branch from 399214e to 30dffbb Compare August 17, 2026 07:27
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 17, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 7:28 AM UTC · Ended 7:33 AM UTC

Commit: 30dffbb · View workflow run →

@rh-hemartin

Copy link
Copy Markdown
Member Author

[logic-error] docs/.vitepress/config.ts:68 — The Vite alias for vue changed from pointing to the package root (node_modules/vue, which has package.json with proper exports/module fields for Vite resolution) to path.dirname(resolve('vue')), which resolves to the dist/ subdirectory (e.g., node_modules/vue/dist/). This directory lacks a package.json, so Vite cannot resolve bare import 'vue' statements against it, potentially breaking the build.
Remediation: Use resolve('vue') directly (the exact ESM entry file) instead of path.dirname(resolve('vue')), or use path.resolve(path.dirname(resolve('vue')), '..')to reach the package root.

Not true, it resolves correctly as far as I can see (console.log).

@rh-hemartin
rh-hemartin force-pushed the refactor/vitepress-plus-theme branch from 30dffbb to 0b09c0f Compare August 17, 2026 07:32
@rh-hemartin

Copy link
Copy Markdown
Member Author

[scope-completeness] .github/workflows/site-build.yml — The CI workflow calls npm run docs:build, which this PR changes to invoke mvb docs. The mvb tool discovers documentation versions from git tags. If the CI checkout uses actions/checkout with the default shallow fetch (which excludes tags), mvb cannot discover versions and the multi-version build will be non-functional. Issue Add multi-version documentation support #5717 acceptance criterion Add problem areas: Tekton pipeline review, migration path, multi-tenancy #2 requires versioned builds from git tags.
Remediation: Add fetch-depth: 0 or fetch-tags: true to the actions/checkout step in the site-build workflow so mvb can discover version tags.

Done

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 17, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 7:34 AM UTC · Ended 7:38 AM UTC

Commit: 0b09c0f · View workflow run →

@rh-hemartin

Copy link
Copy Markdown
Member Author

[scope-completeness] docs/doc-site.md — Issue Add multi-version documentation support #5717 acceptance criterion docs: add agent infrastructure problem document #5 requires documenting the versioning setup in docs/doc-site.md. The current file contains: (a) a stale reference to the vitepress build docs build command (now mvb docs), (b) no documentation of the VitePress Plus theme adoption or multiVersionBuild/sidebarEnder configuration, (c) a stale description of markdown processing that references the removed preConfig hook and escapeVueSyntax function, and (d) a "Documentation versioning (investigation)" section recommending against versioning — which contradicts this implementation.
Remediation: Update docs/doc-site.md to document the VitePress Plus theme, multi-version build setup via mvb, and replace or update the obsolete versioning investigation section.

Done

@rh-hemartin
rh-hemartin force-pushed the refactor/vitepress-plus-theme branch from 0b09c0f to 871c3a6 Compare August 17, 2026 07:37
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 17, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 7:39 AM UTC · Ended 7:53 AM UTC

Commit: 871c3a6 · View workflow run →

@rh-hemartin
rh-hemartin force-pushed the refactor/vitepress-plus-theme branch from 871c3a6 to 2bbad0d Compare August 17, 2026 07:53
@rh-hemartin

Copy link
Copy Markdown
Member Author

[layout-regression] docs/.vitepress/theme/index.ts:10 — Layout changed from slot-based composition ('layout-top' slot) to wrapping ReadingProgress and VPLTheme.Layout in a plain div. The extra wrapper div may break CSS assumptions (flex layouts, full-viewport positioning) that the VitePress theme relies on for root-level layout. The Lando theme extends VitePress and likely supports the same slot API.
Remediation: Check if VPLTheme.Layout supports the 'layout-top' slot. If so, prefer h(VPLTheme.Layout, null, { 'layout-top': () => h(ReadingProgress) }).

Everything working well, so no problem here.

@rh-hemartin

Copy link
Copy Markdown
Member Author

[scope-alignment] docs/ADRs/0000-adr-template.md:16 — The PR wraps {Accepted | Deprecated | Superseded} in backticks as a Vue escaping workaround, while simultaneously claiming the new theme handles Vue syntax escaping (justifying the escapeVueSyntax removal). If the theme handles escaping, this change is unnecessary; if it does not, the preprocessor removal will cause regressions across many docs. This internal inconsistency undermines the PR's core architectural claim.
Remediation: Clarify whether the Lando theme handles Vue syntax escaping. Test the ADR template rendering with and without the backtick change.

It does handle escaping, but not everything weird we may throw at it. We need to scape those strings and there are not even that many. Rejected.

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 17, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 7:54 AM UTC · Ended 7:58 AM UTC

Commit: 2bbad0d · View workflow run →

@rh-hemartin
rh-hemartin force-pushed the refactor/vitepress-plus-theme branch from 2bbad0d to a6f53d7 Compare August 17, 2026 07:58
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 17, 2026

Copy link
Copy Markdown

🤖 Review · ❌ Terminated · Started 7:59 AM UTC · Ended 8:19 AM UTC

Commit: a6f53d7 · View workflow run →

@github-actions

github-actions Bot commented Aug 17, 2026

Copy link
Copy Markdown

Site preview

Preview: https://cef2cd01-site.fullsend-ai.workers.dev

Commit: 5793f6e8a58b3ba828f6aa2eee46918e8a6fc063

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 7:59 AM UTC · Completed 8:19 AM UTC

Commit: a6f53d7 · View workflow run →

@rh-hemartin
rh-hemartin marked this pull request as ready for review August 17, 2026 08:45
@rh-hemartin
rh-hemartin requested a review from a team as a code owner August 17, 2026 08:45
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 17, 2026

Copy link
Copy Markdown

🤖 Review · ❌ Terminated · Started 8:46 AM UTC · Ended 9:03 AM UTC

Commit: a6f53d7 · View workflow run →

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Docs: adopt VitePress Theme+ with multi-version builds (mvb)

✨ Enhancement 📝 Documentation ⚙️ Configuration changes 🕐 40+ Minutes

Grey Divider

AI Description

• Switch docs site to @lando/vitepress-theme-default-plus with git-tag based multi-version builds.
• Remove the custom Vue-syntax escaping markdown preprocessor and rely on theme behavior.
• Add a /v/ versions landing page, sidebar version switcher, and align theme colors to brand green.
Diagram

graph TD
  A["GitHub Actions"] --> B["Checkout (tags)"] --> C["docs:build script"] --> D["mvb CLI"]
  D --> E[("Git tags")]
  D --> F["VitePress config"] --> G["Theme Default+"] --> H[("dist output")]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Keep default theme; implement versioned build in-repo
  • ➕ Avoids introducing a large third-party theme dependency surface
  • ➕ Keeps tighter control over version discovery and URL structure
  • ➖ More custom build logic to maintain (tag discovery, routing, UI switcher)
  • ➖ Harder to keep up with upstream VitePress changes
2. Git-tag snapshot builds without a live switcher
  • ➕ Simpler build pipeline; can be done as a release-time artifact
  • ➕ Lower UI/UX surface area than a dynamic version switcher
  • ➖ Worse UX (no unified switcher/search across versions)
  • ➖ Still requires hosting multiple outputs and wiring links manually
3. Branch-per-release docs deployments
  • ➕ Clear separation of historical docs and easy hotfix backports for supported versions
  • ➖ High maintenance overhead (cherry-picks, multiple active branches)
  • ➖ Scales poorly with frequent releases

Recommendation: The Theme+ + mvb approach is a good fit given the goal of first-class multi-version docs with minimal bespoke code, and it correctly updates CI to fetch tags for discovery. Reviewers should pay special attention to (1) Node/runtime compatibility of newly pulled transitive deps, and (2) whether mvb’s branch/SHA env (VPL_MVB_BRANCH) matches the desired preview behavior for PR builds.

Files changed (13) +1546 / -203

Enhancement (3) +80 / -153
config.tsMigrate VitePress config to Theme+ and enable multi-version + switcher +33/-124

Migrate VitePress config to Theme+ and enable multi-version + switcher

• Switches to Theme+ defineConfig, adds multiVersionBuild settings, and introduces a sidebarEnder version switcher menu. Removes the custom escapeVueSyntax markdown preprocessor and simplifies Vite alias resolution via import.meta.resolve.

docs/.vitepress/config.ts

custom.cssOverride Theme+ accent variables to project green palette +41/-24

Override Theme+ accent variables to project green palette

• Adds explicit overrides for the theme’s pink/indigo accent variables, mapping them to the project’s green brand colors. Also normalizes various color declarations to modern rgb()/alpha syntax and tweaks heading/nav styling.

docs/.vitepress/theme/custom.css

index.tsSwitch theme extension from VitePress default to Theme+ layout +6/-5

Switch theme extension from VitePress default to Theme+ layout

• Replaces DefaultTheme with the Theme+ entrypoint and adjusts the Layout wrapper so ReadingProgress renders alongside the Theme+ layout. Keeps Mermaid async component registration.

docs/.vitepress/theme/index.ts

Documentation (3) +37 / -38
0000-adr-template.mdFix ADR status placeholder formatting for markdown rendering +1/-1

Fix ADR status placeholder formatting for markdown rendering

• Wraps the ADR status placeholder in inline code formatting to prevent braces from being interpreted as template syntax.

docs/ADRs/0000-adr-template.md

doc-site.mdDocument Theme+ usage and multi-version build controls +2/-37

Document Theme+ usage and multi-version build controls

• Updates the docs site overview to mention Theme+ and adds a note describing how multiVersionBuild/sidebarEnder and /v/ relate to versioned docs.

docs/doc-site.md

index.mdAdd versions landing page powered by Theme+ tag discovery +34/-0

Add versions landing page powered by Theme+ tag discovery

• Creates a /v/ page that uses Theme+ composables/components to list discovered tags and provide version links, including a dev alias link.

docs/v/index.md

Other (7) +1429 / -12
site-build.ymlFetch git tags and pass mvb branch SHA during docs build +4/-0

Fetch git tags and pass mvb branch SHA during docs build

• Updates checkout to fetch full history and tags, enabling tag discovery for multi-version builds. Sets VPL_MVB_BRANCH for the docs build so mvb can associate builds with the correct PR SHA/branch context.

.github/workflows/site-build.yml

.prettierignoreStop ignoring docs/.vitepress so theme config can be formatted +1/-0

Stop ignoring docs/.vitepress so theme config can be formatted

• Adds an exception for docs/.vitepress so Prettier formats the VitePress/theme configuration files even though docs/ is ignored.

.prettierignore

lando-theme.d.tsAdd TypeScript module declarations for Theme+ config and components +23/-0

Add TypeScript module declarations for Theme+ config and components

• Introduces local .d.ts shims for @lando/vitepress-theme-default-plus modules and .vue imports to keep TypeScript happy with Theme+ specific config keys (multiVersionBuild/sidebarEnder).

docs/.vitepress/lando-theme.d.ts

search.d.tsExtend LocalSearchOptions types to support Theme+ scope metadata +1/-1

Extend LocalSearchOptions types to support Theme+ scope metadata

• Updates the search scope typing to include an optional others flag, matching the Theme+ expected structure.

docs/.vitepress/search.d.ts

eslint.config.jsRefine ESLint ignore patterns for docs/.vitepress outputs and markdown +4/-1

Refine ESLint ignore patterns for docs/.vitepress outputs and markdown

• Stops blanket-ignoring docs/ and instead ignores generated cache/dist while allowing linting of docs markdown and excluding most of .vitepress config from the ignore list.

eslint.config.js

package-lock.jsonLockfile updates for adding @lando/vitepress-theme-default-plus +1394/-9

Lockfile updates for adding @lando/vitepress-theme-default-plus

• Adds @lando/vitepress-theme-default-plus@^1.2.0 and its transitive dependencies (including mvb CLI entrypoints) to the lockfile.

package-lock.json

package.jsonUse mvb for docs builds and add Theme+ devDependency +2/-1

Use mvb for docs builds and add Theme+ devDependency

• Switches docs:build from vitepress build to mvb docs and adds @lando/vitepress-theme-default-plus as a devDependency.

package.json

@qodo-code-review

qodo-code-review Bot commented Aug 17, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Broken Vue alias path ✓ Resolved 🐞 Bug ≡ Correctness
Description
docs/.vitepress/config.ts aliases the bare specifier vue to path.dirname(resolve("vue")),
which is likely a directory (e.g. .../vue/dist) rather than the Vue package root or entry file.
This can break Vite/VitePress module resolution/SSR during mvb docs / vitepress build.
Code

docs/.vitepress/config.ts[302]

+        { find: "vue", replacement: path.dirname(resolve("vue")) },
Relevance

●● Moderate

Config history accepts concrete docs correctness fixes but rejects some speculative config concerns;
alias behavior needs build confirmation.

PR-#4020
PR-#2765
PR-#2853

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
resolve() returns a filesystem path derived from import.meta.resolve(...); applying
path.dirname only for the vue alias makes the replacement a directory instead of the resolved
module path, unlike the other aliases which use the resolved path directly.

docs/.vitepress/config.ts[6-11]
docs/.vitepress/config.ts[292-304]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`vite.resolve.alias` maps `find: "vue"` to `path.dirname(resolve("vue"))`. Since `resolve()` wraps `fileURLToPath(import.meta.resolve(pkg))`, resolving `"vue"` typically yields the *entry file*, and `path.dirname(...)` becomes the `dist/` directory. Aliasing `"vue"` to a directory can cause resolution failures.

## Issue Context
This alias exists specifically to keep VitePress SSR from pulling in incorrect module variants (see the comment about Node 22 ESM default-import failures).

## Fix Focus Areas
- docs/.vitepress/config.ts[292-304]

## Proposed fix
Change the `vue` alias to point at either:
- the resolved Vue entry file (`replacement: resolve("vue")`), OR
- the Vue package root (`replacement: path.dirname(path.dirname(resolve("vue")))`) to match the previous behavior.

After changing, run:
- `npm run docs:build`
- (optionally) `npm run docs:dev`

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Prettier ignore override incomplete ✓ Resolved 🐞 Bug ⚙ Maintainability
Description
.prettierignore ignores docs/ and then only negates !docs/.vitepress/, which may still leave
docs/.vitepress/** ignored. This can silently prevent npm run format / format:check from
formatting the VitePress config/theme files you explicitly target.
Code

.prettierignore[12]

+!docs/.vitepress/
Relevance

●●● Strong

Specific ignore-pattern correctness issue with an explicit formatting intent; trivial deterministic
maintenance fix.

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The ignore file currently ignores all of docs/ and only unignores the .vitepress/ directory
entry; meanwhile the repo’s format scripts explicitly include docs/.vitepress/**, implying the
intent is to format those files.

.prettierignore[1-13]
package.json[19-25]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`.prettierignore` ignores `docs/` but only unignores the directory entry `docs/.vitepress/`. With gitignore-style semantics, that often does not re-include files under that directory.

## Issue Context
`package.json` scripts explicitly format/check `docs/.vitepress/**/*.{vue,ts,js,css}`; if Prettier still treats those files as ignored, these scripts won’t apply formatting as intended.

## Fix Focus Areas
- .prettierignore[1-13]
- package.json[19-25]

## Proposed fix
Update `.prettierignore` to explicitly unignore the directory *and* its contents, while keeping generated output ignored, e.g.:

```gitignore
# ignore docs content by default
docs/

# but format VitePress config/theme
!docs/.vitepress/
!docs/.vitepress/**

# still ignore generated dirs
docs/.vitepress/dist/
docs/.vitepress/cache/
```

Then verify with:
- `npm run format:check`

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 54 rules

Grey Divider

Tip of the day
💡 Did you know, you can describe a rule in plain language on the Rules page and Qodo drafts it for you

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread docs/.vitepress/config.ts Outdated
Comment thread .prettierignore
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 26, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 2:52 PM UTC · Completed 3:13 PM UTC

Commit: bc63d66 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $7.67

fullsend-ai-review[bot]

This comment was marked as outdated.

fullsend-ai-review[bot]

This comment was marked as outdated.

waynesun09
waynesun09 previously approved these changes Aug 26, 2026

@waynesun09 waynesun09 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Local npx mvb docs at bc63d66 succeeded (2 builds: primary dev at /docs/ plus /docs/v/dev/). CI Build Site is green.

Remaining review-bot items are not blocking:

  • env-var: mvb sets VPL_MVB_BRANCH per sub-build (see theme bin/mvb.js); config.ts reading that is correct. docs/doc-site.md is the stale side.
  • satisfies: ">=0.38.0" intentionally skips every current tag (newest is v0.37.0), so only dev is built until 0.38 ships. Matches the earlier "don't rebuild historical tags under this theme" fix.
  • /docs//docs/latest/ is not in this tree; theme does not emit that redirect here. Fine until a stable alias exists.

Assisted-by: Claude

@waynesun09

Copy link
Copy Markdown
Member

Follow-up on my approval: I verified the built site with playwright-cli against the preview at bc63d66 (https://aa79dc44-site.fullsend-ai.workers.dev/docs/) and the version label renders wrong. Correcting myself — I said "config.ts reading VPL_MVB_BRANCH is correct"; the mechanism is right, the rendered result is not.

The sidebar version ender shows the raw 40-char head SHA instead of dev:

bc63d66f008c164b76c8bceb8e0c6ec69f95da19

It is also clipped: the label measures 349px inside a 340px sidebar, so it cuts off mid-SHA. Same on the versioned sub-build /docs/v/dev/.

This is not preview-only. .github/workflows/site-build.yml sets:

env:
  VPL_MVB_BRANCH: ${{ github.event.pull_request.head.sha || github.sha }}

On push to main that is still a bare SHA. And the theme's own utils/get-branch.js returns process.env.GITHUB_SHA whenever GITHUB_ACTIONS === 'true' — checked before GITHUB_HEAD_REF — so the SHA is baked in on CI even if the workflow env var is removed. Local npx mvb docs shows dev precisely because neither path applies, which is why this did not show up in my local build check.

Chain: workflow env → docs/.vitepress/config.ts:6 (const version = process.env.VPL_MVB_BRANCH ?? "dev") → config.ts:339 (sidebarEnder: { text: version }). VPL_MVB_BRANCH is mvb's ref identifier, not a display label. mvb can derive a good one — the /docs/v/ page correctly lists v0.37.0-24-gbc63d DEV.

Suggested fixes:

  1. In config.ts, map a 40-hex value to the dev label, or read VPL_MVB_DEV_VERSION (mvb sets it per sub-build; defaults to "dev").
  2. Dropping the workflow VPL_MVB_BRANCH override alone will not fix it, given the GITHUB_SHA branch in get-branch.js.

Secondary, non-blocking: mvb rewrites the rel: "mvb" switcher links to /docs/v/{stable,edge,dev}/. Only dev exists (expected from satisfies: ">=0.38.0" vs newest tag v0.37.0), but stable and edge return 200 with the marketing landing page, not a 404 — the worker falls through, so a reader clicking "stable" silently leaves the docs.

Path Result
/docs/v/dev/ 200 — Fullsend Docs, 142 KB (real)
/docs/v/stable/ 200 — marketing landing page, 37 KB
/docs/v/edge/ 200 — marketing landing page, 37 KB

Everything else on the built site checks out: /docs//docs/guides/getting-started/, green branding, nav/sidebar/search/edit-link all render, 0 console errors, /docs/v/ renders.

Assisted-by: Claude

@waynesun09
waynesun09 dismissed their stale review August 26, 2026 17:03

Rescinding: verified the built preview with playwright-cli and the sidebar version label renders the raw 40-char head SHA instead of a version, and it is not preview-only — it will follow to production after merge. Details: #6010 (comment)

@rh-hemartin
rh-hemartin force-pushed the refactor/vitepress-plus-theme branch from bc63d66 to 512d332 Compare August 27, 2026 07:21
@rh-hemartin

Copy link
Copy Markdown
Member Author

@waynesun09 inspecting the code looks like the theme rewrites package.json on the temporal folder with a correct version, so the right move is to retrieve the version from package.json, even if we don't set it. I also added cache stuff.

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 27, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 7:23 AM UTC · Ended 7:28 AM UTC

Commit: 512d332 · View workflow run →

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 27, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 7:30 AM UTC · Ended 7:31 AM UTC

Commit: 98ad03d · View workflow run →

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 27, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 7:33 AM UTC · Completed 7:51 AM UTC

Commit: 809fdb5 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $7.36

fullsend-ai-review[bot]

This comment was marked as outdated.

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 27, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 2:44 PM UTC · Completed 3:03 PM UTC

Commit: 6578561 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $6.02

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 28, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 7:13 AM UTC · Completed 7:54 AM UTC

Commit: cddea76 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $7.97

fullsend-ai-review[bot]

This comment was marked as outdated.

fullsend-ai-review[bot]

This comment was marked as outdated.

Replace the default VitePress theme with @lando/vitepress-theme-default-plus
and enable multi-version documentation builds via mvb. Adopt the Lando
defineConfig wrapper, add multiVersionBuild/sidebarEnder configuration,
derive the sidebar version label from VPL_MVB_VERSION, simplify Vite
resolve aliases with import.meta.resolve, and update CI to fetch tags for
version discovery. Rework custom CSS for the new theme and preserve
-webkit- vendor prefixes for Safari compatibility.

Signed-off-by: Hector Martinez <hemartin@redhat.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Hector Martinez <hemartin@redhat.com>
@fullsend-ai-review

fullsend-ai-review Bot commented Sep 1, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 8:31 AM UTC · Completed 9:11 AM UTC

Commit: 5793f6e · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $7.29

@fullsend-ai-review fullsend-ai-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: The following review comments could not be posted on the diff (GitHub returned 422) and are included here instead:

  • .github/workflows/site-build.yml (file-level): Line 1 · [medium] scope-vs-authorization

The workflow uses path filters (on.push.paths and on.pull_request.paths) but does not include merge_group: as a trigger. Per docs/contributing/ci-workflows.md, path-filtered workflows must include merge_group: with a path-relevance guard step. This is a pre-existing gap not introduced by this PR, but surfaced because the PR modifies the workflow.

Suggested fix: Add merge_group: to the on: triggers and add a path-relevance guard step.

  • docs/.vitepress/theme/components/Mermaid.vue (file-level): Line 58 · [low] incomplete-formatting-within-file

Most of Mermaid.vue reformatted to double-quote + semicolon style, but the openLightbox and onFigureClick functions still use single quotes and omit semicolons.

Suggested fix: Run prettier on the whole file.

@fullsend-ai-review fullsend-ai-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See the review comment for full details.

Comment thread docs/.vitepress/config.ts
@@ -15,6 +15,10 @@ import {
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const docsDir = path.resolve(__dirname, "..");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] runtime-mechanism

The version variable reads .version from package.json, which has no version field in the repo. The ?? "dev" fallback always triggers for local and PR CI builds. The mechanism is intentional: mvb injects the version into package.json during tagged-release sub-builds in a temp checkout, and doc-site.md documents this behavior.

Comment thread package.json
"docs:dev": "git submodule update --init && vitepress dev docs",
"docs:build": "git submodule update --init && vitepress build docs",
"docs:build": "git submodule update --init && mvb docs",
"docs:preview": "vitepress preview docs"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] edge-case

The docs:preview script (vitepress preview docs) serves a single VitePress build. After an mvb multi-version build, the output structure includes versioned subdirectories that vitepress preview may not correctly route, causing 404s for versioned paths.

import type { UserConfig } from "vitepress";

interface VPLThemeConfig {
sidebarEnder?: unknown;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] weak-type-declarations

sidebarEnder and multiVersionBuild are typed as unknown in the declaration file, plus a catch-all [key: string]: unknown index signature. This provides minimal type safety for the VPL theme config extensions.

Suggested fix: Define the shapes of sidebarEnder and multiVersionBuild to match their usage in config.ts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

component/ci CI pipelines and checks component/docs User-facing documentation risk/elevated PR risk: elevated

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add multi-version documentation support

2 participants