Skip to content

[WIP] docs: migrate documentation to Docusaurus#5382

Closed
Jont828 wants to merge 1 commit intoai-dynamo:mainfrom
Jont828:docusaurus-migration
Closed

[WIP] docs: migrate documentation to Docusaurus#5382
Jont828 wants to merge 1 commit intoai-dynamo:mainfrom
Jont828:docusaurus-migration

Conversation

@Jont828
Copy link
Contributor

@Jont828 Jont828 commented Jan 13, 2026

Overview:

I'd like to migrate the docs to Docusaurus as it can easily generate docs, provide versioned docs (which currently does not work on the site), and fixes the issues with relative/absolute link paths. This allows us to easily translate the MD docs into a website and removes the need for maintaining dedicated doc generation script with regex for replacing links and a complicated CI flow for deploying the docs as well.

This is an example of the resulting docs page.

image

Details:

Where should the reviewer start?

Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)

  • closes GitHub issue: #xxx

Summary by CodeRabbit

  • Documentation
    • Migrated documentation to Docusaurus with improved navigation, search functionality, and mobile-friendly interface.
    • Added comprehensive deployment guides, installation instructions, and benchmarking documentation.
    • Introduced new profiling, KVBM, and observability guides for better understanding system setup and monitoring.
    • Restructured documentation for clearer organization across backends, Kubernetes deployment, and performance tuning resources.

✏️ Tip: You can customize this high-level summary in your review settings.

@Jont828 Jont828 requested review from a team as code owners January 13, 2026 01:34
@copy-pr-bot
Copy link

copy-pr-bot bot commented Jan 13, 2026

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@github-actions
Copy link
Contributor

👋 Hi Jont828! Thank you for contributing to ai-dynamo/dynamo.

Just a reminder: The NVIDIA Test Github Validation CI runs an essential subset of the testing framework to quickly catch errors.Your PR reviewers may elect to test the changes comprehensively before approving your changes.

🚀

@github-actions github-actions bot added the external-contribution Pull request is from an external contributor label Jan 13, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 13, 2026

Walkthrough

This pull request migrates the NVIDIA Dynamo documentation from Sphinx to Docusaurus 3.9.2, replacing RST-based configurations with Markdown and modern tooling. The migration includes updating navigation structure, adding YAML front matter to documentation files, converting asset paths, and updating hyperlinks throughout the documentation.

Changes

Cohort / File(s) Summary
Docusaurus Configuration
docs/docusaurus.config.ts, docs/sidebars.ts, docs/package.json, docs/tsconfig.json, docs/versions.json
Added complete Docusaurus v3 configuration with metadata, internationalization, plugins (client-redirects, local search), navbar/footer setup, redirect mappings, and strongly-typed sidebar structure for documentation navigation.
Sphinx Removal
docs/conf.py, docs/Makefile, docs/index.rst, docs/hidden_toctree.rst, docs/generate_docs.py
Deleted all Sphinx-specific configuration, build automation, and documentation generation scripts. Removed Python-based doc processing and RST-based index structures.
Migration Documentation
docs/DOCUSAURUS_MIGRATION_PLAN.md, docs/MIGRATION_COMPLETE.md
Added comprehensive migration plan detailing strategy, phases, versioning, and completion status with rollback instructions and implementation checklist.
Documentation Build Updates
.github/workflows/lint-docs.yaml, .gitignore
Added GitHub Actions workflow for markdown linting with link checking. Extended .gitignore to exclude Docusaurus build artifacts (build/, .docusaurus/, .cache-loader/).
Core Documentation Restructuring
docs/README.md, docs/docs/intro.md, docs/docs/installation.md, docs/docs/examples.md
Replaced Sphinx-focused build instructions with Docusaurus npm-based workflow. Added new landing pages for intro, installation, and examples with quick-start guides and structured navigation.
Frontend & React Components
docs/src/components/HomepageFeatures/index.tsx, docs/src/components/HomepageFeatures/styles.module.css, docs/src/css/custom.css
Added React-based homepage feature components and comprehensive NVIDIA-branded styling with CSS variables for colors, dark mode support, and component-specific theming across navbar, footer, code blocks, and admonitions.
Removed RST Sections & Includes
docs/_sections/*, docs/_includes/*, docs/_extensions/*, docs/_static/*
Deleted all Sphinx extension modules, include templates, section fragments (backends, examples, frontends, installation, k8s, observability), and static assets (RunLLM widget script, switcher config).
Benchmark & Profiler Documentation
benchmarks/incluster/README.md, benchmarks/profiler/README.md, deploy/README.md
Added comprehensive new documentation for in-cluster benchmarking, SLA-driven profiling with DynamoGraphDeploymentRequests, and Kubernetes deployment guides with extensive configuration examples.
YAML Front Matter & Link Migrations
~120 documentation files in docs/docs/, docs/kvbm/, docs/planner/
Added YAML front matter (title metadata) to all markdown files; updated relative links to absolute GitHub URLs; migrated image paths from ../images/ to /img/; escaped angle-bracket placeholders in code blocks.
Runtime & Root-Level Documentation
lib/runtime/README.md
Added new README documenting Rust-based runtime with prerequisites, build instructions, and deployment guidance.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

🐰 From Sphinx we hop to Docusaurus green,
A migration most thorough we've seen!
Front matter and links realigned with care,
React components styled beyond compare,
Benchmarks documented, profilers refined,
A documentation site redesigned!

🚥 Pre-merge checks | ✅ 1 | ❌ 2
❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ⚠️ Warning The PR description is a template with placeholder sections (Overview, Details, Where should the reviewer start?, Related Issues) but contains no actual content, changes summary, or issue reference. Fill in the Overview section with a clear description of the Docusaurus migration work. Complete the Details section with specific changes made. Update the Related Issues section with the actual GitHub issue number instead of the placeholder #xxx.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title '[WIP] docs: migrate documentation to Docusaurus' clearly identifies the main change: migrating documentation to Docusaurus. It is concise, specific, and directly related to the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 16

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (11)
docs/docs/multimodal/index.md (1)

32-35: Empty section: Add content or remove the heading.

The "Backend Documentation" heading has no content beneath it. Since the toctree navigation was moved to the Docusaurus sidebar, this section should either:

  1. Include introductory text about the backend-specific pages
  2. List the backends with links (vLLM, TRT-LLM, SGLang)
  3. Be removed if it serves no purpose

Empty sections reduce documentation quality and can confuse readers.

docs/docs/agents/tool-calling.md (1)

21-21: Fix mismatched quote in bash command.

The command has a closing quote without an opening quote.

✏️ Proposed fix
-python -m dynamo.<backend> --help"
+python -m dynamo.<backend> --help
docs/docs/backends/trtllm/llama4_plus_eagle.md (2)

35-35: Fix extra parenthesis in configuration note.

The note has an extra opening parenthesis that makes the formatting unclear.

✏️ Proposed fix
-* Make sure the (`eagle3_one_model: true`) is set in the LLM API config inside the `examples/backends/trtllm/engine_configs/llama4/eagle` folder.
+* Make sure `eagle3_one_model: true` is set in the LLM API config inside the `examples/backends/trtllm/engine_configs/llama4/eagle` folder.

41-41: Complete the incomplete sentence.

The comment text appears incomplete.

✏️ Proposed fix
-following environment variables based:
+following environment variables:

Or if there was meant to be additional context:

-following environment variables based:
+following environment variables based on your setup:
docs/docs/backends/trtllm/gpt-oss.md (1)

217-219: Typo: "ususally" should be "usually".

📝 Suggested fix
-is that the application has a set of tools to aid the assistant provide accurate answer, and it is ususally
+is that the application has a set of tools to aid the assistant provide accurate answer, and it is usually
docs/docs/backends/sglang/gpt-oss.md (1)

13-13: Fix typo in documentation text.

Line 13 contains "ues" which should be "use".

📝 Proposed fix
-please ues the vLLM guide as a reference with the different deployment steps as highlighted below:
+please use the vLLM guide as a reference with the different deployment steps as highlighted below:
docs/docs/backends/vllm/prompt-embeddings.md (1)

257-258: Use consistent README.md link format with other vLLM backend files.

Lines 257–258 use bare relative paths (README.md), but other files in the same directory use more explicit formats: ./README.md (lines 31, 124 in speculative_decoding.md) or absolute paths like /docs/backends/vllm/README.md (gpt-oss.md line 23). Update these links to use ./README.md or the absolute path format for consistency.

docs/docs/backends/vllm/multi-node.md (2)

86-90: Fix missing line continuation backslash.

Line 87 is missing the backslash (\) at the end, which will cause the multi-line command to fail when executed. The command will terminate after the --model argument, and subsequent lines will be treated as separate commands.

🐛 Proposed fix
 # Start prefill worker
 python -m dynamo.vllm \
-  --model meta-llama/Llama-3.3-70B-Instruct
+  --model meta-llama/Llama-3.3-70B-Instruct \
   --tensor-parallel-size 8 \
   --enforce-eager

94-100: Fix missing line continuation backslash.

Line 96 is missing the backslash (\) at the end, causing the same issue as the previous command block.

🐛 Proposed fix
 # Start decode worker
 python -m dynamo.vllm \
-  --model meta-llama/Llama-3.3-70B-Instruct
+  --model meta-llama/Llama-3.3-70B-Instruct \
   --tensor-parallel-size 8 \
   --enforce-eager \
   --is-prefill-worker
docs/README.md (1)

164-199: Remove Sphinx-specific troubleshooting content.

This section still contains Sphinx-specific troubleshooting guidance that's no longer relevant after migrating to Docusaurus:

  • Lines 164-171: References dependency-groups and Sphinx packages
  • Lines 173-182: Mentions Sphinx-specific build warnings (toctree entries, headers)
  • Lines 185-189: References uv and .venv-docs (Sphinx tooling)
  • Lines 192-199: Uses old Sphinx build output paths (docs/build/html)
🧹 Recommended replacement

Replace with Docusaurus-specific troubleshooting:

## Troubleshooting

### Build Errors

Common issues when building the documentation:

- **Broken links**: Run `npm run build` to check for broken internal links
- **Missing dependencies**: Run `npm install` to ensure all packages are installed
- **Cache issues**: Run `npm run clear` to clear the Docusaurus cache

### Port Already in Use

If `npm run start` fails because port 3000 is in use:

```bash
# Kill the process using port 3000
lsof -ti:3000 | xargs kill -9

# Or use a different port
npm run start -- --port 3001

Viewing Built Documentation

After building with npm run build, serve the production build:

npm run serve
# Opens http://localhost:3000
</details>

</blockquote></details>
<details>
<summary>docs/docs/kvbm/kvbm_integrations.md (1)</summary><blockquote>

`32-47`: **Fix trailing space in alt text on line 32.**

The image files are correctly placed at `docs/static/img/` and the absolute paths (`/img/`) are properly configured for Docusaurus.

However, line 32 has a trailing space in the alt text: `![vLLM KVBM Integration ](/img/kvbm-integrations.png)` should be `![vLLM KVBM Integration](/img/kvbm-integrations.png)`.

<details>
<summary>Fix trailing space</summary>

```diff
-![vLLM KVBM Integration ](/img/kvbm-integrations.png)
+![vLLM KVBM Integration](/img/kvbm-integrations.png)
🤖 Fix all issues with AI agents
In @.github/workflows/lint-docs.yaml:
- Line 27: The workflow references a missing config filename (config-file:
.markdownlinkcheck.json); either add a .markdownlinkcheck.json file at the
repository root with the markdown-link-check configuration expected by the
lint-docs workflow, or update the workflow step that uses config-file to point
to an existing config or remove the config-file key; ensure you update the
workflow entry that contains "config-file: .markdownlinkcheck.json" so the
action can find valid settings at runtime.

In @docs/docs/benchmarks/benchmarking.md:
- Around line 1-3: The frontmatter 'title' field is incorrect (it currently
contains the license identifier); update the YAML frontmatter by replacing the
title value with the actual document title (e.g., "Benchmarking") or remove the
erroneous title line so the page uses the correct heading, keeping the SPDX
license only in the existing HTML comment block; ensure the 'title' key is no
longer set to "SPDX-License-Identifier: Apache-2.0".
- Line 112: Replace HTML-escaped angle brackets in the markdown code blocks with
literal angle brackets so copy-paste works: find occurrences of "&lt;" and
"&gt;" in the command strings (e.g., the kubectl command shown as "kubectl
port-forward -n &lt;namespace&gt; svc/&lt;frontend-service-name&gt; 8000:8000 >
/dev/null 2>&1 &") and change them to "<namespace>" and
"<frontend-service-name>" (and do the same for the other occurrences noted)
ensuring the content remains inside triple-backtick code blocks.
- Line 104: In docs/docs/benchmarks/benchmarking.md replace the absolute GitHub
URL that points to the installation guide with a relative Docusaurus link so
versioned and local builds resolve correctly; specifically, change the current
absolute link for the installation guide back to [installation
guide](/docs/kubernetes/installation_guide.md) (keep the existing external
GitHub URL for deploy/utils/README as that file is outside the docs and should
remain an absolute link).

In @docs/docs/benchmarks/kv-router-ab-testing.md:
- Line 353: Replace HTML entities `&lt;` and `&gt;` inside inline code and code
blocks with literal angle brackets so placeholders are copy-pastable; e.g.,
change occurrences like `&lt;namespace&gt;` and `&lt;pod-name&gt;` to
`<namespace>` and `<pod-name>` (and any other `&lt;...&gt;` placeholders)
throughout the document (including the other reported occurrences), ensuring
Markdown/Docusaurus rendering uses the literal `<` and `>` in code contexts.

In @docs/docs/design_docs/distributed_runtime.md:
- Around line 48-50: The admonition uses Docusaurus syntax but closes with
Sphinx-style backticks; change the closing delimiter from ``` to ::: so the
block opens with :::caution and closes with ::: to restore correct Docusaurus
admonition rendering.
- Line 69: Replace the hardcoded GitHub URL to push_router.rs in
docs/docs/design_docs/distributed_runtime.md with a relative repository link
(e.g., ../../../../lib/runtime/src/pipeline/network/egress/push_router.rs) or
configure/use Docusaurus link resolution (e.g., @site alias or repo resolver in
docusaurus.config.js) and update the link target text "push_router.rs"
accordingly so the documentation uses a relative/path-resolved reference instead
of the absolute GitHub main-branch URL.

In @docs/docs/kubernetes/webhooks.md:
- Line 239: The file contains HTML-escaped angle-bracket placeholders (e.g.,
"&lt;release&gt;", "&lt;namespace&gt;") that break copy/paste; find and replace
all occurrences of "&lt;" and "&gt;" in docs/kubernetes/webhooks.md with literal
"<" and ">" so placeholders render as "<release>", "<namespace>", etc.; apply
this change to every instance (including the many occurrences listed in the
review such as the lines around 239, 242, 333, 336, 354, 361, 426, 465, 474,
479, 498, 504, 513, 518, 535, 541, 546, 549, 554, 569, 575, 578, 584, 594-595,
598, 613, 635, 642, 645, 652, 657, 700) and ensure all code blocks and inline
code use literal angle brackets so MDX renders correctly.

In @docs/docs/kvbm/kvbm_intro.md:
- Around line 40-48: Remove the RST toctree HTML block (the <div class="toctree"
hidden=""> ... </div> section) from docs/docs/kvbm/kvbm_intro.md because
Docusaurus does not process reStructuredText directives and the site navigation
is already managed by sidebars.ts; simply delete that entire block so the page
content renders correctly and avoids hidden/raw RST text.

In @docs/docs/observability/README.md:
- Line 58: The Markdown link text "do../kubernetes/observability/metrics.md" is
malformed; update that link in the README to
"../kubernetes/observability/metrics.md" so the path points correctly to the
Kubernetes observability metrics doc, ensuring the link uses the correct
relative path string "../kubernetes/observability/metrics.md".

In @docs/docs/planner/planner_intro.md:
- Around line 24-25: Remove the unnecessary backslashes escaping the square
brackets in the markdown link so the link renders correctly: change the text
containing "\[SLA Planner Quick Start
Guide\](/docs/planner/sla_planner_quickstart.md)" to use regular brackets " [SLA
Planner Quick Start Guide](/docs/planner/sla_planner_quickstart.md)" (i.e.,
remove the backslashes around "SLA Planner Quick Start Guide").
- Around line 34-46: The file contains 13 leftover conversion artifact lines
that consist solely of "||" markers; remove those lines from planner_intro.md
and ensure no stray empty lines remain or broken markdown/table placeholders;
after deletion, preview the rendered doc to confirm spacing and any intended
table or content around the former artifact is intact and adjust adjacent
markdown (headers, lists, or tables) if necessary.
- Around line 20-32: Replace the raw HTML Sphinx-style block (<div
class="admonition seealso"> ... </div>) with a Docusaurus native admonition
block using the triple-colon syntax (e.g., :::note or :::info) and include the
“Quick Start” title and the same inner content; locate the HTML div with
class="admonition seealso" in planner_intro.md and convert it to an appropriate
Docusaurus admonition (choose :::tip/:::info/:::note as fits the semantics)
ensuring the inner markdown (links and bold text) remains unchanged and close
the block with the matching triple-colon.

In @docs/DOCUSAURUS_MIGRATION_PLAN.md:
- Around line 421-438: The REPLACEMENTS entry that uses the generic pattern
r'```' will replace every triple-backtick (breaking normal code blocks); update
the REPLACEMENTS logic so only MyST admonition markers are targeted (e.g.,
convert the specific patterns like r'```{note}', r'```{warning}', r'```{tip}',
r'```{caution}', r'```{danger}' while removing or escaping the generic r'```'
rule), and implement handling for admonition closers either by (A) matching
entire admonition blocks at once (a single regex that captures ```{type} ... ```
and replaces with the corresponding :::type ... :::) or (B) adding a simple
stateful parser around REPLACEMENTS that tracks when you're inside an admonition
and only converts the closing triple-backticks for those blocks; ensure changes
are made where REPLACEMENTS is defined and referenced so regular code fences
remain untouched.

In @docs/MIGRATION_COMPLETE.md:
- Around line 48-62: Update the incorrect directory path in the Docusaurus
commands: replace the "cd docs/docusaurus" invocation with "cd docs" in the code
block (the shell commands for starting, building, serving, and clearing the
site) so the development commands point to the relocated Docusaurus project
referenced in Phase 4.
🟡 Minor comments (14)
docs/docs/guides/request_plane.md-189-189 (1)

189-189: Use relative paths instead of hardcoded GitHub URLs.

The absolute GitHub URL has several issues:

  1. Branch mismatch: Points to main branch, but this PR is on docusaurus-migration — the link won't resolve correctly until merged.
  2. Portability: Hardcoded GitHub URLs break in local development, alternative hosting, or if the repository is forked.
  3. Inconsistency: Line 196 references the same file using a relative path, while line 189 uses an absolute URL.

Docusaurus supports relative links that work across different deployment scenarios.

📝 Suggested fix using relative path
-See [`examples/backends/vllm/launch/agg_request_planes.sh`](https://github.com/ai-dynamo/dynamo/tree/main/examples/backends/vllm/launch/agg_request_planes.sh) for a complete working example that demonstrates launching Dynamo with TCP, HTTP, or NATS request planes.
+See [`examples/backends/vllm/launch/agg_request_planes.sh`](../../../examples/backends/vllm/launch/agg_request_planes.sh) for a complete working example that demonstrates launching Dynamo with TCP, HTTP, or NATS request planes.

Alternatively, if the examples are outside the docs directory and won't be published with the docs, you could link to the repository root or use a Docusaurus config-based URL prefix.

docs/docs/backends/vllm/speculative_decoding.md-1-3 (1)

1-3: Remove Markdown formatting from the front matter title.

In Docusaurus 3.9.2, the front-matter title field is treated as plain text and does not process Markdown syntax. The **Meta-Llama-3.1-8B-Instruct** will appear as literal asterisks in sidebar navigation, browser tabs, and metadata.

📝 Suggested fix
 ---
-title: "Running **Meta-Llama-3.1-8B-Instruct** with Speculative Decoding (Eagle3)"
+title: "Running Meta-Llama-3.1-8B-Instruct with Speculative Decoding (Eagle3)"
 ---
docs/docs/frontends/kserve.md-94-95 (1)

94-95: Fix hyphenation: "client side" should be "client-side".

When used as an adjective before a noun, compound modifiers should be hyphenated for clarity.

📝 Proposed fix
-* [triton_model_config](https://github.com/ai-dynamo/dynamo/tree/main/lib/llm/src/protocols/tensor.rs): For users that already have Triton model config and require the full config to be returned for client side logic, they can set the config in `TensorModelConfig::triton_model_config` which will supersedes other fields in `TensorModelConfig` and be used for endpoint responses. `triton_model_config` is expected to be the serialized string of the `ModelConfig` protobuf message, see [echo_tensor_worker.py](https://github.com/ai-dynamo/dynamo/tree/main/tests/frontend/grpc/echo_tensor_worker.py) for example.
+* [triton_model_config](https://github.com/ai-dynamo/dynamo/tree/main/lib/llm/src/protocols/tensor.rs): For users that already have Triton model config and require the full config to be returned for client-side logic, they can set the config in `TensorModelConfig::triton_model_config` which will supersedes other fields in `TensorModelConfig` and be used for endpoint responses. `triton_model_config` is expected to be the serialized string of the `ModelConfig` protobuf message, see [echo_tensor_worker.py](https://github.com/ai-dynamo/dynamo/tree/main/tests/frontend/grpc/echo_tensor_worker.py) for example.
lib/runtime/README.md-40-42 (1)

40-42: Add language specification to the code block.

The fenced code block should specify a language identifier for proper syntax highlighting.

📝 Proposed fix
-```
+```bash
 cargo build
 cargo test
</details>

</blockquote></details>
<details>
<summary>docs/MIGRATION_COMPLETE.md-16-40 (1)</summary><blockquote>

`16-40`: **Add language specification to the directory structure code block.**

The fenced code block should specify a language identifier (e.g., "plaintext") for consistency.


<details>
<summary>📝 Proposed fix</summary>

```diff
-```
+```plaintext
 docs/
 ├── docusaurus.config.ts         # Main Docusaurus configuration
 ...
lib/runtime/README.md-86-96 (1)

86-96: Add language specification to code blocks.

Both code blocks should specify a language identifier for proper syntax highlighting.

📝 Proposed fix
-```
+```bash
 cd examples/hello_world
 cargo run --bin server

In the second terminal, execute:

- +bash
cd examples/hello_world
cargo run --bin client

lib/runtime/README.md-51-56 (1)

51-56: Add language specification to code block.

The code block is missing a language identifier for proper syntax highlighting.

📝 Proposed fix
-```
+```bash
 # At the root of the repository:
 docker compose -f deploy/docker-compose.yml up -d
</details>

</blockquote></details>
<details>
<summary>docs/docs/backends/trtllm/README.md-218-227 (1)</summary><blockquote>

`218-227`: **Duplicate content: Client and Benchmarking sections repeated.**

Lines 218-227 duplicate the content from lines 175-184. The "Client" and "Benchmarking" sections appear twice in the document.



<details>
<summary>🧹 Proposed fix to remove duplicate sections</summary>

```diff
-## Client
-
-See [client](../../backends/sglang/README.md#testing-the-deployment) section to learn how to send request to the deployment.
-
-NOTE: To send a request to a multi-node deployment, target the node which is running `python3 -m dynamo.frontend <args>`.
-
-## Benchmarking
-
-To benchmark your deployment with AIPerf, see this utility script, configuring the
-`model` name and `host` based on your deployment: [perf.sh](https://github.com/ai-dynamo/dynamo/tree/main/benchmarks/llm/perf.sh)
-
 ## Multimodal support
benchmarks/profiler/README.md-154-161 (1)

154-161: Update TensorRT-LLM version list to match official AIConfigurator support.

The version 1.0.0rc6 is listed but not documented in the official AIConfigurator support list, which only confirms 0.20.0 and 1.0.0rc3. Consider verifying the supported versions with the AI Configurator documentation to ensure accuracy, as the listed versions may not reflect the current officially supported backend versions.

docs/docs/api/nixl_connect/README.md-185-185 (1)

185-185: Fix list indentation.

The list item has incorrect indentation according to Markdown linting rules (expected 0 spaces, actual 2 spaces).

Based on coding guidelines, markdownlint rule MD007 should be addressed.

📝 Proposed fix
-  - [Dynamo Multimodal Example](https://github.com/ai-dynamo/dynamo/tree/main/examples/multimodal)
+- [Dynamo Multimodal Example](https://github.com/ai-dynamo/dynamo/tree/main/examples/multimodal)
docs/docs/kvbm/kvbm_design_deepdive.md-1-3 (1)

1-3: Change title to match filename and content.

The file kvbm_design_deepdive.md has front matter title "KVBM components", which conflicts with the existing kvbm_components.md (titled "Understanding KVBM components") and misaligns with the filename. The actual content discusses KvBlockManager architecture and memory mapping—a design deep dive, not a components overview. Update the title to "KVBM Design Deep Dive" or another title that accurately reflects the filename and content focus.

docs/docs/kvbm/kvbm_intro.md-30-38 (1)

30-38: Remove empty table row artifacts.

These lines appear to be conversion artifacts or placeholders that render as broken/empty table cells. They should be removed as they have no semantic meaning.

🧹 Proposed fix
-||
-||
-||
-||
-||
-||
-||
-||
-||
docs/docusaurus.config.ts-29-36 (1)

29-36: Address deprecated onBrokenMarkdownLinks option in markdown.hooks.

The onBrokenMarkdownLinks option under markdown.hooks is valid in Docusaurus 3.x, but was deprecated in v3.9 and will be removed in v4. Consider verifying your Docusaurus version and planning to remove or replace this option before upgrading to v4.

docs/src/components/HomepageFeatures/index.tsx-12-43 (1)

12-43: Remove unused HomepageFeatures component or implement it properly before use.

This component is not imported or used anywhere in the codebase. The FeatureList contains default Docusaurus boilerplate (with references to Docusaurus rather than NVIDIA Dynamo), and the three SVG files it requires do not exist in docs/static/img/ (only PNG/JPG files are present).

Either delete this unused component or, if intended for future use, customize the feature titles, descriptions, and SVG assets to reflect Dynamo's capabilities before enabling it.

🧹 Nitpick comments (25)
docs/docs/benchmarks/kv-router-ab-testing.md (1)

578-578: Optional: Simplify HTML entities in prose.

HTML entity escaping (&lt;) is unnecessary for comparison operators in regular Markdown prose. Docusaurus handles literal < symbols correctly in text content.

✨ Proposed simplification
-- **Short prompts** (&lt;1000 tokens) where routing overhead exceeds benefit
+- **Short prompts** (<1000 tokens) where routing overhead exceeds benefit
-- **Low prefix overlap**: &lt;5% improvement (may not be worth enabling)
+- **Low prefix overlap**: <5% improvement (may not be worth enabling)
-- KV router shows &lt;10% improvement
+- KV router shows <10% improvement

Also applies to: 585-585, 593-593

docs/docs/backends/trtllm/gemma3_sliding_window_attention.md (1)

1-3: LGTM! Front matter correctly formatted for Docusaurus.

The YAML front matter follows Docusaurus conventions with proper delimiters and a clear title field. The title matches the H1 heading on line 22, which creates consistency.

Optional: Consider removing duplicate title.

Since Docusaurus typically renders the front matter title as the page heading, the H1 on line 22 may be redundant. However, if this duplicate-title pattern is intentional across the migration (as suggested by the PR's systematic approach), it's acceptable for markdown readability.

docs/docs/agents/tool-calling.md (1)

32-33: Add blank line before table for better Markdown compatibility.

While many Markdown parsers handle this, adding a blank line between the heading and table is a best practice that ensures consistent rendering across all parsers.

📝 Proposed improvement
 Parser to Model Mapping
+
 | Parser Name | Supported Models                                                      |
docs/docs/backends/trtllm/kv-cache-transfer.md (1)

33-33: TODO: Complete NIXL backend configuration instructions.

This section needs instructions for specifying different backends for NIXL.

Would you like me to help draft the documentation for NIXL backend configuration, or open an issue to track this task?

docs/docs/backends/sglang/profiling.md (1)

43-43: Use a relative link instead of the absolute GitHub URL for better maintainability.

The file exists, so the link target is valid. However, the absolute GitHub URL pointing to the main branch is less maintainable than a relative link. Since the documentation already uses a relative path on line 46 (python examples/backends/sglang/test_sglang_profile.py), consider using a consistent relative link format:

[`examples/backends/sglang/test_sglang_profile.py`](../../../examples/backends/sglang/test_sglang_profile.py)

This approach avoids hardcoding branch names and ensures the link remains valid if the repository is renamed or reorganized.

.github/workflows/lint-docs.yaml (1)

1-11: Consider adding workflow trigger for the config file.

If .markdownlinkcheck.json is modified, the workflow won't run since it only triggers on .md file changes. Consider adding the config file to the paths filter.

Proposed enhancement
 on:
   push:
     paths:
       - "**.md"
+      - ".markdownlinkcheck.json"
     branches:
       - main
   pull_request:
-    paths: "**.md"
+    paths:
+      - "**.md"
+      - ".markdownlinkcheck.json"
docs/docs/backends/sglang/README.md (1)

31-33: Minor heading case inconsistency.

The TOC entry "Disaggregated Serving" (line 32) uses title case, but the actual heading on line 221 uses "Disaggregated serving" (sentence case). While anchor links are typically case-insensitive, consider aligning the casing for consistency.

docs/package.json (2)

17-28: Inconsistent version pinning for Docusaurus packages.

Some Docusaurus packages use exact versions (3.9.2) while others use caret ranges (^3.9.2). For reproducible builds and to avoid potential compatibility issues, consider using consistent pinning.

Proposed fix for consistent pinning
   "dependencies": {
     "@docusaurus/core": "3.9.2",
-    "@docusaurus/plugin-client-redirects": "^3.9.2",
+    "@docusaurus/plugin-client-redirects": "3.9.2",
     "@docusaurus/preset-classic": "3.9.2",
-    "@docusaurus/theme-mermaid": "^3.9.2",
+    "@docusaurus/theme-mermaid": "3.9.2",

1-50: Add a lockfile for reproducible builds.

Commit a package-lock.json (for npm), yarn.lock (for yarn), or pnpm-lock.yaml (for pnpm) alongside package.json to ensure consistent dependency versions in CI/CD pipelines.

docs/docs/observability/prometheus-grafana.md (1)

86-86: Consider linking to a stable version tag instead of the main branch.

The GitHub URL is accessible and the file exists, but hardcoding main creates a moving target. Documentation should ideally link to specific release versions or tags (e.g., v1.0.0) to ensure the referenced configuration remains consistent with the deployed version being documented.

docs/docs/backends/trtllm/README.md (2)

177-177: Consider creating shared client documentation instead of cross-referencing backend-specific README sections.

The TensorRT-LLM documentation references the SGLang backend's README (line 177 and elsewhere) for client testing instructions via ../../backends/sglang/README.md#testing-the-deployment. While this reference currently works, it creates architectural coupling where the TensorRT-LLM docs depend on SGLang's documentation structure. If client interactions are similar across backends, consider:

  1. Creating a shared docs/docs/client.md page with general client instructions
  2. Duplicating essential client instructions in each backend's documentation
  3. Maintaining a common "Getting Started" or "Usage" guide

This would improve long-term maintainability and reduce the risk of broken references if backend documentation is reorganized.


58-63: Consider removing .md extensions from internal documentation links for Docusaurus consistency.

The referenced documentation files all exist, but these links use .md extensions. While this works, Docusaurus 2.x convention is to omit the extension for better compatibility. The repository itself uses mixed patterns—some links include .md while others omit it. Removing the extension would align with Docusaurus best practices:

-| [**Disaggregated Serving**](../../design_docs/disagg_serving.md) | ✅ |  |
+| [**Disaggregated Serving**](../../design_docs/disagg_serving) | ✅ |  |
-| [**Conditional Disaggregation**](../../design_docs/disagg_serving.md#conditional-disaggregation) | 🚧 | Not supported yet |
+| [**Conditional Disaggregation**](../../design_docs/disagg_serving#conditional-disaggregation) | 🚧 | Not supported yet |

Apply the same change to lines 60–63.

docs/DOCUSAURUS_MIGRATION_PLAN.md (3)

198-199: Consider stricter link checking for production.

The configuration sets onBrokenLinks: 'warn' which allows builds with broken links. For production documentation, consider using 'throw' to catch broken links during CI/CD builds.

🔗 Suggested configuration for stricter link validation
- onBrokenLinks: 'warn',
- onBrokenMarkdownLinks: 'warn',
+ onBrokenLinks: 'throw',  // Fail builds on broken links in CI
+ onBrokenMarkdownLinks: 'throw',

Alternatively, you could use environment-based configuration:

onBrokenLinks: process.env.NODE_ENV === 'production' ? 'throw' : 'warn',

87-113: Add language identifier to code block for better syntax highlighting.

The directory structure code block lacks a language identifier, which prevents proper syntax highlighting and triggers linting warnings.

📝 Suggested improvement
-**New Structure:**
-```
+**New Structure:**
+```text
 docs/
 ├── docusaurus/                  # New Docusaurus project

768-768: Convert emphasized text to proper metadata format.

The closing line uses emphasis instead of a proper heading or metadata format, which triggers a linting warning.

📝 Suggested alternatives

Option 1 - Remove emphasis:

 ---
 
-*Document updated: January 2026*
+Document updated: January 2026

Option 2 - Move to front matter:

 ---
+last_updated: January 2026
 
-*Document updated: January 2026*
docs/docs/benchmarks/benchmarking.md (1)

81-81: Explicit anchor may be redundant.

Docusaurus automatically generates heading anchors from the heading text. The explicit anchor {#client-side-benchmarking-local} matches what Docusaurus would auto-generate, making it redundant.

You can simplify to:

## Client-Side Benchmarking (Local)

Only use explicit anchors when you need a different ID than the auto-generated one (e.g., for backward compatibility with old links).

docs/README.md (1)

1-3: Remove Sphinx-specific front matter.

The orphan: true directive is Sphinx-specific and has no effect in Docusaurus. While it won't cause errors, it should be removed as part of the migration cleanup.

🧹 Suggested cleanup

Either remove the front matter entirely if no Docusaurus-specific metadata is needed:

----
-orphan: true
----
-
 # NVIDIA Dynamo Documentation

Or replace with Docusaurus-appropriate metadata:

 ---
-orphan: true
+sidebar_position: 0
+title: Documentation Guide
 ---
benchmarks/profiler/README.md (2)

100-107: Apply hyphenation for compound adjectives.

Several compound adjectives need hyphens for proper grammar:

  • Line 103: "per GPU throughput" → "per-GPU throughput"
  • Line 107: "computation bound MLP kernel" → "computation-bound MLP kernel"

Additionally, consider using "resolve" instead of "fix" in line 101 for more formal technical documentation.

✏️ Suggested style improvements
-   - However, for MoE models, this is not guaranteed because the kv cache in different attention DP ranks is different. We are working on framework-side change to fix this issue. For example, the below plot shows the decode parallelization mapping sweep results for H100 for deepseek-ai/DeepSeek-R1-Distill-Llama-8B.
+   - However, for MoE models, this is not guaranteed because the kv cache in different attention DP ranks is different. We are working on framework-side change to resolve this issue. For example, the below plot shows the decode parallelization mapping sweep results for H100 for deepseek-ai/DeepSeek-R1-Distill-Llama-8B.
    ![Decode Performance](/img/h100_decode_performance.png)
-4. **Recommendation**: Selects optimal parallelization mapping for prefill and decode that achieves the highest per GPU throughput while adhering the SLA on TTFT and ITL. Specifically, the profiler will choose the point (or a point on the curve for decode) that is left to the vertical red dashed line that represents the SLAs while has the highest y coordinate (throughput per GPU).
+4. **Recommendation**: Selects optimal parallelization mapping for prefill and decode that achieves the highest per-GPU throughput while adhering the SLA on TTFT and ITL. Specifically, the profiler will choose the point (or a point on the curve for decode) that is left to the vertical red dashed line that represents the SLAs while has the highest y coordinate (throughput per GPU).
 5. **In-Depth Profiling on the Recommended P/D Engine**: After finding the best TP size for prefill and decode, the script will then interpolate the TTFT with ISL and ITL with active KV cache and decode context length. This is to provide a more accurate estimation of the performance when ISL and OSL changes and will be used in the sla-planner.
 ![ITL Interpolation](/img/pd_interpolation.png)
    - **Prefill**: Measures TTFT and throughput per GPU across different input lengths with batch size=1.
-   - **Decode**: Measures ITL and throughput per GPU under various KV cache loads and decode context lengths. The active kv usage determines the complexity of the memory-bounded attention kernel while the active kv usage divided the average context length determines the complexity of the computation bound MLP kernel. For example, the below figure shows the ITL of DS-Distilled Llama 8b model on H100 TP4. The ITL grows near-linearly with active kv usage under a fixed context length. And the slope increases as the context length decreases.
+   - **Decode**: Measures ITL and throughput per GPU under various KV cache loads and decode context lengths. The active kv usage determines the complexity of the memory-bounded attention kernel while the active kv usage divided the average context length determines the complexity of the computation-bound MLP kernel. For example, the below figure shows the ITL of DS-Distilled Llama 8b model on H100 TP4. The ITL grows near-linearly with active kv usage under a fixed context length. And the slope increases as the context length decreases.

560-560: Use literal < character instead of HTML entity.

Line 560 uses &lt; where a literal < character would be clearer and is safe in this Markdown context.

✏️ Simplify HTML entity
-- Most models **&lt;1B parameters**: May hit this constraint
+- Most models **<1B parameters**: May hit this constraint
docs/docs/planner/sla_planner.md (1)

28-28: Prefer relative links over hardcoded GitHub URLs for internal repository files.

The absolute GitHub URL pointing to the main branch creates version-sync issues: readers viewing versioned documentation will always see the latest main branch code, which may not match their documentation version. Additionally, the link won't work in offline documentation or forked repositories.

♻️ Suggested fix: Use a relative path
-The adjustment interval can be defined in the planner manifest as an argument. The default interval value can be found in this [file](https://github.com/ai-dynamo/dynamo/tree/main/components/src/dynamo/planner/defaults.py).
+The adjustment interval can be defined in the planner manifest as an argument. The default interval value can be found in this [file](../../components/src/dynamo/planner/defaults.py).

Note: Adjust the relative path (../../components/...) based on the actual location of the components directory relative to docs/docs/planner/. If the components directory is outside the docs structure, consider using a Docusaurus alias or keeping a reference to the file path without making it a clickable link.

docs/docs/reference/glossary.md (1)

36-36: Minor: Missing trailing period for consistency.

Other glossary definitions end with periods, but this one doesn't.

Suggested fix
-**Instance** - A running process with a unique `instance_id`. Multiple instances can serve the same namespace, component, and endpoint for load balancing
+**Instance** - A running process with a unique `instance_id`. Multiple instances can serve the same namespace, component, and endpoint for load balancing.
docs/docs/intro.md (1)

12-12: Consider simplifying redundant phrase.

The phrase "a specific point in time" can be simplified to "a specific point" or "a specific time" for more concise writing.

✍️ Proposed simplification
-This guide is a snapshot of a specific point in time. For the latest information, examples, and Release Assets, see the [Dynamo GitHub repository](https://github.com/ai-dynamo/dynamo/releases/latest).
+This guide is a snapshot of a specific point. For the latest information, examples, and Release Assets, see the [Dynamo GitHub repository](https://github.com/ai-dynamo/dynamo/releases/latest).

Based on learnings from static analysis hints.

docs/docs/backends/vllm/README.md (1)

65-65: Consider using relative paths instead of absolute GitHub URLs.

These links point to absolute GitHub URLs on the main branch:

  • Line 65: https://github.com/ai-dynamo/dynamo/tree/main/deploy/docker-compose.yml
  • Line 150: https://github.com/ai-dynamo/dynamo/tree/main/examples/backends/vllm/deploy/README.md

If these files are also part of the docs site or get moved, these links could become stale. If they must remain external, consider whether versioned links would be more appropriate for release branches.

Also applies to: 150-150

docs/docusaurus.config.ts (1)

74-75: Mixing CommonJS require.resolve with ES module imports.

The config uses ES module imports at the top but require.resolve for the search plugin. While this works in Docusaurus's TypeScript config, for consistency you could use a string path or verify this pattern is intentional.

Alternative using string identifier
-    require.resolve('@easyops-cn/docusaurus-search-local'),
+    '@easyops-cn/docusaurus-search-local',
docs/src/components/HomepageFeatures/index.tsx (1)

45-57: Consider adding accessible label for SVGs.

The role="img" attribute is good, but screen readers won't have meaningful content to announce. Consider adding an aria-label attribute based on the feature title.

♿ Optional accessibility enhancement
 function Feature({title, Svg, description}: FeatureItem) {
   return (
     <div className={clsx('col col--4')}>
       <div className="text--center">
-        <Svg className={styles.featureSvg} role="img" />
+        <Svg className={styles.featureSvg} role="img" aria-label={title} />
       </div>
       <div className="text--center padding-horiz--md">
         <Heading as="h3">{title}</Heading>
         <p>{description}</p>
       </div>
     </div>
   );
 }

- uses: tcort/github-action-markdown-link-check@e7c7a18363c842693fadde5d41a3bd3573a7a225 # v1.1.2
with:
use-quiet-mode: 'yes'
config-file: .markdownlinkcheck.json
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if the markdownlinkcheck config file exists
fd -t f "markdownlinkcheck.json" --max-depth 2

Repository: ai-dynamo/dynamo

Length of output: 42


🏁 Script executed:

#!/bin/bash
# Broader search for the markdownlinkcheck config file
find . -name "*markdownlinkcheck*" -o -name ".markdownlinkcheck*" 2>/dev/null

Repository: ai-dynamo/dynamo

Length of output: 42


Add the .markdownlinkcheck.json config file to the repository root.

The workflow references .markdownlinkcheck.json at line 27, but this file does not exist in the repository. The workflow will fail without this configuration file. Either add the missing config file or update the workflow to reference an existing configuration.

🤖 Prompt for AI Agents
In @.github/workflows/lint-docs.yaml at line 27, The workflow references a
missing config filename (config-file: .markdownlinkcheck.json); either add a
.markdownlinkcheck.json file at the repository root with the markdown-link-check
configuration expected by the lint-docs workflow, or update the workflow step
that uses config-file to point to an existing config or remove the config-file
key; ensure you update the workflow entry that contains "config-file:
.markdownlinkcheck.json" so the action can find valid settings at runtime.

Comment on lines +1 to +3
---
title: "SPDX-License-Identifier: Apache-2.0"
---
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Fix incorrect title in frontmatter.

The title field contains the license identifier instead of the actual document title. This will cause Docusaurus to display "SPDX-License-Identifier: Apache-2.0" as the page title in the browser tab and navigation.

📝 Proposed fix
 ---
-title: "SPDX-License-Identifier: Apache-2.0"
+title: "Benchmarking Guide"
 ---

The license information is already present in the HTML comment block (lines 5-18) and doesn't need to be in the title field.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
---
title: "SPDX-License-Identifier: Apache-2.0"
---
---
title: "Benchmarking Guide"
---
🤖 Prompt for AI Agents
In @docs/docs/benchmarks/benchmarking.md around lines 1 - 3, The frontmatter
'title' field is incorrect (it currently contains the license identifier);
update the YAML frontmatter by replacing the title value with the actual
document title (e.g., "Benchmarking") or remove the erroneous title line so the
page uses the correct heading, keeping the SPDX license only in the existing
HTML comment block; ensure the 'title' key is no longer set to
"SPDX-License-Identifier: Apache-2.0".


### Step 1: Establish Kubernetes Cluster and Install Dynamo
Set up your Kubernetes cluster with NVIDIA GPUs and install the Dynamo Kubernetes Platform. First follow the [installation guide](/docs/kubernetes/installation_guide.md) to install Dynamo Kubernetes Platform, then use [deploy/utils/README](../../deploy/utils/README.md) to set up benchmarking resources.
Set up your Kubernetes cluster with NVIDIA GPUs and install the Dynamo Kubernetes Platform. First follow the [installation guide](/docs/kubernetes/installation_guide.md) to install Dynamo Kubernetes Platform, then use [deploy/utils/README](https://github.com/ai-dynamo/dynamo/tree/main/deploy/utils/README.md) to set up benchmarking resources.
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Reconsider using absolute GitHub URLs for internal documentation.

The link to /docs/kubernetes/installation_guide.md has been changed to an absolute GitHub URL. For internal documentation that's part of the same repository, relative links are preferred in Docusaurus because they:

  • Work with versioning (link to the same version of the doc)
  • Work offline and in local builds
  • Are validated at build time for broken links
🔗 Recommended approach

For documentation files that are part of the docs:

-First follow the [installation guide](/docs/kubernetes/installation_guide.md) to install Dynamo Kubernetes Platform, then use [deploy/utils/README](https://github.com/ai-dynamo/dynamo/tree/main/deploy/utils/README.md) to set up benchmarking resources.
+First follow the [installation guide](/kubernetes/installation_guide.md) to install Dynamo Kubernetes Platform, then use the [deploy/utils README](https://github.com/ai-dynamo/dynamo/tree/main/deploy/utils/README.md) to set up benchmarking resources.

For files outside the docs directory (like deploy/utils/README.md), GitHub URLs are appropriate since those aren't versioned documentation.

🤖 Prompt for AI Agents
In @docs/docs/benchmarks/benchmarking.md at line 104, In
docs/docs/benchmarks/benchmarking.md replace the absolute GitHub URL that points
to the installation guide with a relative Docusaurus link so versioned and local
builds resolve correctly; specifically, change the current absolute link for the
installation guide back to [installation
guide](/docs/kubernetes/installation_guide.md) (keep the existing external
GitHub URL for deploy/utils/README as that file is outside the docs and should
remain an absolute link).

```bash
# Port-forward the frontend service for deployment A
kubectl port-forward -n <namespace> svc/<frontend-service-name> 8000:8000 > /dev/null 2>&1 &
kubectl port-forward -n &lt;namespace&gt; svc/<frontend-service-name> 8000:8000 > /dev/null 2>&1 &
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Remove HTML entity escaping from code blocks.

The use of &lt;namespace&gt; instead of <namespace> in code blocks breaks copy-paste functionality. Users copying this command will get the HTML entities instead of angle brackets, causing the command to fail.

In Markdown code blocks (triple backticks), angle brackets don't need escaping and should be literal:

🐛 Proposed fix
-kubectl port-forward -n &lt;namespace&gt; svc/<frontend-service-name> 8000:8000 > /dev/null 2>&1 &
+kubectl port-forward -n <namespace> svc/<frontend-service-name> 8000:8000 > /dev/null 2>&1 &

The same issue appears on lines 129, 164, 403, 428, and 491. All should use literal angle brackets.

🤖 Prompt for AI Agents
In @docs/docs/benchmarks/benchmarking.md at line 112, Replace HTML-escaped angle
brackets in the markdown code blocks with literal angle brackets so copy-paste
works: find occurrences of "&lt;" and "&gt;" in the command strings (e.g., the
kubectl command shown as "kubectl port-forward -n &lt;namespace&gt;
svc/&lt;frontend-service-name&gt; 8000:8000 > /dev/null 2>&1 &") and change them
to "<namespace>" and "<frontend-service-name>" (and do the same for the other
occurrences noted) ensuring the content remains inside triple-backtick code
blocks.


**Both must show 8/8 workers in Ready state (1/1 Running).** If workers are not ready:
- Check logs: `kubectl logs -n <namespace> <pod-name>`
- Check logs: `kubectl logs -n &lt;namespace&gt; &lt;pod-name&gt;`
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Critical: HTML entities in code blocks break copy-paste functionality.

HTML entities (&lt; and &gt;) render literally inside code blocks and inline code, preventing users from copying working commands. Markdown/Docusaurus automatically handles angle brackets in code contexts, so literal < and > should be used for placeholders.

Impact: Users copying these commands will get &lt;namespace&gt; instead of <namespace>, requiring manual correction.

🔧 Proposed fix: Use literal angle brackets in code
-- Check logs: `kubectl logs -n &lt;namespace&gt; &lt;pod-name&gt;`
+- Check logs: `kubectl logs -n <namespace> <pod-name>`
-kubectl edit dynamographdeployment -n &lt;namespace&gt;
+kubectl edit dynamographdeployment -n <namespace>
-- Check operator logs: `kubectl logs -n &lt;namespace&gt; deployment/dynamo-platform-dynamo-operator-controller-manager`
+- Check operator logs: `kubectl logs -n <namespace> deployment/dynamo-platform-dynamo-operator-controller-manager`
-kubectl logs -n &lt;namespace&gt; <worker-pod-name>
+kubectl logs -n <namespace> <worker-pod-name>
-kubectl patch dynamographdeployment <deployment-name> -n &lt;namespace&gt; --type='json' \
+kubectl patch dynamographdeployment <deployment-name> -n <namespace> --type='json' \
-kubectl get pods -n &lt;namespace&gt; -l nvidia.com/dynamo-component-type=worker
+kubectl get pods -n <namespace> -l nvidia.com/dynamo-component-type=worker
-kubectl describe pod &lt;pod-name&gt; -n &lt;namespace&gt;
+kubectl describe pod <pod-name> -n <namespace>

Also applies to: 651-651, 673-673, 682-682, 704-704, 732-732, 735-735

🤖 Prompt for AI Agents
In @docs/docs/benchmarks/kv-router-ab-testing.md at line 353, Replace HTML
entities `&lt;` and `&gt;` inside inline code and code blocks with literal angle
brackets so placeholders are copy-pastable; e.g., change occurrences like
`&lt;namespace&gt;` and `&lt;pod-name&gt;` to `<namespace>` and `<pod-name>`
(and any other `&lt;...&gt;` placeholders) throughout the document (including
the other reported occurrences), ensuring Markdown/Docusaurus rendering uses the
literal `<` and `>` in code contexts.

Comment on lines +20 to +32
<div class="admonition seealso">

🚀 Quick Start

**New to SLA Planner?** Start with the \[SLA Planner Quick Start
Guide\](/docs/planner/sla_planner_quickstart.md) for a complete,
step-by-step workflow.

**Prerequisites**: SLA-based planner requires pre-deployment profiling
(2-4 hours on real silicon or a few minutes using simulator) before
deployment. The Quick Start guide includes everything you need.

</div>
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion | 🟠 Major

Use Docusaurus-native admonition syntax.

The HTML <div class="admonition seealso"> is Sphinx-style markup. Docusaurus provides native admonition syntax that renders properly and supports theming.

♻️ Proposed refactor to Docusaurus syntax
-<div class="admonition seealso">
-
-🚀 Quick Start
-
-**New to SLA Planner?** Start with the \[SLA Planner Quick Start
-Guide\](/docs/planner/sla_planner_quickstart.md) for a complete,
-step-by-step workflow.
-
-**Prerequisites**: SLA-based planner requires pre-deployment profiling
-(2-4 hours on real silicon or a few minutes using simulator) before
-deployment. The Quick Start guide includes everything you need.
-
-</div>
+:::tip 🚀 Quick Start
+
+**New to SLA Planner?** Start with the [SLA Planner Quick Start Guide](/docs/planner/sla_planner_quickstart.md) for a complete, step-by-step workflow.
+
+**Prerequisites**: SLA-based planner requires pre-deployment profiling (2-4 hours on real silicon or a few minutes using simulator) before deployment. The Quick Start guide includes everything you need.
+
+:::
🤖 Prompt for AI Agents
In @docs/docs/planner/planner_intro.md around lines 20 - 32, Replace the raw
HTML Sphinx-style block (<div class="admonition seealso"> ... </div>) with a
Docusaurus native admonition block using the triple-colon syntax (e.g., :::note
or :::info) and include the “Quick Start” title and the same inner content;
locate the HTML div with class="admonition seealso" in planner_intro.md and
convert it to an appropriate Docusaurus admonition (choose
:::tip/:::info/:::note as fits the semantics) ensuring the inner markdown (links
and bold text) remains unchanged and close the block with the matching
triple-colon.

Comment on lines +24 to +25
**New to SLA Planner?** Start with the \[SLA Planner Quick Start
Guide\](/docs/planner/sla_planner_quickstart.md) for a complete,
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Fix escaped brackets in markdown link.

The backslashes escaping the square brackets break the markdown link syntax. The link won't render correctly.

Note: This is also addressed in the admonition refactor above (lines 20-32), but calling it out separately as it's a critical syntax error.

🤖 Prompt for AI Agents
In @docs/docs/planner/planner_intro.md around lines 24 - 25, Remove the
unnecessary backslashes escaping the square brackets in the markdown link so the
link renders correctly: change the text containing "\[SLA Planner Quick Start
Guide\](/docs/planner/sla_planner_quickstart.md)" to use regular brackets " [SLA
Planner Quick Start Guide](/docs/planner/sla_planner_quickstart.md)" (i.e.,
remove the backslashes around "SLA Planner Quick Start Guide").

Comment on lines +34 to +46
||
||
||
||
||
||
||
||
||
||
||
||

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Remove conversion artifacts.

These 13 lines containing only || markers appear to be leftover artifacts from the Sphinx-to-Docusaurus migration, likely remnants of an RST table or placeholder content.

🧹 Proposed fix
-||
-||
-||
-||
-||
-||
-||
-||
-||
-||
-||
-||
-||
🤖 Prompt for AI Agents
In @docs/docs/planner/planner_intro.md around lines 34 - 46, The file contains
13 leftover conversion artifact lines that consist solely of "||" markers;
remove those lines from planner_intro.md and ensure no stray empty lines remain
or broken markdown/table placeholders; after deletion, preview the rendered doc
to confirm spacing and any intended table or content around the former artifact
is intact and adjust adjacent markdown (headers, lists, or tables) if necessary.

Comment on lines +421 to +438
REPLACEMENTS = [
# Admonitions: MyST -> Docusaurus
(r'```{note}', ':::note'),
(r'```{warning}', ':::warning'),
(r'```{tip}', ':::tip'),
(r'```{caution}', ':::caution'),
(r'```{danger}', ':::danger'),
(r'```', ':::'), # Close admonitions

# References
(r':ref:`([^`]+)`', r'[\1](\1.md)'),

# Code blocks with sphinx-specific options
(r'```{code-block} (\w+)', r'```\1'),

# Remove toctree directives (handled by sidebars.ts)
(r'```{toctree}[\s\S]*?```', ''),
]
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Fix regex pattern that will break code blocks.

The regex pattern r'```' on line 428 will match and replace ALL triple backticks in the document, not just MyST admonition closers. This will corrupt regular code blocks.

🐛 Proposed fix for the admonition closing pattern

The admonition conversion needs a more sophisticated approach since MyST admonitions and code blocks both use triple backticks:

 REPLACEMENTS = [
     # Admonitions: MyST -> Docusaurus
-    (r'```{note}', ':::note'),
-    (r'```{warning}', ':::warning'),
-    (r'```{tip}', ':::tip'),
-    (r'```{caution}', ':::caution'),
-    (r'```{danger}', ':::danger'),
-    (r'```', ':::'),  # Close admonitions
+    (r'```\{note\}', ':::note'),
+    (r'```\{warning\}', ':::warning'),
+    (r'```\{tip\}', ':::tip'),
+    (r'```\{caution\}', ':::caution'),
+    (r'```\{danger\}', ':::danger'),
+    # Don't convert closing ``` - handle admonition closing separately
     
     # References
     (r':ref:`([^`]+)`', r'[\1](\1.md)'),

Better approach: Use a stateful parser to track when inside an admonition block, or use a more complex regex that matches the entire admonition block at once.

🤖 Prompt for AI Agents
In @docs/DOCUSAURUS_MIGRATION_PLAN.md around lines 421 - 438, The REPLACEMENTS
entry that uses the generic pattern r'```' will replace every triple-backtick
(breaking normal code blocks); update the REPLACEMENTS logic so only MyST
admonition markers are targeted (e.g., convert the specific patterns like
r'```{note}', r'```{warning}', r'```{tip}', r'```{caution}', r'```{danger}'
while removing or escaping the generic r'```' rule), and implement handling for
admonition closers either by (A) matching entire admonition blocks at once (a
single regex that captures ```{type} ... ``` and replaces with the corresponding
:::type ... :::) or (B) adding a simple stateful parser around REPLACEMENTS that
tracks when you're inside an admonition and only converts the closing
triple-backticks for those blocks; ensure changes are made where REPLACEMENTS is
defined and referenced so regular code fences remain untouched.

Comment on lines +48 to +62
```bash
cd docs/docusaurus

# Start development server (hot reload)
npm run start

# Build production site
npm run build

# Serve production build locally
npm run serve

# Clear cache
npm run clear
```
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Fix incorrect directory path in development commands.

Line 49 references "cd docs/docusaurus" but according to the Phase 4 restructuring section (lines 110-118), the Docusaurus project was moved directly to "docs/". This instruction would fail.

🐛 Proposed fix
 ```bash
-cd docs/docusaurus
+cd docs
 
 # Start development server (hot reload)
 npm run start
🤖 Prompt for AI Agents
In @docs/MIGRATION_COMPLETE.md around lines 48 - 62, Update the incorrect
directory path in the Docusaurus commands: replace the "cd docs/docusaurus"
invocation with "cd docs" in the code block (the shell commands for starting,
building, serving, and clearing the site) so the development commands point to
the relocated Docusaurus project referenced in Phase 4.

@Jont828 Jont828 force-pushed the docusaurus-migration branch from bf404eb to 1243d94 Compare January 13, 2026 19:15
@Jont828
Copy link
Contributor Author

Jont828 commented Jan 15, 2026

Closing in favor of #5445

@Jont828 Jont828 closed this Jan 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

external-contribution Pull request is from an external contributor size/XXL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant