Skip to content

docs: Support syncing documentation snapshots to the docs-website branch#86

Merged
rapids-bot[bot] merged 4 commits into
NVIDIA:mainfrom
dagardner-nv:david-sync-docs
Jul 20, 2026
Merged

docs: Support syncing documentation snapshots to the docs-website branch#86
rapids-bot[bot] merged 4 commits into
NVIDIA:mainfrom
dagardner-nv:david-sync-docs

Conversation

@dagardner-nv

@dagardner-nv dagardner-nv commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator

Overview

  • On documentation changes docs are synced to the docs-website branch

Where should the reviewer start?

  • scripts/docs/sync_fern_docs_branch.py

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

PR #84

  • I confirm this contribution is my own work, or I have the right to submit it under this project's license.
  • I searched existing issues and open pull requests, and this does not duplicate existing work.

Summary by CodeRabbit

  • New Features
    • Introduced a Fern docs pipeline for PR previews with automatic cleanup, plus dev docs publishing for main.
    • Added versioned docs releases with stable/beta/RC handling and stricter tag validation.
  • Documentation
    • Updated NeMo Fabric overview and Python SDK guide links.
  • CI/CD
    • Added docs change path filtering to avoid running docs work when unrelated files change.
    • Improved docs generation/validation and broken-link checking.
  • Tests
    • Added coverage for docs branch synchronization, navigation rewriting, and release-tag/version promotion behavior.

Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
@dagardner-nv
dagardner-nv requested a review from a team as a code owner July 17, 2026 22:00
@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 2c598759-9add-4b19-9ef7-94ca9e993684

📥 Commits

Reviewing files that changed from the base of the PR and between 9dc41c0 and 75cc514.

📒 Files selected for processing (2)
  • docs/about-nemo-fabric/overview.mdx
  • docs/sdk/python.mdx
📜 Recent review details
⏰ Context from checks skipped due to timeout. (13)
  • GitHub Check: Preview docs
  • GitHub Check: Test (Python 3.14, x86_64)
  • GitHub Check: Test (Python 3.11, x86_64)
  • GitHub Check: Test (Python 3.12, arm64)
  • GitHub Check: Test (Python 3.14, arm64)
  • GitHub Check: Test (Python 3.13, arm64)
  • GitHub Check: Test (Python 3.12, x86_64)
  • GitHub Check: Test (Python 3.11, arm64)
  • GitHub Check: Test (Python 3.13, x86_64)
  • GitHub Check: Build wheels (arm64)
  • GitHub Check: Build wheels (x86_64)
  • GitHub Check: Pre-commit
  • GitHub Check: Test (arm64)
🧰 Additional context used
📓 Path-based instructions (12)
**/*.{md,mdx,html}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Changes affecting public behavior, adapters, examples, or workspace structure must update the corresponding documentation; public API changes require updated SDK or API reference documentation.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
**/*.{md,mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

For docs site changes, run just docs to regenerate Python and Rust API references and validate Fern configuration.

**/*.{md,mdx}: Prioritize factual accuracy in NeMo Fabric documentation and keep commands, package names, APIs, file paths, repository layout, entry points, support claims, examples, and procedures aligned with current repository behavior.
Update relevant entry-point documentation when public behavior changes, including README.md, docs/index.yml, package or crate READMEs, and adapter or integration READMEs.
Use {/* ... */} delimiters for top-of-file SPDX comments in MDX files, not HTML comment delimiters.
Capitalize NVIDIA correctly and use consistent current repository terminology, product names, APIs, and feature names.
Format commands, code, expressions, file names, paths, and filenames as inline code where appropriate.
Use title case for technical-documentation headings.
Introduce code blocks, tables, and lists with complete lead-in sentences.
Use descriptive link text instead of raw URLs or generic labels such as here.
Write procedures as short, imperative, parallel, easy-to-scan steps; prefer active voice, present tense, plain English, and concise sentences.
Use after instead of once when expressing temporal sequence, and use can instead of may when describing possibility rather than permission.
Use unambiguous date formats and avoid ordinal dates in body text.
When reviewing documentation, report findings in severity order under Must fix, Should fix, and Nice to have, with file paths, line references, explanations, and concrete rewrites or directions.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
**/*

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*: All source files must include the specified SPDX copyright and Apache-2.0 license header using the comment syntax appropriate to the file type.
Release tags must use raw Rust-compatible SemVer without a leading v, such as 0.1.0 or 0.1.0-rc.1.

**/*: Before implementing, explicitly state assumptions, surface ambiguity and tradeoffs, present multiple interpretations when relevant, and ask for clarification rather than silently deciding or proceeding when requirements are unclear.
Prefer the minimum code needed to solve the requested problem: avoid speculative features, unnecessary abstractions, unrequested flexibility, and handling of impossible scenarios; simplify overcomplicated solutions.
When editing existing code, make surgical changes only: do not modify unrelated code, comments, formatting, or pre-existing dead code; match the existing style, and remove only unused imports, variables, or functions introduced by your changes.
Define verifiable success criteria for each task, such as writing regression tests for bugs and invalid-input tests for validation, then verify the implementation against those criteria. For multi-step work, state a brief plan with a verification check for each step.

**/*: Keep pull request branch scope coherent and reviewable.
Run relevant tests under validate-change before opening or updating a pull request.
Format changed files with the language-native formatter.
Update documentation and examples for public behavior changes.
Update dependent maintainer or consumer guidance when code changes affect APIs, bindings, commands, paths, packaging guidance, or best practices.
Use Conventional Commit style for pull request titles: <type>: <concise imperative summary>, choosing the type from the actual change surface. Use fix only for user-facing or runtime product-code bug fixes.
A pull request body must include #### Overview, #### Details, #### Validation, #### Where should the reviewer start?, and `#### Related ...

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
**/*.mdx

📄 CodeRabbit inference engine (CONTRIBUTING.md)

MDX files must use the specified SPDX header in a JSX comment.

In MDX files, use JSX comment delimiters ({/* and */}) for top-of-file comments, including SPDX headers; do not use HTML comments.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
{README.md,docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)

Keep package names, repository references, and build commands current in documentation and examples.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
{docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)

Update relevant getting-started, reference, adapter, and example documentation when the corresponding examples or adapters change.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
docs/**/*.{md,mdx,yml}

📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)

Run just docs when the documentation site changes.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
{docs/**/*,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml,justfile}

📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)

Use the current install, import, build, test, clean, and documentation commands consistently in documentation, examples, CI workflows, and just recipes.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
{docs/**/*,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml}

📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)

Reflect public packaging changes in release-facing documentation and examples.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
**/*.{md,mdx,rst}

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-guide.md)

**/*.{md,mdx,rst}: For NeMo Fabric documentation, verify technical claims against the current repository, public API, or documented command before reviewing style.
Always spell NVIDIA in all caps; do not use Nvidia, nvidia, or NV.
Format commands, code elements, expressions, package names, file names, and paths as inline code.
Use descriptive link text; avoid raw URLs and weak anchors such as here or read more.
Use title case consistently for technical documentation headings.
Introduce code blocks, lists, tables, and images with complete sentences.
Write procedures as imperative, parallel steps; split long procedures into smaller tasks.
Prefer active voice, present tense, short sentences, contractions, and plain English while preserving necessary technical precision.
Use can for possibility and reserve may for permission.
Use after for temporal relationships instead of once, and prefer refer to over see when directing readers to another resource.
Avoid culture-specific idioms, unnecessary Latinisms, jokes, and marketing exaggeration in technical documentation.
Spell out months in body text, avoid ordinal dates, and use clear time zones.
Spell out whole numbers from zero through nine unless they are technical values, parameters, versions, or UI values; use numerals for 10 or greater and commas in thousands.
Do not add trademark symbols to learning-oriented documentation unless the source, platform, or legal guidance explicitly requires them.
Do not replace precise technical terms with simpler words when doing so would lose precision.
Do not flag passive voice when the actor is unknown or the action is the important part.
Do not rewrite API names, package names, command flags, or code literals for style.

**/*.{md,mdx,rst}: Use consistent title case for technical-document headings and table headers; avoid quotation marks, ampersands, and exclamation marks in headings, while preserving official product, event, research, and whitepaper title ...

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
docs/**/*

📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)

For documentation or examples changes, run just docs when practical and verify documented commands against the current repository.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
{docs/**,README.md,AGENTS.md}

⚙️ CodeRabbit configuration file

{docs/**,README.md,AGENTS.md}: Review documentation for technical accuracy against the current API, command correctness, and consistency with generated schemas.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
🔇 Additional comments (2)
docs/about-nemo-fabric/overview.mdx (1)

3-3: LGTM!

Also applies to: 122-123

docs/sdk/python.mdx (1)

23-23: LGTM!


Walkthrough

Adds Fern documentation synchronization for development and release snapshots, tests for generated layouts, stricter validation, corrected documentation paths, and CI workflows for filtered previews, cleanup, development publishing, and tagged releases.

Changes

Fern documentation publishing

Layer / File(s) Summary
Synchronize Fern documentation layouts
scripts/docs/sync_fern_docs_branch.py, tests/scripts/test_sync_fern_docs_branch.py
Adds development and release synchronization, navigation rewriting, SemVer handling, GitHub link updates, Fern configuration generation, and tests for stable and prerelease snapshots.
Gate and publish documentation workflows
.github/ci-path-filters.yml, .github/workflows/fern-docs.yml, justfile, pyproject.toml
Adds documentation path filtering, strict Fern validation, the YAML dependency, PR preview generation and cleanup, development publishing, and tagged release publishing.
Update documentation paths and links
docs/about-nemo-fabric/overview.mdx, docs/sdk/python.mdx
Sets the overview slug and updates SDK documentation links to current paths.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant PullRequest
  participant GitHubActions
  participant SyncScript
  participant Fern
  PullRequest->>GitHubActions: trigger documentation workflow
  GitHubActions->>GitHubActions: detect documentation path changes
  GitHubActions->>SyncScript: synchronize development docs
  SyncScript->>Fern: prepare preview layout
  Fern-->>GitHubActions: return preview URL
  GitHubActions-->>PullRequest: update preview comment
Loading

Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error)

Check name Status Explanation Resolution
Title check ❌ Error The title matches the change, but it exceeds the 72-character limit required by the repo. Shorten the title to under 72 characters while keeping Conventional Commits format, e.g. docs: sync docs snapshots to docs-website.
✅ Passed checks (4 passed)
Check name Status Explanation
Description check ✅ Passed The description follows the template and covers overview, reviewer start, and confirmations, but the related issue line is missing the required action keyword.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@github-actions

Copy link
Copy Markdown

@coderabbitai coderabbitai 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.

Actionable comments posted: 7

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/fern-docs.yml:
- Around line 24-26: Update the workflow concurrency configuration so
publish-dev-docs and release-version-docs use one shared concurrency group with
cancel-in-progress set to false, preventing concurrent docs-website writers and
preserving releases. Keep preview jobs separately keyed by pull request with
cancellation enabled.
- Around line 52-65: Change the preview-docs workflow so PR-controlled execution
never receives FERN_TOKEN or other privileged credentials. Split generation from
publication: run untrusted docs generation without secrets, then trigger a
trusted default-branch workflow that uses pinned tooling and sanitized generated
artifacts to publish the preview. Apply the same separation to the credential
and publication steps referenced in the workflow’s later sections.
- Around line 160-165: Update the closed pull request condition in the workflow
to run for all closed PRs by removing the merged check. In the associated
preview deletion step, ignore only the documented already-deleted result and
preserve nonzero exits for all other deletion failures so they surface.
- Around line 141-145: Update the URL extraction in the workflow step around the
line and url assignments so a missing grep match does not terminate the step
under pipefail. Make the extraction tolerate no URL, leave url empty, and allow
the subsequent conditional to complete successfully without writing a GitHub
output.
- Around line 147-156: Update the “Comment preview URL on PR” step to pass the
preview URL and PR number through environment variables sourced from the step
outputs, then reference those variables in the shell command and comment body.
Remove direct GitHub expression interpolation from the run script while
preserving the existing gh pr comment behavior.

In `@scripts/docs/sync_fern_docs_branch.py`:
- Around line 199-221: Update release_version to detect an existing stable
version entry before deleting or replacing pages_version or version_yml, and
reject prereleases when the corresponding stable version already exists.
Preserve normal stable releases and prereleases without a prior stable version,
and add a regression test covering publishing the prerelease after the stable
release.
- Around line 133-141: Update write_docs_yml so it starts from the current
source product produced by docs_website_product(products[0]), then overlays only
the preserved target product’s path and versions when available. Do not replace
the entire source product with preserved_product; ensure source name, slug, and
Fern metadata continue synchronizing while target path and version state are
retained.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 71bf2814-a5e8-4100-b0e3-0616e4170a43

📥 Commits

Reviewing files that changed from the base of the PR and between 3535728 and e2a2484.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (8)
  • .github/ci-path-filters.yml
  • .github/workflows/fern-docs.yml
  • docs/about-nemo-fabric/overview.mdx
  • docs/sdk/python.mdx
  • justfile
  • pyproject.toml
  • scripts/docs/sync_fern_docs_branch.py
  • tests/scripts/test_sync_fern_docs_branch.py
📜 Review details
⏰ Context from checks skipped due to timeout. (10)
  • GitHub Check: Preview docs
  • GitHub Check: Test (Python 3.12, arm64)
  • GitHub Check: Test (Python 3.14, arm64)
  • GitHub Check: Test (Python 3.14, x86_64)
  • GitHub Check: Test (Python 3.11, x86_64)
  • GitHub Check: Test (Python 3.12, x86_64)
  • GitHub Check: Test (Python 3.13, arm64)
  • GitHub Check: Test (Python 3.11, arm64)
  • GitHub Check: Test (Python 3.13, x86_64)
  • GitHub Check: Pre-commit
🧰 Additional context used
📓 Path-based instructions (30)
**/*.{rs,toml}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.{rs,toml}: Rust code must be formatted with cargo fmt --all; formatting can be checked with cargo fmt --all -- --check, and Rust workspaces must compile with cargo check --workspace --locked.
Rust files must begin with the specified // SPDX copyright and Apache-2.0 license header.

When Rust code or Rust project configuration changes, run cargo fmt --all -- --check and just test-rust.

Files:

  • pyproject.toml
**/*

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*: All source files must include the specified SPDX copyright and Apache-2.0 license header using the comment syntax appropriate to the file type.
Release tags must use raw Rust-compatible SemVer without a leading v, such as 0.1.0 or 0.1.0-rc.1.

**/*: Before implementing, explicitly state assumptions, surface ambiguity and tradeoffs, present multiple interpretations when relevant, and ask for clarification rather than silently deciding or proceeding when requirements are unclear.
Prefer the minimum code needed to solve the requested problem: avoid speculative features, unnecessary abstractions, unrequested flexibility, and handling of impossible scenarios; simplify overcomplicated solutions.
When editing existing code, make surgical changes only: do not modify unrelated code, comments, formatting, or pre-existing dead code; match the existing style, and remove only unused imports, variables, or functions introduced by your changes.
Define verifiable success criteria for each task, such as writing regression tests for bugs and invalid-input tests for validation, then verify the implementation against those criteria. For multi-step work, state a brief plan with a verification check for each step.

**/*: Keep pull request branch scope coherent and reviewable.
Run relevant tests under validate-change before opening or updating a pull request.
Format changed files with the language-native formatter.
Update documentation and examples for public behavior changes.
Update dependent maintainer or consumer guidance when code changes affect APIs, bindings, commands, paths, packaging guidance, or best practices.
Use Conventional Commit style for pull request titles: <type>: <concise imperative summary>, choosing the type from the actual change surface. Use fix only for user-facing or runtime product-code bug fixes.
A pull request body must include #### Overview, #### Details, #### Validation, #### Where should the reviewer start?, and `#### Related ...

Files:

  • pyproject.toml
  • docs/sdk/python.mdx
  • justfile
  • docs/about-nemo-fabric/overview.mdx
  • scripts/docs/sync_fern_docs_branch.py
  • tests/scripts/test_sync_fern_docs_branch.py
**/*.{toml,yaml,yml,sh,bash}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

TOML, YAML, and shell files must use the specified SPDX header with # comments.

Files:

  • pyproject.toml
{Cargo.toml,pyproject.toml,python/pyproject.toml,python/src/nemo_fabric/**}

📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)

{Cargo.toml,pyproject.toml,python/pyproject.toml,python/src/nemo_fabric/**}: Keep Rust package names, Python package/import paths, and native module names internally consistent across Cargo and Python packaging metadata and source paths.
Ensure generated native and Python artifacts are placed where downstream consumers expect them.

Files:

  • pyproject.toml
{Cargo.toml,pyproject.toml,python/pyproject.toml,Cargo.lock,uv.lock}

📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)

Keep workspace, Rust, Python, and lockfile versions aligned where required.

Files:

  • pyproject.toml
{pyproject.toml,python/pyproject.toml,Cargo.toml,python/src/nemo_fabric/**}

📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)

The editable maturin build must continue to produce the nemo_fabric._native extension.

Files:

  • pyproject.toml
{.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml,justfile,pyproject.toml,python/pyproject.toml,Cargo.toml}

📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)

CI workflows must reference the same package names and commands used by local build and installation workflows.

Files:

  • pyproject.toml
  • justfile
{Cargo.toml,Cargo.lock,pyproject.toml,python/pyproject.toml,uv.lock,docs/package.json,docs/package-lock.json}

📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)

Maintain package metadata and dependency resolution consistently across Rust, Python, documentation tooling, and their lockfiles.

Files:

  • pyproject.toml
**/pyproject.toml

📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)

Run just build-python to verify that all Python package metadata resolves.

Files:

  • pyproject.toml
**/*.{rs,py,pyi,toml}

📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)

When the PyO3 bridge or package metadata changes, run just build-python and cargo check -p fabric-python --locked.

Files:

  • pyproject.toml
  • scripts/docs/sync_fern_docs_branch.py
  • tests/scripts/test_sync_fern_docs_branch.py
**/*.{md,mdx,html}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Changes affecting public behavior, adapters, examples, or workspace structure must update the corresponding documentation; public API changes require updated SDK or API reference documentation.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
**/*.{md,mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

For docs site changes, run just docs to regenerate Python and Rust API references and validate Fern configuration.

**/*.{md,mdx}: Prioritize factual accuracy in NeMo Fabric documentation and keep commands, package names, APIs, file paths, repository layout, entry points, support claims, examples, and procedures aligned with current repository behavior.
Update relevant entry-point documentation when public behavior changes, including README.md, docs/index.yml, package or crate READMEs, and adapter or integration READMEs.
Use {/* ... */} delimiters for top-of-file SPDX comments in MDX files, not HTML comment delimiters.
Capitalize NVIDIA correctly and use consistent current repository terminology, product names, APIs, and feature names.
Format commands, code, expressions, file names, paths, and filenames as inline code where appropriate.
Use title case for technical-documentation headings.
Introduce code blocks, tables, and lists with complete lead-in sentences.
Use descriptive link text instead of raw URLs or generic labels such as here.
Write procedures as short, imperative, parallel, easy-to-scan steps; prefer active voice, present tense, plain English, and concise sentences.
Use after instead of once when expressing temporal sequence, and use can instead of may when describing possibility rather than permission.
Use unambiguous date formats and avoid ordinal dates in body text.
When reviewing documentation, report findings in severity order under Must fix, Should fix, and Nice to have, with file paths, line references, explanations, and concrete rewrites or directions.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
**/*.mdx

📄 CodeRabbit inference engine (CONTRIBUTING.md)

MDX files must use the specified SPDX header in a JSX comment.

In MDX files, use JSX comment delimiters ({/* and */}) for top-of-file comments, including SPDX headers; do not use HTML comments.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
{README.md,docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)

Keep package names, repository references, and build commands current in documentation and examples.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
{docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)

Update relevant getting-started, reference, adapter, and example documentation when the corresponding examples or adapters change.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
docs/**/*.{md,mdx,yml}

📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)

Run just docs when the documentation site changes.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
{docs/**/*,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml,justfile}

📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)

Use the current install, import, build, test, clean, and documentation commands consistently in documentation, examples, CI workflows, and just recipes.

Files:

  • docs/sdk/python.mdx
  • justfile
  • docs/about-nemo-fabric/overview.mdx
{docs/**/*,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml}

📄 CodeRabbit inference engine (.agents/skills/maintain-packaging/SKILL.md)

Reflect public packaging changes in release-facing documentation and examples.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
**/*.{md,mdx,rst}

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-guide.md)

**/*.{md,mdx,rst}: For NeMo Fabric documentation, verify technical claims against the current repository, public API, or documented command before reviewing style.
Always spell NVIDIA in all caps; do not use Nvidia, nvidia, or NV.
Format commands, code elements, expressions, package names, file names, and paths as inline code.
Use descriptive link text; avoid raw URLs and weak anchors such as here or read more.
Use title case consistently for technical documentation headings.
Introduce code blocks, lists, tables, and images with complete sentences.
Write procedures as imperative, parallel steps; split long procedures into smaller tasks.
Prefer active voice, present tense, short sentences, contractions, and plain English while preserving necessary technical precision.
Use can for possibility and reserve may for permission.
Use after for temporal relationships instead of once, and prefer refer to over see when directing readers to another resource.
Avoid culture-specific idioms, unnecessary Latinisms, jokes, and marketing exaggeration in technical documentation.
Spell out months in body text, avoid ordinal dates, and use clear time zones.
Spell out whole numbers from zero through nine unless they are technical values, parameters, versions, or UI values; use numerals for 10 or greater and commas in thousands.
Do not add trademark symbols to learning-oriented documentation unless the source, platform, or legal guidance explicitly requires them.
Do not replace precise technical terms with simpler words when doing so would lose precision.
Do not flag passive voice when the actor is unknown or the action is the important part.
Do not rewrite API names, package names, command flags, or code literals for style.

**/*.{md,mdx,rst}: Use consistent title case for technical-document headings and table headers; avoid quotation marks, ampersands, and exclamation marks in headings, while preserving official product, event, research, and whitepaper title ...

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
docs/**/*

📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)

For documentation or examples changes, run just docs when practical and verify documented commands against the current repository.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
{docs/**,README.md,AGENTS.md}

⚙️ CodeRabbit configuration file

{docs/**,README.md,AGENTS.md}: Review documentation for technical accuracy against the current API, command correctness, and consistency with generated schemas.

Files:

  • docs/sdk/python.mdx
  • docs/about-nemo-fabric/overview.mdx
justfile

📄 CodeRabbit inference engine (.agents/skills/small-fix/SKILL.md)

Use or update the repository’s justfile when it provides the focused validation path for a small Fabric bug fix.

The set-version recipe must update source metadata and then run just lock-python.

Files:

  • justfile
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.py: Python public APIs must use type annotations, and native Python binding declarations must remain synchronized with their Rust implementations.
Python files must begin with the specified # SPDX copyright and Apache-2.0 license header.

Files:

  • scripts/docs/sync_fern_docs_branch.py
  • tests/scripts/test_sync_fern_docs_branch.py
**/*.{rs,py}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.{rs,py}: Use snake_case for Rust and Python functions and variables; use PascalCase for Rust types and Python classes.
Run tests for every language surface affected by a change. Changes touching the Rust core or public schemas require both Rust and Python test suites.
Public contract changes must keep native Python binding declarations synchronized with their Rust implementations.

Files:

  • scripts/docs/sync_fern_docs_branch.py
  • tests/scripts/test_sync_fern_docs_branch.py
**/*.{rs,py,pyi,json,yaml,yml}

📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)

Determine and update every affected public surface, including the CLI, PyO3 bindings, Python SDK, type stubs, schemas, and adapter contract, so they remain in parity.

Files:

  • scripts/docs/sync_fern_docs_branch.py
  • tests/scripts/test_sync_fern_docs_branch.py
**/*.{py,pyi}

📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)

When Python code or a Python-facing adapter changes, run just test-python.

Files:

  • scripts/docs/sync_fern_docs_branch.py
  • tests/scripts/test_sync_fern_docs_branch.py
tests/**/*.py

📄 CodeRabbit inference engine (.agents/skills/python-tests/SKILL.md)

tests/**/*.py: Use Pytest to run Python tests.
Do not add @pytest.mark.asyncio to tests; async tests are automatically detected by the async runner.
Do not add -> None return annotations to test functions.
When mocking a class, use unittest.mock.MagicMock or AsyncMock, supplying spec when necessary; do not define a new mock class.
Prefix mocked class names with mock, not fake.
Prefer pytest fixtures over helper methods.
Define shared fixtures in conftest.py rather than repeating them across test files.
Define fixtures using @pytest.fixture(name="<fixture_name>"[, scope="<scope>"]) and a <fixture_name>_fixture function; specify scope only when it is not function.
Prefer pytest.mark.parametrize over separate tests for different input types.
Use @pytest.mark.usefixtures when a fixture is needed but its return value is unused.
Use os.environ to modify environment variables in tests; do not use monkeypatch.setenv, because the autouse restore_environ_fixture in tests/conftest.py restores the environment after each test.
Avoid defensive programming in tests; access expected data directly so missing data raises a clear error instead of being silently tolerated.
Run focused tests with uv run pytest -k "<pattern>" and all tests with uv run pytest.

Files:

  • tests/scripts/test_sync_fern_docs_branch.py
{tests/**,python/tests/**}

⚙️ CodeRabbit configuration file

{tests/**,python/tests/**}: Tests should cover the behavior promised by the changed API surface, including error paths, lifecycle cleanup, and SDK/native parity where relevant.

Files:

  • tests/scripts/test_sync_fern_docs_branch.py
**/.github/workflows/*.{yml,yaml}

📄 CodeRabbit inference engine (.agents/skills/maintain-ci/SKILL.md)

**/.github/workflows/*.{yml,yaml}: Define permissions: per job that needs token access, using the minimum required scopes; avoid workflow-level permissions unless centralized inheritance is intentionally documented.
Pin every third-party GitHub Action to a full commit SHA and retain a readable version comment after the SHA.
Use action-native or ecosystem-native caching instead of generic actions/cache when available.
Tie cache invalidation to lockfiles, dependency manifests, or explicit tool versions; avoid caching generated outputs unless deliberate repository behavior requires it.
Use astral-sh/setup-uv cache support with cache-dependency-glob anchored to uv.lock.
Use Swatinem/rust-cache with explicit shared-key and workspaces instead of ad hoc target-directory caching.
Keep deploy and publish permissions isolated to only the jobs that require them; restrict pages: write and id-token: write to Pages deployment jobs and their reusable-workflow callers.
Use contents: read as the minimum permission for checkout-based build, test, documentation, and packaging jobs.
Grant pull-requests: read only to jobs that perform pull-request metadata lookups.
When using workflow_call, inspect both caller and callee, and ensure the caller grants every permission required by the called jobs because the callee cannot elevate permissions.
Keep local workflow commands aligned with equivalent justfile recipes, and keep Python, Rust, and documentation jobs aligned with their lockfiles.
Preserve intended concurrency settings, branch filters, and documentation publish guards when modifying workflows.
Before editing workflows, inspect workflow relationships and settings with searches covering uses:, permissions:, secrets:, concurrency:, cache, and just.

Files:

  • .github/workflows/fern-docs.yml
**/.github/workflows/fern-docs.{yml,yaml}

📄 CodeRabbit inference engine (.agents/skills/maintain-ci/SKILL.md)

Keep documentation publish and preview credentials isolated to the Fern documentation workflow and only to jobs that consume them.

Files:

  • .github/workflows/fern-docs.yml
🪛 ast-grep (0.44.1)
scripts/docs/sync_fern_docs_branch.py

[warning] 75-75: Do not make http calls without encryption
Context: "http://"
Note: [CWE-319] Cleartext Transmission of Sensitive Information.

(requests-http)

🪛 Ruff (0.15.21)
scripts/docs/sync_fern_docs_branch.py

[warning] 47-47: Dynamically typed expressions (typing.Any) are disallowed in read_yaml

(ANN401)


[warning] 52-52: Dynamically typed expressions (typing.Any) are disallowed in value

(ANN401)


[warning] 82-82: Dynamically typed expressions (typing.Any) are disallowed in value

(ANN401)


[warning] 82-82: Dynamically typed expressions (typing.Any) are disallowed in rewrite_doc_references

(ANN401)


[warning] 100-100: Avoid specifying long messages outside the exception class

(TRY003)


[warning] 104-104: Avoid specifying long messages outside the exception class

(TRY003)


[warning] 138-138: Avoid specifying long messages outside the exception class

(TRY003)


[warning] 150-150: Avoid specifying long messages outside the exception class

(TRY003)


[warning] 152-152: Avoid specifying long messages outside the exception class

(TRY003)


[warning] 209-209: Avoid specifying long messages outside the exception class

(TRY003)


[warning] 321-321: Avoid specifying long messages outside the exception class

(TRY003)

tests/scripts/test_sync_fern_docs_branch.py

[warning] 117-117: pytest.raises(ValueError) is too broad, set the match parameter or use a more specific exception

(PT011)

🪛 zizmor (1.26.1)
.github/workflows/fern-docs.yml

[warning] 65-65: permissions without explanatory comments (undocumented-permissions): needs an explanatory comment

(undocumented-permissions)


[error] 93-93: runtime artifacts potentially vulnerable to a cache poisoning attack (cache-poisoning): this step

(cache-poisoning)


[warning] 258-264: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[warning] 384-390: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[warning] 153-153: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[info] 153-153: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[info] 156-156: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[warning] 297-297: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[info] 399-399: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[info] 412-412: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[info] 412-412: code injection via template expansion (template-injection): may expand into attacker-controllable code

(template-injection)


[warning] 218-218: permissions without explanatory comments (undocumented-permissions): needs an explanatory comment

(undocumented-permissions)


[warning] 318-318: permissions without explanatory comments (undocumented-permissions): needs an explanatory comment

(undocumented-permissions)


[error] 181-181: runtime artifacts potentially vulnerable to a cache poisoning attack (cache-poisoning): this step

(cache-poisoning)


[error] 233-233: runtime artifacts potentially vulnerable to a cache poisoning attack (cache-poisoning): this step

(cache-poisoning)


[error] 246-246: runtime artifacts potentially vulnerable to a cache poisoning attack (cache-poisoning): this step

(cache-poisoning)


[error] 359-359: runtime artifacts potentially vulnerable to a cache poisoning attack (cache-poisoning): this step

(cache-poisoning)


[error] 372-372: runtime artifacts potentially vulnerable to a cache poisoning attack (cache-poisoning): this step

(cache-poisoning)

🔇 Additional comments (7)
justfile (1)

326-327: LGTM!

pyproject.toml (1)

112-112: LGTM!

docs/about-nemo-fabric/overview.mdx (1)

121-122: LGTM!

docs/sdk/python.mdx (1)

23-23: LGTM!

.github/ci-path-filters.yml (1)

1-20: LGTM!

.github/workflows/fern-docs.yml (2)

11-23: LGTM!

Also applies to: 28-50, 67-98, 105-119, 132-140, 203-305, 307-391, 400-423


392-399: 🩺 Stability & Availability

Run the sync step from the workflow checkout.
source-checkout/.venv/bin/python ties this backfill to the selected tag’s environment; if that release is missing the current yaml dependency, the snapshot step will fail before it writes the docs branch. uv run --locked python scripts/docs/sync_fern_docs_branch.py release-version keeps it on the workflow toolchain.

Comment thread .github/workflows/fern-docs.yml
Comment thread .github/workflows/fern-docs.yml
Comment thread .github/workflows/fern-docs.yml
Comment thread .github/workflows/fern-docs.yml Outdated
Comment thread .github/workflows/fern-docs.yml
Comment thread scripts/docs/sync_fern_docs_branch.py
Comment thread scripts/docs/sync_fern_docs_branch.py
Signed-off-by: David Gardner <dagardner@nvidia.com>
@github-actions

Copy link
Copy Markdown

Comment thread docs/sdk/python.mdx Outdated
Signed-off-by: David Gardner <dagardner@nvidia.com>
@dagardner-nv

Copy link
Copy Markdown
Collaborator Author

/merge

@rapids-bot
rapids-bot Bot merged commit 8000f5f into NVIDIA:main Jul 20, 2026
21 checks passed
@dagardner-nv
dagardner-nv deleted the david-sync-docs branch July 20, 2026 17:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants