Skip to content

refactor: slim adapter runtime dependencies#105

Open
zhongxuanwang-nv wants to merge 1 commit into
mainfrom
refactor/slim-adapter-dependencies
Open

refactor: slim adapter runtime dependencies#105
zhongxuanwang-nv wants to merge 1 commit into
mainfrom
refactor/slim-adapter-dependencies

Conversation

@zhongxuanwang-nv

@zhongxuanwang-nv zhongxuanwang-nv commented Jul 23, 2026

Copy link
Copy Markdown
Member

Overview

Slims the published Python adapter dependency boundary so each adapter wheel
declares only the runtime packages it owns. Wrapped harness packages move to the
existing root claude, codex, and deepagents extras and to a non-default
adapter-tests dependency group used by repository tests.

The existing root extras keep their prior complete-install behavior; no new
public extra is introduced. The intentional hermes/hermes-agent split
remains unchanged. The resolved package set and licenses are unchanged, and
adapter runtime behavior is unchanged.

This is rebased on latest main (a2d9f1c), including the merged docs
refactor from #103 and example hardening from #113.

Details

  • Remove Claude Agent SDK, Codex SDK, Deep Agents/LangChain/LangGraph, and
    Hermes-provided PyYAML from adapter runtime requirements.
  • Keep adapter-owned integrations and the common adapter package in the
    published wheel metadata.
  • Make the Deep Agents Relay extra depend on base Relay while the host
    environment supplies the harness stack.
  • Preserve complete installs through the existing root extras.
  • Add a focused package-metadata test and local test-group wiring.
  • Update only installation claims and the Harbor image path made inaccurate by
    the new boundary.
  • Update the maintainer adapter skill so future adapters follow the same
    ownership rule.

Validation

  • just lock-python
  • Focused adapter/package tests — 147 passed, 23 skipped
  • Focused Harbor install-contract test — passed
  • just test-python after rebasing — 425 passed, 44 skipped
  • just build-python
  • cargo check -p fabric-python --locked
  • just wheels plus root and adapter wheel Requires-Dist inspection
  • just docs — passed; generated API references were reviewed and excluded
    from this packaging diff, with Rust remaining at 1.96.1 locally
  • License diff — no Rust or Python package/license changes
  • Rust and Python attribution hooks
  • uv run pre-commit run --all-files
  • just --fmt --check and git diff --check

Where should the reviewer start?

Start with pyproject.toml, the four adapter pyproject.toml files, and
tests/adapters/test_adapter_package_metadata.py. Then review the corresponding
built-wheel dependency boundary and the one-line justfile test-group wiring.

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

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

The change separates adapter-owned dependencies from harness-owned SDKs, adds explicit Claude Agent and adapter test dependency groups, updates installation guidance across adapters and documentation, and adjusts Harbor, notebook, Relay, CI, and metadata checks to validate the revised contract.

Changes

Adapter dependency and compatibility contracts

Layer / File(s) Summary
Dependency manifests and metadata validation
.agents/skills/..., adapters/*/pyproject.toml, pyproject.toml, tests/adapters/*, .github/workflows/*, justfile
Adapter packages no longer declare harness-owned dependencies; root extras and the adapter-tests group provide harness packages, with tests validating exact dependency boundaries.
Installation and harness guidance
README.md, adapters/*/README.md, docs/..., pypi.md, examples/...
Documentation and examples distinguish adapter-only, separate-environment, and co-located installations, including explicit Claude, Codex, Deep Agents, and Hermes harness requirements.
Integration environment and contract checks
adapters/deepagents/src/..., examples/harbor/..., tests/adapters/..., tests/integrations/...
Deep Agents diagnostics, Harbor setup, Relay imports, and integration assertions are updated for the revised adapter and harness contract.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 40.74% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
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.
Title check ✅ Passed The title follows Conventional Commits and accurately summarizes the main dependency-boundary refactor.
Description check ✅ Passed The description matches the required template with Overview, Details, Validation, reviewer start, and related issues sections.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/slim-adapter-dependencies

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: 4

Caution

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

⚠️ Outside diff range comments (1)
pypi.md (1)

28-36: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Tell readers to choose one adapter extra.

The block presents four commands without stating that they are alternatives. Copying the block installs every adapter, which defeats the minimal adapter-installation boundary described immediately afterward.

Suggested wording
-When the runtime and adapter share an environment, install a short adapter
-extra:
+When the runtime and adapter share an environment, choose one short adapter
+extra:
🤖 Prompt for 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.

In `@pypi.md` around lines 28 - 36, Update the adapter installation instructions
in the “When the runtime and adapter share an environment” section to explicitly
tell readers to choose exactly one adapter extra, clarifying that the four pip
commands are alternatives and preventing installation of all adapters together.
🤖 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 `@adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py`:
- Around line 139-141: Update the adapter’s dependency guard around the existing
Deep Agents availability check to validate that deepagents, langchain, and
langgraph are all installed and satisfy the versions advertised in the error
message. Keep the diagnostic tied to the combined compatibility check so agent
creation is not reached when any dependency is missing or incompatible.

In `@adapters/hermes/README.md`:
- Around line 12-16: Update the installation instructions near the “pip install
nemo-fabric-adapters-hermes” command to also install the compatible hermes-agent
harness version, or link to the required harness setup, so a fresh environment
can start the adapter under the separate adapter-and-harness installation
contract.

In `@examples/notebooks/README.md`:
- Around line 28-34: Update the “Deep Agents, Codex, Claude” installation
instructions in the notebooks README so the Codex credentials are presented as
alternatives: users may authenticate with an existing Codex/ChatGPT login or
provide OPENAI_API_KEY, rather than requiring both. Keep the Deep Agents and
Claude credential requirements unchanged.

In `@tests/adapters/test_deepagents.py`:
- Line 490: Update the pytest.raises match patterns near the affected tests to
use raw regex literals, including both occurrences of the
“nemo-relay.*deepagents” pattern, so Ruff RUF043 is satisfied while preserving
the intended regex matching behavior.

---

Outside diff comments:
In `@pypi.md`:
- Around line 28-36: Update the adapter installation instructions in the “When
the runtime and adapter share an environment” section to explicitly tell readers
to choose exactly one adapter extra, clarifying that the four pip commands are
alternatives and preventing installation of all adapters together.
🪄 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: 0ba68397-a238-4bb9-be18-c1fba54d3f3b

📥 Commits

Reviewing files that changed from the base of the PR and between 5d71914 and 8300529.

⛔ Files ignored due to path filters (5)
  • adapters/claude/uv.lock is excluded by !**/*.lock
  • adapters/codex/uv.lock is excluded by !**/*.lock
  • adapters/deepagents/uv.lock is excluded by !**/*.lock
  • adapters/hermes/uv.lock is excluded by !**/*.lock
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (23)
  • README.md
  • adapters/claude/README.md
  • adapters/claude/pyproject.toml
  • adapters/codex/README.md
  • adapters/codex/pyproject.toml
  • adapters/deepagents/README.md
  • adapters/deepagents/pyproject.toml
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/README.md
  • adapters/hermes/pyproject.toml
  • docs/experimentation/cli.mdx
  • docs/getting-started/install.mdx
  • docs/integrations/claude.mdx
  • examples/code_review_agent/README.md
  • examples/harbor/calculator/task/environment/Dockerfile
  • examples/harbor/prepare_swebench.sh
  • examples/notebooks/02_variations.ipynb
  • examples/notebooks/README.md
  • pypi.md
  • pyproject.toml
  • tests/adapters/test_adapter_package_metadata.py
  • tests/adapters/test_deepagents.py
  • tests/integrations/test_harbor_runner.py
💤 Files with no reviewable changes (3)
  • adapters/claude/pyproject.toml
  • adapters/hermes/pyproject.toml
  • adapters/codex/pyproject.toml
📜 Review details
⏰ Context from checks skipped due to timeout. (15)
  • GitHub Check: Preview docs
  • GitHub Check: Test (Python 3.12, windows-amd64)
  • GitHub Check: Test (Python 3.13, windows-amd64)
  • GitHub Check: Test (Python 3.14, windows-amd64)
  • GitHub Check: Test (Python 3.11, windows-amd64)
  • GitHub Check: Test (Python 3.12, linux-arm64)
  • GitHub Check: Test (Python 3.13, linux-amd64)
  • GitHub Check: Test (Python 3.12, macos-arm64)
  • GitHub Check: Test (Python 3.13, linux-arm64)
  • GitHub Check: Test (Python 3.13, macos-arm64)
  • GitHub Check: Test (Python 3.11, macos-arm64)
  • GitHub Check: Test (Python 3.14, macos-arm64)
  • GitHub Check: Test (Python 3.11, linux-amd64)
  • GitHub Check: Test (Python 3.12, linux-amd64)
  • GitHub Check: Pre-commit
🧰 Additional context used
📓 Path-based instructions (41)
**/*.{md,rst}

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

Update documentation and examples in the same branch as the public API change.

Files:

  • examples/code_review_agent/README.md
  • examples/notebooks/README.md
  • pypi.md
  • adapters/hermes/README.md
  • adapters/deepagents/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
  • README.md
{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:

  • examples/code_review_agent/README.md
  • docs/integrations/claude.mdx
  • examples/notebooks/README.md
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
  • README.md
{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:

  • examples/code_review_agent/README.md
  • docs/integrations/claude.mdx
  • examples/notebooks/README.md
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
**/*

📄 CodeRabbit inference engine (.agents/skills/karpathy-guidelines/SKILL.md)

**/*: 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.

**/*: Always spell NVIDIA in all caps; do not use Nvidia, nvidia, nVidia, nVIDIA, or NV.
Use an NVIDIA before a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol after NVIDIA when referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names with NVIDIA on first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...

Files:

  • examples/code_review_agent/README.md
  • examples/harbor/prepare_swebench.sh
  • docs/integrations/claude.mdx
  • examples/harbor/calculator/task/environment/Dockerfile
  • examples/notebooks/README.md
  • docs/getting-started/install.mdx
  • pypi.md
  • pyproject.toml
  • docs/experimentation/cli.mdx
  • adapters/hermes/README.md
  • tests/adapters/test_adapter_package_metadata.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/deepagents/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
  • tests/adapters/test_deepagents.py
  • examples/notebooks/02_variations.ipynb
  • README.md
  • adapters/deepagents/pyproject.toml
  • tests/integrations/test_harbor_runner.py
**/*.{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:

  • examples/code_review_agent/README.md
  • docs/integrations/claude.mdx
  • examples/notebooks/README.md
  • docs/getting-started/install.mdx
  • pypi.md
  • docs/experimentation/cli.mdx
  • adapters/hermes/README.md
  • adapters/deepagents/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
  • README.md
**/*.{md,rst,txt,adoc}

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

**/*.{md,rst,txt,adoc}: For technical documentation, use professional, active, conversational, engaging, precise, and plain-English prose. Prefer active voice, present tense, short sentences, and scannable paragraphs. Avoid casual or imprecise language, swearing, threats, insults, jokes, puns, culture-specific idioms, marketing exaggeration, and unsupported third-party comparisons.
Use can for possibility and reserve may for permission; use after for temporal order; use refer to for cross-references; prefer short direct sentences and specific verbs; avoid unnecessary please in technical documentation.
Prefer active voice when the actor matters. Passive voice is acceptable when the actor is unknown or irrelevant, when the action or result is the focus, or in programmer documentation.
Use natural contractions in conversational technical prose, but do not force them in formal legal copy, API references, or generated text.
Prefer simpler English over Latinisms: use for example or such as instead of e.g., and so on instead of etc., that is instead of i.e., compared to instead of vs., and by, through, or using instead of via. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Use that without commas for essential clauses, and which with commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such as June 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space before a.m. or p.m.; use ET and PT for needed time zones; avoid 24/7; and prefer from 12:30 to 1:00 p.m. for prose ranges.
Format numbers consistently: spell out zero through nine in body text, use numerals for 10 or greater and for technical values, use commas in thousands, do not begin a sentence with a numeral, spell out ordinals, and use numerals consistently within a category wh...

Files:

  • examples/code_review_agent/README.md
  • examples/notebooks/README.md
  • pypi.md
  • adapters/hermes/README.md
  • adapters/deepagents/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
  • README.md
**/README.md

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)

Update relevant package, crate, adapter, and integration README files when public behavior or entry-point documentation changes.

Files:

  • examples/code_review_agent/README.md
  • examples/notebooks/README.md
  • adapters/hermes/README.md
  • adapters/deepagents/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
  • README.md
**/*.{md,mdx}

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)

**/*.{md,mdx}: Use the full product name NVIDIA NeMo Fabric on its first usage, typically in the title or H1; use NeMo Fabric thereafter.
Use fabric by itself only when referring to the CLI tool, and surround those references with backticks.
Capitalize NVIDIA correctly in public documentation.
Format commands, code elements, expressions, file names, paths, and filenames as inline code where needed.
Use title case consistently for headings in technical documentation.
Introduce code blocks, tables, and lists with complete lead-in sentences.
Use descriptive anchor text instead of raw URLs or generic link text such as here.
Prefer active voice, present tense, short sentences, and plain English.
Use consistent terminology for the same concept throughout a document.
Write procedures as imperative, parallel, easy-to-scan steps, and split long sequences into smaller tasks.
Use after instead of once when expressing temporal sequence.
Use can instead of may when the intended meaning is possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
For learning-oriented documentation, do not force trademark symbols unless the source document explicitly requires them.
Introduce examples' code blocks with full sentences and ensure examples match current APIs and build commands.

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

Files:

  • examples/code_review_agent/README.md
  • docs/integrations/claude.mdx
  • examples/notebooks/README.md
  • docs/getting-started/install.mdx
  • pypi.md
  • docs/experimentation/cli.mdx
  • adapters/hermes/README.md
  • adapters/deepagents/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
  • README.md
**/{README.md,*.md,*.mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Update relevant SDK, API, adapter, example, integration, and embedded documentation when public behavior or the corresponding surface changes.

Files:

  • examples/code_review_agent/README.md
  • docs/integrations/claude.mdx
  • examples/notebooks/README.md
  • docs/getting-started/install.mdx
  • pypi.md
  • docs/experimentation/cli.mdx
  • adapters/hermes/README.md
  • adapters/deepagents/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
  • README.md
**/*.{html,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

HTML and Markdown files must use the specified HTML comment form for SPDX license headers.

Files:

  • examples/code_review_agent/README.md
  • examples/notebooks/README.md
  • pypi.md
  • adapters/hermes/README.md
  • adapters/deepagents/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
  • README.md
{adapters/**,examples/**}

⚙️ CodeRabbit configuration file

{adapters/**,examples/**}: Review adapter and example changes for command correctness, config/schema consistency, artifact handling, and compatibility with the public NeMo Fabric contracts.

Files:

  • examples/code_review_agent/README.md
  • examples/harbor/prepare_swebench.sh
  • examples/harbor/calculator/task/environment/Dockerfile
  • examples/notebooks/README.md
  • adapters/hermes/README.md
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/deepagents/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
  • examples/notebooks/02_variations.ipynb
  • adapters/deepagents/pyproject.toml
{*.md,**/*.md,**/*.mdx,**/*.ipynb}

⚙️ CodeRabbit configuration file

{*.md,**/*.md,**/*.mdx,**/*.ipynb}: Enforce the product name in user-facing prose: use "NVIDIA NeMo Fabric" on first use and "NeMo Fabric" thereafter. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag the lowercase fabric CLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.

Files:

  • examples/code_review_agent/README.md
  • docs/integrations/claude.mdx
  • examples/notebooks/README.md
  • docs/getting-started/install.mdx
  • pypi.md
  • docs/experimentation/cli.mdx
  • adapters/hermes/README.md
  • adapters/deepagents/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
  • examples/notebooks/02_variations.ipynb
  • README.md
**/*.{toml,yml,yaml,sh,bash}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

TOML, YAML, and shell files must use the specified #-comment SPDX license header.

Files:

  • examples/harbor/prepare_swebench.sh
  • pyproject.toml
  • adapters/deepagents/pyproject.toml
**/*.mdx

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

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

Use {/* ... */} delimiters for top-of-file MDX SPDX comments, not HTML comment delimiters.

MDX files must use a JSX comment for the SPDX license header.

Files:

  • docs/integrations/claude.mdx
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
docs/**/*.{md,mdx,yml}

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

Run just docs when the documentation site changes.

Files:

  • docs/integrations/claude.mdx
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
docs/**/*

📄 CodeRabbit inference engine (AGENTS.md)

Update Fern documentation under docs/ when public behavior, the nemo-fabric package, examples, or supported bindings change.

Files:

  • docs/integrations/claude.mdx
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.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/integrations/claude.mdx
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
  • README.md
{Cargo.toml,python/pyproject.toml,pyproject.toml}

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

Keep Rust workspace/package metadata and Python/maturin package metadata internally consistent, including package names, versions, import paths, and module names.

Files:

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

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

{Cargo.toml,Cargo.lock,pyproject.toml,uv.lock,python/pyproject.toml}: Keep workspace, Python, and lockfile dependency versions aligned where required, and review both direct and transitive dependency changes from resolved lockfiles.
Inspect resolved transitive licenses, explicitly surface UNKNOWN, non-SPDX/custom, proprietary, source-available, copyleft, or network-copyleft terms, and route unresolved licensing questions to dependency approvers with distribution and linkage context.
Document the functional need, alternatives considered, rationale for the selected dependency, and any unresolved licensing question when introducing dependencies.

Files:

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

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

Before adding a dependency, prefer the standard library, an existing dependency, or a small local implementation when appropriate; otherwise select a maintained, narrow-fit dependency with clear SPDX metadata and a permissive license where possible.

Files:

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

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

After updating manifests or lockfiles, run uv run --no-project python scripts/licensing/license_diff.py --base-ref origin/main and review added packages and license changes.

Files:

  • pyproject.toml
{pyproject.toml,python/pyproject.toml,Cargo.toml,docs/package.json,.github/workflows/*.yml,justfile}

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

Reflect public packaging changes in release-facing documentation and ensure CI references the same package names and commands used by local workflows.

Files:

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

📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)

For any Rust change, run just test-rust and cargo fmt --all -- --check.

For Rust core, CLI, or shared runtime semantic changes, run Rust formatting and tests, and add Python tests when behavior is exposed through the SDK.

Use Rust stable tooling; format Rust code with cargo fmt --all, check formatting with cargo fmt --all -- --check, and compile with cargo check --workspace --locked.

Files:

  • pyproject.toml
  • adapters/deepagents/pyproject.toml
**/{Cargo.toml,Cargo.lock,pyproject.toml,package.json}

📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)

For new or updated dependencies, document the functional need, alternatives considered, and why the selected dependency is the narrowest fit.

Files:

  • pyproject.toml
  • adapters/deepagents/pyproject.toml
**/*.{toml,lock}

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

If a manifest or lockfile changes, run the license-diff script against origin/main, review transitive license changes, and run the attributions-rust and attributions-python pre-commit hooks.

Files:

  • pyproject.toml
  • adapters/deepagents/pyproject.toml
**/*.{yml,yaml,toml,lock}

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

For CI or packaging changes, use maintain-ci or maintain-packaging, then run recipes and checks whose behavior changed.

Files:

  • pyproject.toml
  • adapters/deepagents/pyproject.toml
{pyproject.toml,adapters/**/pyproject.toml}

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

{pyproject.toml,adapters/**/pyproject.toml}: Update the literal project.version in the root setuptools project and every adapter pyproject.toml.
Keep internal exact-version requirements aligned: root nemo-fabric-* == <version> optional dependencies and each adapter's nemo-fabric-adapters-common == <version> dependency.

Files:

  • pyproject.toml
  • adapters/deepagents/pyproject.toml
**/*.{rs,py,toml}

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

When editing version helpers, verify every nemo-fabric-* workspace package through Cargo metadata and reject a static version in python/pyproject.toml.

Files:

  • pyproject.toml
  • tests/adapters/test_adapter_package_metadata.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/pyproject.toml
  • tests/integrations/test_harbor_runner.py
**/*.{toml,rs,py}

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

Avoid blind repository-wide replacement of version-like strings; distinguish package-version references from examples and unrelated dependency versions.

Files:

  • pyproject.toml
  • tests/adapters/test_adapter_package_metadata.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/pyproject.toml
  • tests/integrations/test_harbor_runner.py
adapters/*/README.md

📄 CodeRabbit inference engine (AGENTS.md)

Update adapter README files when public behavior, examples, or supported bindings change.

Files:

  • adapters/hermes/README.md
  • adapters/deepagents/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
**/*.{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:

  • tests/adapters/test_adapter_package_metadata.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/adapters/test_deepagents.py
  • tests/integrations/test_harbor_runner.py
**/*.{rs,py}

📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)

For native binding changes, run cargo check -p fabric-python --locked.

Files:

  • tests/adapters/test_adapter_package_metadata.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/adapters/test_deepagents.py
  • tests/integrations/test_harbor_runner.py
**/*.{py,pyi}

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

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

Use type annotations for public Python APIs and keep native Python binding declarations synchronized with their Rust implementations.

Files:

  • tests/adapters/test_adapter_package_metadata.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/adapters/test_deepagents.py
  • tests/integrations/test_harbor_runner.py
**/*.{rs,py,pyi}

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

**/*.{rs,py,pyi}: If public configuration types change, confirm schema snapshot tests in just test-rust pass and review generated schema diffs.
For schema or public contract changes, run both language suites and review changes under schemas/ and generated API references.

**/*.{rs,py,pyi}: Use snake_case for Rust and Python functions and variables; use PascalCase for Rust types and Python classes.
Keep native Python binding declarations synchronized with their Rust implementations when public contracts change.

Files:

  • tests/adapters/test_adapter_package_metadata.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/adapters/test_deepagents.py
  • tests/integrations/test_harbor_runner.py
tests/adapters/**/*.py

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

tests/adapters/**/*.py: If an adapter or integration changes, run its focused tests.
For adapter behavior changes, run focused adapter tests under tests/adapters, then run just test-python.

Files:

  • tests/adapters/test_adapter_package_metadata.py
  • tests/adapters/test_deepagents.py
**/*.{py,pyi,rs}

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

For Python SDK or PyO3 binding changes, use python-tests, run focused pytest tests first, then just test-python; rebuild with just build-python when native code or packaging changes.

Files:

  • tests/adapters/test_adapter_package_metadata.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/adapters/test_deepagents.py
  • tests/integrations/test_harbor_runner.py
tests/**/*.{rs,py}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

When adding functionality, include tests in the corresponding Rust crate or the relevant area under tests/.

Files:

  • tests/adapters/test_adapter_package_metadata.py
  • tests/adapters/test_deepagents.py
  • tests/integrations/test_harbor_runner.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 and run by the async runner.
Do not add -> None return type annotations to test functions.
When mocking a class, use unittest.mock.MagicMock or unittest.mock.AsyncMock, using the spec argument when necessary, rather than defining a new class.
Prefix mocked class names with mock, not fake.
Prefer pytest fixtures over helper methods.
Do not repeat fixtures; place fixtures needed by multiple test files in conftest.py.
Define fixtures using @pytest.fixture(name="<fixture_name>"[, scope="<scope>"]) and a function named <fixture_name>_fixture; 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 or it does not return a value.
Use the autouse restore_environ_fixture from tests/conftest.py to restore environment variables; modify variables with os.environ and do not use monkeypatch.setenv.
Avoid defensive programming in tests; access expected data directly so missing data raises a clear failure, such as using results["data"] instead of results.get("data").

Files:

  • tests/adapters/test_adapter_package_metadata.py
  • tests/adapters/test_deepagents.py
  • tests/integrations/test_harbor_runner.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/adapters/test_adapter_package_metadata.py
  • tests/adapters/test_deepagents.py
  • tests/integrations/test_harbor_runner.py
{README.md,docs/index.yml}

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

Update README.md or docs/index.yml when documentation entry points or example reading paths change.

Files:

  • README.md
README.md

📄 CodeRabbit inference engine (AGENTS.md)

Update the root README.md when public behavior, the nemo-fabric package, examples, or supported bindings change.

Update the top-level README.md when changed behavior affects an entry point users would naturally consult.

Update the root README.md when workspace structure, supported adapters, or top-level documentation changes.

Files:

  • README.md
🧠 Learnings (1)
📚 Learning: 2026-07-09T22:28:51.689Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 43
File: adapters/claude-sdk/src/nemo_fabric_adapters/claude_sdk/adapter.py:164-168
Timestamp: 2026-07-09T22:28:51.689Z
Learning: In the NeMo-Fabric adapters, treat path values used in Fabric adapter configuration (including logic like `_resolve_path` in adapter.py) as config-root-relative. Do not apply `Path.expanduser()` (or otherwise apply `~`/home or shell-style expansion), because it will make the resolved paths normalize inconsistently across adapters. Also, do not rely on or add any resolution behavior that uses `harness.settings.cwd` as an override point for these adapter paths—`harness.settings.cwd` is explicitly unsupported in this adapter context.

Applied to files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
🪛 Ruff (0.15.21)
tests/adapters/test_deepagents.py

[warning] 490-490: Pattern passed to match= contains metacharacters but is neither escaped nor raw

(RUF043)


[warning] 512-512: Pattern passed to match= contains metacharacters but is neither escaped nor raw

(RUF043)

🔇 Additional comments (21)
adapters/deepagents/pyproject.toml (2)

29-34: LGTM!


36-46: LGTM!

pyproject.toml (1)

48-52: LGTM!

Also applies to: 93-102, 133-133

tests/adapters/test_adapter_package_metadata.py (1)

1-79: LGTM!

README.md (1)

140-143: LGTM!

Also applies to: 158-158, 176-181

adapters/claude/README.md (1)

12-15: LGTM!

Also applies to: 17-42, 153-155

adapters/codex/README.md (1)

10-13: LGTM!

Also applies to: 15-33, 71-74

adapters/deepagents/README.md (1)

12-34: LGTM!

Also applies to: 153-167

adapters/hermes/README.md (1)

18-29: LGTM!

docs/experimentation/cli.mdx (1)

188-192: LGTM!

docs/getting-started/install.mdx (1)

32-35: LGTM!

Also applies to: 48-68

docs/integrations/claude.mdx (1)

13-16: LGTM!

examples/code_review_agent/README.md (1)

62-62: LGTM!

examples/notebooks/02_variations.ipynb (1)

203-204: LGTM!

Also applies to: 206-209, 210-214

pypi.md (1)

38-58: LGTM!

adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)

754-755: LGTM!

tests/adapters/test_deepagents.py (2)

309-319: LGTM!


322-325: 🎯 Functional Correctness

No issue here. fake_relay installs nemo_relay and nemo_relay.integrations as plain modules without a package path, so removing only nemo_relay.integrations.deepagents still leaves the later test on the missing-integration path.

			> Likely an incorrect or invalid review comment.
examples/harbor/calculator/task/environment/Dockerfile (1)

18-18: LGTM!

examples/harbor/prepare_swebench.sh (1)

67-67: LGTM!

tests/integrations/test_harbor_runner.py (1)

20-20: LGTM!

Also applies to: 257-265

Comment thread adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py Outdated
Comment thread adapters/hermes/README.md Outdated
Comment thread examples/notebooks/README.md Outdated
Comment thread tests/adapters/test_deepagents.py Outdated

@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: 3

🤖 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 `@adapters/deepagents/README.md`:
- Around line 54-58: Update the installation guidance around the “nemo-fabric
doctor” reference in the adapter README to state that the command requires the
NeMo Fabric Runtime installation, or place the runtime installation step before
invoking it. Keep the adapter-only installation instructions accurate and
preserve the existing doctor validation purpose.

In `@docs/reference/api/python-library-reference/nemo_fabric.client.md`:
- Line 4: Update scripts/generate_api_docs.sh lines 70-80 so the client and
models descriptions start with “NVIDIA NeMo Fabric”; update the module docstring
in python/src/nemo_fabric/runtime.py line 4 to start with the same wording, then
regenerate the affected API Markdown pages:
docs/reference/api/python-library-reference/nemo_fabric.client.md line 4,
nemo_fabric.models.md line 4, and nemo_fabric.runtime.md line 10.

In `@tests/adapters/test_adapters_common_relay_gateway.py`:
- Around line 82-84: Update the pytest.raises matcher in the RelayGatewayError
test to escape the literal periods in both version numbers, preserving the
intended “NeMo Fabric requires >=0.6.0,<0.7.0” message match and satisfying Ruff
RUF043.
🪄 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: 0f9d08d2-bb83-48a2-81fc-26bfd80842aa

📥 Commits

Reviewing files that changed from the base of the PR and between a0e3985 and 85c60e9.

⛔ Files ignored due to path filters (2)
  • examples/notebooks/img/fabric-contract.svg is excluded by !**/*.svg
  • examples/notebooks/img/variations.svg is excluded by !**/*.svg
📒 Files selected for processing (99)
  • .agents/skills/contribute-docs/SKILL.md
  • .agents/skills/prepare-pr/SKILL.md
  • .agents/skills/review-doc-style/SKILL.md
  • .agents/skills/review-doc-style/assets/nvidia-style-guide.md
  • .coderabbit.yaml
  • AGENTS.md
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/__init__.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • adapters/common/src/nemo_fabric_adapters/common/relay_gateway.py
  • adapters/deepagents/README.md
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/README.md
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • crates/fabric-cli/src/app.rs
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/doctor.rs
  • crates/fabric-core/src/error.rs
  • crates/fabric-core/src/runtime.rs
  • crates/fabric-core/src/schema.rs
  • crates/fabric-python/src/lib.rs
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-controllocation.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/enum-errorstage.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/fn-run-plan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-environmenthandle.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-errorinfo.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-fabricevent.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runrequest.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runresult.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimehandle.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimetelemetrycontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdx
  • examples/code_review_agent/config.py
  • examples/harbor/calculator/task/task.toml
  • examples/harbor/prepare_swebench.sh
  • justfile
  • python/src/nemo_fabric/client.py
  • python/src/nemo_fabric/errors.py
  • python/src/nemo_fabric/integrations/harbor/fabric_agent.py
  • python/src/nemo_fabric/integrations/harbor/models.py
  • python/src/nemo_fabric/integrations/harbor/runner.py
  • python/src/nemo_fabric/integrations/harbor/telemetry.py
  • python/src/nemo_fabric/models.py
  • python/src/nemo_fabric/runtime.py
  • python/src/nemo_fabric/types.py
  • schemas/adapter-descriptor.schema.json
  • schemas/adapter-invocation.schema.json
  • schemas/agent.schema.json
  • schemas/environment-handle.schema.json
  • schemas/error-info.schema.json
  • schemas/fabric-event.schema.json
  • schemas/run-plan.schema.json
  • schemas/run-request.schema.json
  • schemas/run-result.schema.json
  • schemas/runtime-context.schema.json
  • schemas/runtime-handle.schema.json
  • tests/_utils/configs.py
  • tests/adapters/test_adapters_common_relay_gateway.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_codex.py
  • tests/e2e/test_harbor_swebench_task.py
  • tests/e2e/test_hermes_config_mapping.py
  • tests/e2e/test_hermes_runtime.py
  • tests/e2e/test_swebench_style.py
  • tests/integrations/test_harbor_runner.py
  • tests/python/test_sdk_concurrency.py
  • tests/python/test_sdk_contract.py
  • tests/python/test_typed_config.py

Comment thread adapters/deepagents/README.md
Comment thread docs/reference/api/python-library-reference/nemo_fabric.client.md
Comment thread tests/adapters/test_adapters_common_relay_gateway.py

@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: 1

Caution

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

⚠️ Outside diff range comments (4)
.agents/skills/review-doc-style/SKILL.md (1)

60-62: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Make the shell example runnable.

<changed-files> is parsed as shell redirection, so copying this command literally produces a shell syntax error. Use a concrete path list or a shell-safe variable, for example:

git diff --unified=0 -- . \
  | rg --pcre2 '^\+(?!\+\+).*?(?<!NeMo )\bFabric\b'

As per coding guidelines, documentation commands must remain current and usable.

🤖 Prompt for 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.

In @.agents/skills/review-doc-style/SKILL.md around lines 60 - 62, Update the
shell command in the documentation to replace the placeholder <changed-files>
with a shell-safe path argument, such as ., while preserving the existing git
diff and rg filtering behavior so the example can be copied and run directly.

Source: Coding guidelines

adapters/deepagents/README.md (2)

30-35: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Clarify that the harness install is still required with the combined command.

The adapter-only path above explicitly notes the harness is not bundled, but this combined-install snippet doesn't repeat that. A reader who skips straight to pip install "nemo-fabric[deepagents]" could reasonably assume the harness is now included.

Proposed wording
 To install the NeMo Fabric Runtime and Deep Agents adapter in the same
 environment:

 ```bash
 pip install "nemo-fabric[deepagents]"

+This still does not install deepagents, langchain, or langgraph; install
+the compatible harness versions shown above in the same environment.


</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @adapters/deepagents/README.md around lines 30 - 35, Update the
combined-install section adjacent to the pip install "nemo-fabric[deepagents]"
command to state that it does not install deepagents, langchain, or
langgraph. Direct readers to install the compatible harness versions specified
earlier in the README within the same environment.


</details>

<!-- cr-comment:v1:7eb87a7db7bf22013b4bedb1 -->

---

`165-168`: _📐 Maintainability & Code Quality_ | _🔵 Trivial_ | _⚡ Quick win_

**Reword the conditional `relay` extra explanation for clarity.**

"If the host environment constrains the Deep Agents and LangGraph stack independently, the adapter's `relay` extra is a minimal shorthand..." — the `if` clause doesn't clearly gate the statement about what the extra installs. This reads as two unrelated ideas stitched together.

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @adapters/deepagents/README.md around lines 165 - 168, Reword the paragraph
describing the adapter’s relay extra so its purpose and installation behavior
are stated directly, without making the explanation conditional on independently
constrained Deep Agents and LangGraph dependencies. Preserve the detail that the
extra installs only the base nemo-relay package.


</details>

<!-- cr-comment:v1:b2ca34316338713e0f83cd0c -->

</blockquote></details>
<details>
<summary>pypi.md (1)</summary><blockquote>

`41-48`: _📐 Maintainability & Code Quality_ | _🔵 Trivial_ | _⚡ Quick win_

**Separate the co-located vs. separate-environment install scenarios explicitly.**

This paragraph blends two installation scenarios (harness co-located with the adapter vs. harness in its own environment) into one run-on set of sentences, and doesn't state that the harness package itself must also be installed alongside `nemo-fabric-adapters-*` in the separate-environment case.

<details>
<summary>Proposed rewording</summary>

```diff
-Install a compatible harness separately in the same virtual environment as the
-adapter. If the harness environment is separate from the NeMo Fabric runtime,
-install the corresponding `nemo-fabric-adapters-*` distribution directly in the
-harness environment. Refer to the
-[adapter compatibility reference](https://github.com/NVIDIA/NeMo-Fabric/tree/main/adapters)
-for package names and harness installation instructions.
+- **Co-located:** install a compatible harness separately in the same virtual
+  environment as the adapter.
+- **Separate environment:** install the corresponding `nemo-fabric-adapters-*`
+  distribution, plus the compatible harness itself, directly in the harness
+  environment. Refer to the
+  [adapter compatibility reference](https://github.com/NVIDIA/NeMo-Fabric/tree/main/adapters)
+  for package names and harness installation instructions.
🤖 Prompt for 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.

In `@pypi.md` around lines 41 - 48, Revise the installation guidance in pypi.md to
explicitly separate the co-located harness-and-adapter scenario from the
separate-environment scenario. State that co-located setups install a compatible
harness in the adapter environment, while separate setups require installing
both the harness package and the corresponding nemo-fabric-adapters-*
distribution in the harness environment, preserving the existing
compatibility-reference link.
🤖 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 `@python/src/nemo_fabric/errors.py`:
- Line 4: Update the module docstrings in python/src/nemo_fabric/errors.py at
lines 4-4 and python/src/nemo_fabric/types.py at lines 4-4 to use the short
product name “NeMo Fabric” instead of “NVIDIA NeMo Fabric.”

---

Outside diff comments:
In @.agents/skills/review-doc-style/SKILL.md:
- Around line 60-62: Update the shell command in the documentation to replace
the placeholder <changed-files> with a shell-safe path argument, such as .,
while preserving the existing git diff and rg filtering behavior so the example
can be copied and run directly.

In `@adapters/deepagents/README.md`:
- Around line 30-35: Update the combined-install section adjacent to the `pip
install "nemo-fabric[deepagents]"` command to state that it does not install
`deepagents`, `langchain`, or `langgraph`. Direct readers to install the
compatible harness versions specified earlier in the README within the same
environment.
- Around line 165-168: Reword the paragraph describing the adapter’s `relay`
extra so its purpose and installation behavior are stated directly, without
making the explanation conditional on independently constrained Deep Agents and
LangGraph dependencies. Preserve the detail that the extra installs only the
base `nemo-relay` package.

In `@pypi.md`:
- Around line 41-48: Revise the installation guidance in pypi.md to explicitly
separate the co-located harness-and-adapter scenario from the
separate-environment scenario. State that co-located setups install a compatible
harness in the adapter environment, while separate setups require installing
both the harness package and the corresponding nemo-fabric-adapters-*
distribution in the harness environment, preserving the existing
compatibility-reference link.
🪄 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: bc76c0e5-1ab8-484a-a001-4793c9a66808

📥 Commits

Reviewing files that changed from the base of the PR and between 85c60e9 and fa69806.

📒 Files selected for processing (22)
  • .agents/skills/contribute-docs/SKILL.md
  • .agents/skills/prepare-pr/SKILL.md
  • .agents/skills/review-doc-style/SKILL.md
  • .agents/skills/review-doc-style/assets/nvidia-style-guide.md
  • .coderabbit.yaml
  • AGENTS.md
  • adapters/deepagents/README.md
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
  • pypi.md
  • python/src/nemo_fabric/errors.py
  • python/src/nemo_fabric/runtime.py
  • python/src/nemo_fabric/types.py
  • scripts/generate_api_docs.sh
  • tests/adapters/test_adapters_common_relay_gateway.py
  • tests/adapters/test_deepagents.py
📜 Review details
⏰ Context from checks skipped due to timeout. (4)
  • GitHub Check: Test (Python 3.13, windows-amd64)
  • GitHub Check: Test (Python 3.11, windows-amd64)
  • GitHub Check: Test (Python 3.12, windows-amd64)
  • GitHub Check: Test (Python 3.14, windows-amd64)
🧰 Additional context used
📓 Path-based instructions (38)
**/*.{md,rst}

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

Update documentation and examples in the same branch as the public API change.

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • pypi.md
  • AGENTS.md
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • adapters/deepagents/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
**/*

📄 CodeRabbit inference engine (.agents/skills/karpathy-guidelines/SKILL.md)

**/*: 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.

**/*: Always spell NVIDIA in all caps; do not use Nvidia, nvidia, nVidia, nVIDIA, or NV.
Use an NVIDIA before a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol after NVIDIA when referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names with NVIDIA on first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • python/src/nemo_fabric/runtime.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py
  • pypi.md
  • AGENTS.md
  • python/src/nemo_fabric/errors.py
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • tests/adapters/test_adapters_common_relay_gateway.py
  • scripts/generate_api_docs.sh
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • adapters/deepagents/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
  • python/src/nemo_fabric/types.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py

⚙️ CodeRabbit configuration file

**/*: Enforce the product name in user-facing prose. In standalone documents, pages, and pull request descriptions, use "NVIDIA NeMo Fabric" on the first product mention and "NeMo Fabric" thereafter. In source comments, docstrings, diagnostics, and schema-description fragments, use "NeMo Fabric" whenever the product is named, except when source text renders as the first product mention on a standalone generated page; use "NVIDIA NeMo Fabric" there. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag exact package/import/crate/command names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word; examples include Fabric, FabricConfig, nemo_fabric, nemo-fabric-core, nemo-fabric, and crates/fabric-core.

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • python/src/nemo_fabric/runtime.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py
  • pypi.md
  • AGENTS.md
  • python/src/nemo_fabric/errors.py
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • tests/adapters/test_adapters_common_relay_gateway.py
  • scripts/generate_api_docs.sh
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • adapters/deepagents/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
  • python/src/nemo_fabric/types.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
**/*.{md,rst,txt,adoc}

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

**/*.{md,rst,txt,adoc}: For technical documentation, use professional, active, conversational, engaging, precise, and plain-English prose. Prefer active voice, present tense, short sentences, and scannable paragraphs. Avoid casual or imprecise language, swearing, threats, insults, jokes, puns, culture-specific idioms, marketing exaggeration, and unsupported third-party comparisons.
Use can for possibility and reserve may for permission; use after for temporal order; use refer to for cross-references; prefer short direct sentences and specific verbs; avoid unnecessary please in technical documentation.
Prefer active voice when the actor matters. Passive voice is acceptable when the actor is unknown or irrelevant, when the action or result is the focus, or in programmer documentation.
Use natural contractions in conversational technical prose, but do not force them in formal legal copy, API references, or generated text.
Prefer simpler English over Latinisms: use for example or such as instead of e.g., and so on instead of etc., that is instead of i.e., compared to instead of vs., and by, through, or using instead of via. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Use that without commas for essential clauses, and which with commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such as June 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space before a.m. or p.m.; use ET and PT for needed time zones; avoid 24/7; and prefer from 12:30 to 1:00 p.m. for prose ranges.
Format numbers consistently: spell out zero through nine in body text, use numerals for 10 or greater and for technical values, use commas in thousands, do not begin a sentence with a numeral, spell out ordinals, and use numerals consistently within a category wh...

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • pypi.md
  • AGENTS.md
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • adapters/deepagents/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
**/*.{md,mdx,rst}

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

**/*.{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 case.
Format code elements, commands, parameters, package names, expressions, directories, file names, and paths in monospace; represent path placeholders as angle-bracketed values inside monospace.
Use quotation marks for error messages and strings when appropriate, while retaining code formatting for literal code strings when it provides clearer meaning.
Format UI buttons, menus, fields, and labels in bold; separate consecutive menu selections with > and match UI text exactly, including capitalization.
Use italics on first use of new terms, italicize publication titles, and do so sparingly where appropriate.
Write keyboard shortcuts as plain text and link GitHub repositories using owner/repository link text, such as [NVIDIA/NeMo](link).
Introduce every code block with a complete sentence; do not let a code block complete or continue the surrounding sentence, and use syntax highlighting when supported.
Avoid the word “snippet” unless the surrounding documentation already uses it as a term of art, and keep inline method, function, and class references consistent with nearby documentation.
Use descriptive link text matching the destination title when possible; avoid raw URLs, generic anchors, long-sentence links, and unnecessary links that distract from procedures.
Ensure lists have a complete lead-in sentence, more than one item, no more than two levels, parallel construction, one idea or action per item, and appropriate end punctuation.
Use bulleted lists when order does not matter and numbered lists when order matters or the list is a task sequence.
Format definition lists with a bold term followed by a complete, parallel, punctuated definition.
Use tables for reference information, decision support, compatibility matrices,...

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • pypi.md
  • AGENTS.md
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • adapters/deepagents/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
**/{README.md,*.md,*.mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Update relevant SDK, API, adapter, example, integration, and embedded documentation when public behavior or the corresponding surface changes.

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • pypi.md
  • AGENTS.md
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • adapters/deepagents/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
**/*.{md,mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

**/*.{md,mdx}: In standalone documentation, use NVIDIA NeMo Fabric for the first product mention and NeMo Fabric thereafter; never use standalone capitalized Fabric as the product name.
Capitalize NVIDIA correctly and use descriptive inline code formatting for commands, code, APIs, filenames, and paths.
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.
Prefer active voice, present tense, short sentences, and plain English; use can for possibility rather than may, and prefer after over once.
Write procedures as concise, imperative, parallel steps and split long sequences into smaller tasks.
Use unambiguous date formats and avoid ordinal dates in body text.

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • pypi.md
  • AGENTS.md
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • adapters/deepagents/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
**/*.{html,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

HTML and Markdown files must use the specified HTML comment form for SPDX license headers.

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • pypi.md
  • AGENTS.md
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • adapters/deepagents/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
**/*.{md,mdx,rst,yml,yaml}

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

**/*.{md,mdx,rst,yml,yaml}: Prefer the documented public API over internal shortcuts in documentation and examples.
Keep package names, repository references, and build commands current.
Update entry-point documentation, including README.md or docs/index.yml, when examples or reading paths change.

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • pypi.md
  • AGENTS.md
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • adapters/deepagents/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
docs/reference/api/**

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)

Treat files under docs/reference/api/ as generated output; do not modify them directly.

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
**/*.{py,rs,md,mdx}

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)

Preserve exact code and API identifiers such as Fabric, FabricConfig, FabricError, and nemo_fabric, as well as exact package, command, and path forms such as nemo-fabric-core, nemo-fabric, and crates/fabric-core.

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • python/src/nemo_fabric/runtime.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py
  • pypi.md
  • AGENTS.md
  • python/src/nemo_fabric/errors.py
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • tests/adapters/test_adapters_common_relay_gateway.py
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • adapters/deepagents/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
  • python/src/nemo_fabric/types.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
{README.md,docs/**/*,adapters/*/README.md,python/src/nemo_fabric/integrations/*/README.md,examples/README.md}

📄 CodeRabbit inference engine (AGENTS.md)

Update user-facing entry points when public behavior, the nemo-fabric package, examples, or supported bindings change, including the root README, Fern documentation, adapter and integration READMEs, and examples README.

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • adapters/deepagents/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
{docs/sdk/python.mdx,schemas/SCHEMA.md,docs/reference/api/**/*,skills/**/*}

📄 CodeRabbit inference engine (AGENTS.md)

When the public API changes, keep the Python/Rust binding contract current in the Python SDK documentation, JSON Schema notes, generated API references, and consumer skills; run just docs after changing the docs site.

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
{README.md,examples/**/*,docs/**/*}

📄 CodeRabbit inference engine (AGENTS.md)

Use the stable public wrapper scripts/generate_api_docs.sh in documentation and examples; reference scripts/docs/ helper paths only when documenting internal maintenance work.

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
{README.md,docs/**/*,*.md,**/*.md}

📄 CodeRabbit inference engine (AGENTS.md)

For the first product mention in standalone documents, pages, and pull-request descriptions, write NVIDIA NeMo Fabric; use NeMo Fabric thereafter. Never shorten the product name to Fabric, and preserve exact code, package, command, and path forms such as Fabric, FabricConfig, nemo_fabric, nemo-fabric-core, nemo-fabric, and crates/fabric-core.

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md
  • pypi.md
  • AGENTS.md
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • adapters/deepagents/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
{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/reference/api/python-library-reference/nemo_fabric.runtime.md
  • AGENTS.md
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
**/*.{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:

  • python/src/nemo_fabric/runtime.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py
  • python/src/nemo_fabric/errors.py
  • tests/adapters/test_adapters_common_relay_gateway.py
  • python/src/nemo_fabric/types.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
python/src/nemo_fabric/**

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

Ensure the editable maturin build continues to produce the native extension at nemo_fabric._native, with generated artifacts placed where downstream consumers expect.

Files:

  • python/src/nemo_fabric/runtime.py
  • python/src/nemo_fabric/errors.py
  • python/src/nemo_fabric/types.py
**/*.{py,pyi}

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

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

Use type annotations for public Python APIs and keep native Python binding declarations synchronized with their Rust implementations.

Files:

  • python/src/nemo_fabric/runtime.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py
  • python/src/nemo_fabric/errors.py
  • tests/adapters/test_adapters_common_relay_gateway.py
  • python/src/nemo_fabric/types.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
**/*.{rs,py,pyi}

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

**/*.{rs,py,pyi}: If public configuration types change, confirm schema snapshot tests in just test-rust pass and review generated schema diffs.
For schema or public contract changes, run both language suites and review changes under schemas/ and generated API references.

**/*.{rs,py,pyi}: Use snake_case for Rust and Python functions and variables; use PascalCase for Rust types and Python classes.
Keep native Python binding declarations synchronized with their Rust implementations when public contracts change.

Files:

  • python/src/nemo_fabric/runtime.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py
  • python/src/nemo_fabric/errors.py
  • tests/adapters/test_adapters_common_relay_gateway.py
  • python/src/nemo_fabric/types.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
**/*.{py,pyi,rs}

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

For Python SDK or PyO3 binding changes, use python-tests, run focused pytest tests first, then just test-python; rebuild with just build-python when native code or packaging changes.

Files:

  • python/src/nemo_fabric/runtime.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py
  • python/src/nemo_fabric/errors.py
  • tests/adapters/test_adapters_common_relay_gateway.py
  • python/src/nemo_fabric/types.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
**/*.{rs,py,toml}

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

When editing version helpers, verify every nemo-fabric-* workspace package through Cargo metadata and reject a static version in python/pyproject.toml.

Files:

  • python/src/nemo_fabric/runtime.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py
  • python/src/nemo_fabric/errors.py
  • tests/adapters/test_adapters_common_relay_gateway.py
  • python/src/nemo_fabric/types.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
**/*.{toml,rs,py}

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

Avoid blind repository-wide replacement of version-like strings; distinguish package-version references from examples and unrelated dependency versions.

Files:

  • python/src/nemo_fabric/runtime.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py
  • python/src/nemo_fabric/errors.py
  • tests/adapters/test_adapters_common_relay_gateway.py
  • python/src/nemo_fabric/types.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
**/*.{rs,py}

📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)

For native binding changes, run cargo check -p fabric-python --locked.

Files:

  • python/src/nemo_fabric/runtime.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py
  • python/src/nemo_fabric/errors.py
  • tests/adapters/test_adapters_common_relay_gateway.py
  • python/src/nemo_fabric/types.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
python/src/nemo_fabric/**/*.py

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)

For Python API reference changes, update source docstrings under python/src/nemo_fabric/ rather than generated reference files.

Files:

  • python/src/nemo_fabric/runtime.py
  • python/src/nemo_fabric/errors.py
  • python/src/nemo_fabric/types.py
python/src/nemo_fabric/**/*

⚙️ CodeRabbit configuration file

python/src/nemo_fabric/**/*: Review Python SDK changes for typed API consistency, import-time dependency neutrality, async/session behavior, and parity with the native extension.
Stubs and runtime implementations should stay aligned.

Files:

  • python/src/nemo_fabric/runtime.py
  • python/src/nemo_fabric/errors.py
  • python/src/nemo_fabric/types.py
.agents/skills/**/SKILL.md

📄 CodeRabbit inference engine (.agents/skills/README.md)

Each maintainer skill file must begin with YAML frontmatter containing at least name and description.

Files:

  • .agents/skills/prepare-pr/SKILL.md
  • .agents/skills/contribute-docs/SKILL.md
  • .agents/skills/review-doc-style/SKILL.md
.agents/skills/*/

📄 CodeRabbit inference engine (.agents/skills/README.md)

Use descriptive, task-based names for maintainer skill directories, such as contribute-api and validate-change.

Files:

  • .agents/skills/prepare-pr/SKILL.md
  • .agents/skills/contribute-docs/SKILL.md
  • .agents/skills/review-doc-style/assets/nvidia-style-guide.md
  • .agents/skills/review-doc-style/SKILL.md
.agents/skills/**

📄 CodeRabbit inference engine (.agents/skills/README.md)

Maintainer skills are auto-discovered from .agents/skills/; Claude Code uses .claude/skills as a symlink to the same directory rather than a separate skill set.

Keep maintainer skills under .agents/skills/ focused on repository contribution work, including API, documentation, testing, CI, packaging, release, and PR preparation.

Files:

  • .agents/skills/prepare-pr/SKILL.md
  • .agents/skills/contribute-docs/SKILL.md
  • .agents/skills/review-doc-style/assets/nvidia-style-guide.md
  • .agents/skills/review-doc-style/SKILL.md
{adapters/**,examples/**}

⚙️ CodeRabbit configuration file

{adapters/**,examples/**}: Review adapter and example changes for command correctness, config/schema consistency, artifact handling, and compatibility with the public NeMo Fabric contracts.

Files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py
  • adapters/deepagents/README.md
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
*

📄 CodeRabbit inference engine (AGENTS.md)

*: Use branch prefixes feat/, fix/, docs/, test/, or refactor/, and name branches after the work rather than Linear tickets; do not include ticket IDs or slugs.
Use Conventional Commit pull-request titles in the form <type>: <summary>; reserve fix for actual product bugs, not CI, documentation, or chores.
Use signed-off commits for pull-request work with git commit -s.
When creating a pull request from the current branch, target the upstream repository rather than a fork.
If repository-local PR guidance conflicts with generic GitHub connector or plugin guidance, follow the repository-local guidance for PR body format and review handoff details.
PR descriptions must state what changed, why it changed, how it was tested, and any breaking changes within the repository template format.

Files:

  • pypi.md
  • AGENTS.md
**/AGENTS.md

📄 CodeRabbit inference engine (CLAUDE.md)

Follow the instructions documented in AGENTS.md when working in the repository.

Files:

  • AGENTS.md
tests/adapters/**/*.py

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

tests/adapters/**/*.py: If an adapter or integration changes, run its focused tests.
For adapter behavior changes, run focused adapter tests under tests/adapters, then run just test-python.

Files:

  • tests/adapters/test_adapters_common_relay_gateway.py
  • tests/adapters/test_deepagents.py
tests/**/*.{rs,py}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

When adding functionality, include tests in the corresponding Rust crate or the relevant area under tests/.

Files:

  • tests/adapters/test_adapters_common_relay_gateway.py
  • tests/adapters/test_deepagents.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 and run by the async runner.
Do not add -> None return type annotations to test functions.
When mocking a class, use unittest.mock.MagicMock or unittest.mock.AsyncMock, using the spec argument when necessary, rather than defining a new class.
Prefix mocked class names with mock, not fake.
Prefer pytest fixtures over helper methods.
Do not repeat fixtures; place fixtures needed by multiple test files in conftest.py.
Define fixtures using @pytest.fixture(name="<fixture_name>"[, scope="<scope>"]) and a function named <fixture_name>_fixture; 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 or it does not return a value.
Use the autouse restore_environ_fixture from tests/conftest.py to restore environment variables; modify variables with os.environ and do not use monkeypatch.setenv.
Avoid defensive programming in tests; access expected data directly so missing data raises a clear failure, such as using results["data"] instead of results.get("data").

Files:

  • tests/adapters/test_adapters_common_relay_gateway.py
  • tests/adapters/test_deepagents.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/adapters/test_adapters_common_relay_gateway.py
  • tests/adapters/test_deepagents.py
**/*.{toml,yml,yaml,sh,bash}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

TOML, YAML, and shell files must use the specified #-comment SPDX license header.

Files:

  • scripts/generate_api_docs.sh
scripts/generate_api_docs.sh

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)

Update scripts/generate_api_docs.sh when the Python API documentation generator itself requires a change.

Files:

  • scripts/generate_api_docs.sh
**/README.md

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)

Update relevant package, crate, adapter, or integration README files when their documented public behavior or entry points change.

Files:

  • adapters/deepagents/README.md
🧠 Learnings (3)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T02:45:53.332Z
Learning: Keep documentation and example changes scoped, surface assumptions, and define focused validation before editing.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T02:45:53.332Z
Learning: Run `just docs` when the documentation site changes.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T02:46:07.714Z
Learning: Prioritize factual accuracy, current repository behavior, commands, paths, package names, APIs, bindings, support claims, and executable examples over copy polish.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T02:46:07.714Z
Learning: Run `just docs` after changing API documentation sources or generators to regenerate and validate the API reference.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T02:46:14.565Z
Learning: Report documentation findings by severity with the file and line, explain the reader or accuracy impact, and provide a concrete rewrite or remediation direction.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T02:46:14.565Z
Learning: Avoid style-only findings when wording is clear, accurate, and consistent with nearby documentation; do not enforce marketing or social-media rules on technical documentation.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T02:46:14.565Z
Learning: Open only the smallest support document needed to resolve an ambiguity or finding, rather than loading all support documents.
📚 Learning: 2026-06-28T04:03:32.877Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 26
File: python/tests/smoke_typed_config.py:163-177
Timestamp: 2026-06-28T04:03:32.877Z
Learning: In NVIDIA NeMo Fabric Python SDK serialization of `RuntimeCapabilities` (to satisfy the “parity contract” with Rust core and the CLI), do not emit metadata keys when the corresponding metadata is absent. Instead, omit those fields entirely so the produced JSON matches the Rust/CLI output (e.g., avoid `null`, empty objects, or placeholder metadata). During review, verify the serializer/builders follow this omission rule and that Python outputs/parity tests reflect the same shape.

Applied to files:

  • python/src/nemo_fabric/runtime.py
  • python/src/nemo_fabric/errors.py
  • python/src/nemo_fabric/types.py
📚 Learning: 2026-07-09T22:28:51.689Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 43
File: adapters/claude-sdk/src/nemo_fabric_adapters/claude_sdk/adapter.py:164-168
Timestamp: 2026-07-09T22:28:51.689Z
Learning: In the NeMo-Fabric adapters, treat path values used in Fabric adapter configuration (including logic like `_resolve_path` in adapter.py) as config-root-relative. Do not apply `Path.expanduser()` (or otherwise apply `~`/home or shell-style expansion), because it will make the resolved paths normalize inconsistently across adapters. Also, do not rely on or add any resolution behavior that uses `harness.settings.cwd` as an override point for these adapter paths—`harness.settings.cwd` is explicitly unsupported in this adapter context.

Applied to files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
🪛 ast-grep (0.44.1)
tests/adapters/test_deepagents.py

[error] 348-355: Command coming from incoming request
Context: subprocess.run(
[sys.executable, "-c", script, blocked],
check=False,
capture_output=True,
input=f"{json.dumps(request)}\n",
text=True,
timeout=30,
)
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(subprocess-from-request)


[error] 383-389: Command coming from incoming request
Context: subprocess.run(
[sys.executable, "-c", script],
check=False,
capture_output=True,
text=True,
timeout=30,
)
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(subprocess-from-request)


[info] 352-352: use jsonify instead of json.dumps for JSON output
Context: json.dumps(request)
Note: [CWE-116] Improper Encoding or Escaping of Output.

(use-jsonify)

🪛 Ruff (0.15.21)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py

[warning] 18-18: Missing return type annotation for special method __init__

Add return type annotation: None

(ANN204)


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

(ANN401)


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

(ANN401)


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

(ANN401)


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

(ANN401)


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

(ANN401)


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

(ANN401)


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

(ANN401)

tests/adapters/test_deepagents.py

[error] 349-349: subprocess call: check for execution of untrusted input

(S603)


[error] 384-384: subprocess call: check for execution of untrusted input

(S603)

adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py

[warning] 122-124: Abstract raise to an inner function

(TRY301)


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

(TRY003)


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

(ANN401)

🔇 Additional comments (24)
python/src/nemo_fabric/runtime.py (1)

4-4: LGTM!

tests/adapters/test_adapters_common_relay_gateway.py (1)

82-84: LGTM!

scripts/generate_api_docs.sh (1)

44-46: LGTM!

Also applies to: 68-73, 83-83

docs/reference/api/python-library-reference/index.md (1)

4-4: LGTM!

Also applies to: 14-14, 26-26, 42-42, 57-63

docs/reference/api/python-library-reference/nemo_fabric.client.md (1)

4-4: LGTM!

Also applies to: 43-43, 115-115

docs/reference/api/python-library-reference/nemo_fabric.errors.md (1)

10-18: LGTM!

Also applies to: 44-44, 79-79, 114-114, 149-149, 184-184, 219-219

docs/reference/api/python-library-reference/nemo_fabric.models.md (1)

4-4: LGTM!

Also applies to: 262-262, 1426-1426, 1564-1564

.agents/skills/review-doc-style/assets/nvidia-style-guide.md (1)

8-10: LGTM!

Also applies to: 29-34

.coderabbit.yaml (1)

77-79: LGTM!

AGENTS.md (1)

10-11: LGTM!

Also applies to: 47-55

docs/reference/api/python-library-reference/nemo_fabric.runtime.md (1)

10-10: 📐 Maintainability & Code Quality

Regenerate changed API references from source docstrings.

Both changed files are generated output. Update the corresponding Python source docstrings and run just docs; do not rely on hand-edits that can be overwritten.

  • docs/reference/api/python-library-reference/nemo_fabric.runtime.md#L10-L10: regenerate the runtime reference from its source docstring.
  • docs/reference/api/python-library-reference/nemo_fabric.types.md#L10-L10: regenerate the types reference from its source docstring.

As per path instructions, generated API references must not be modified directly. Based on learnings, run just docs after docs-site changes.

Sources: Path instructions, Learnings

python/src/nemo_fabric/errors.py (1)

35-35: LGTM!

python/src/nemo_fabric/types.py (1)

175-175: LGTM!

Also applies to: 545-545, 875-875, 1152-1161, 1205-1205, 1220-1220, 1230-1230

.agents/skills/contribute-docs/SKILL.md (1)

3-3: LGTM!

Also applies to: 24-29, 41-42

.agents/skills/prepare-pr/SKILL.md (1)

3-3: LGTM!

Also applies to: 35-37

.agents/skills/review-doc-style/SKILL.md (1)

3-3: LGTM!

Also applies to: 42-52, 84-85, 115-120

adapters/deepagents/README.md (1)

54-59: LGTM!

pypi.md (1)

28-29: LGTM!

adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (2)

43-55: LGTM! The compatibility guard now walks deepagents, langchain, langchain_core, and langgraph symbols and matches the version guidance shown in the README and test assertions.

Also applies to: 107-153


759-760: 🗄️ Data Integrity & Integration

No change needed for _relay_dependency_error

The message already uses the same nemo-relay[deepagents]>=0.5.0,<0.7 range as the README, so there’s no drift here.

			> Likely an incorrect or invalid review comment.
adapters/deepagents/src/nemo_fabric_adapters/deepagents/middleware.py (1)

1-43: LGTM!

tests/adapters/test_deepagents.py (3)

113-129: LGTM! The stub expansion and cache eviction correctly force the lazily-imported ToolGateMiddleware to bind to the test's stubbed SDK modules.

Also applies to: 145-167, 270-273


323-421: LGTM! The subprocess-based import-blocking test, the "supported deps pass" test, and the parametrized REQUIRED_HARNESS_APIS coverage all correctly exercise the new preflight guard and its metadata contract.


958-999: LGTM! Middleware-class reference updated correctly to the new nemo_fabric_adapters.deepagents.middleware module.

Comment thread python/src/nemo_fabric/errors.py Outdated

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

Caution

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

⚠️ Outside diff range comments (1)
.agents/skills/review-doc-style/SKILL.md (1)

88-89: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Keep the identifier exception consistent with the canonical rule.

This blocking bullet exempts only exact code or API identifiers, while .coderabbit.yaml also preserves exact package, command, configuration-key, and path forms. Reuse the broader exception so reviewers do not flag valid identifiers.

Proposed wording
-- The product is shortened to standalone capitalized "Fabric" outside an exact
-  code or API identifier
+- The product is shortened to standalone capitalized "Fabric" outside an exact
+  code, API, package, command, configuration-key, or path identifier
🤖 Prompt for 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.

In @.agents/skills/review-doc-style/SKILL.md around lines 88 - 89, Update the
“Fabric” naming rule in the review-doc-style skill to use the same broad
exact-identifier exception as the canonical rule, covering package, command,
configuration-key, path, code, and API identifiers. Keep the standalone
capitalized “Fabric” restriction unchanged outside those exact forms.

Source: Coding guidelines

🤖 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.

Outside diff comments:
In @.agents/skills/review-doc-style/SKILL.md:
- Around line 88-89: Update the “Fabric” naming rule in the review-doc-style
skill to use the same broad exact-identifier exception as the canonical rule,
covering package, command, configuration-key, path, code, and API identifiers.
Keep the standalone capitalized “Fabric” restriction unchanged outside those
exact forms.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 20e60740-86c6-426b-bddc-710e06c1e119

📥 Commits

Reviewing files that changed from the base of the PR and between fa69806 and 294132b.

📒 Files selected for processing (4)
  • .agents/skills/review-doc-style/SKILL.md
  • .coderabbit.yaml
  • adapters/deepagents/README.md
  • pypi.md
📜 Review details
⏰ Context from checks skipped due to timeout. (4)
  • GitHub Check: Test (Python 3.13, windows-amd64)
  • GitHub Check: Test (Python 3.12, windows-amd64)
  • GitHub Check: Test (Python 3.14, windows-amd64)
  • GitHub Check: Test (Python 3.11, windows-amd64)
🧰 Additional context used
📓 Path-based instructions (17)
**/*.{md,rst}

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

Update documentation and examples in the same branch as the public API change.

Files:

  • pypi.md
  • adapters/deepagents/README.md
**/*

📄 CodeRabbit inference engine (.agents/skills/karpathy-guidelines/SKILL.md)

**/*: 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.

**/*: Always spell NVIDIA in all caps; do not use Nvidia, nvidia, nVidia, nVIDIA, or NV.
Use an NVIDIA before a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol after NVIDIA when referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names with NVIDIA on first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...

Files:

  • pypi.md
  • adapters/deepagents/README.md

⚙️ CodeRabbit configuration file

**/*: Enforce the product name in user-facing prose. In standalone documents, pages, and pull request descriptions, use "NVIDIA NeMo Fabric" on the first product mention and "NeMo Fabric" thereafter. In source comments, docstrings, diagnostics, and schema-description fragments, use "NeMo Fabric" whenever the product is named, except when source text renders as the first product mention on a standalone generated page; use "NVIDIA NeMo Fabric" there. Module docstrings copied by lazydocs that become the first product mention on standalone API reference pages are an example of this exception and must keep the full name; their repeated overview-page summaries use the short name after the overview introduces the product. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag exact package/import/crate/command names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word; examples include Fabric, FabricConfig, nemo_fabric, nemo-fabric-core, nemo-fabric, and crates/fabric-core.

Files:

  • pypi.md
  • adapters/deepagents/README.md
**/*.{md,rst,txt,adoc}

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

**/*.{md,rst,txt,adoc}: For technical documentation, use professional, active, conversational, engaging, precise, and plain-English prose. Prefer active voice, present tense, short sentences, and scannable paragraphs. Avoid casual or imprecise language, swearing, threats, insults, jokes, puns, culture-specific idioms, marketing exaggeration, and unsupported third-party comparisons.
Use can for possibility and reserve may for permission; use after for temporal order; use refer to for cross-references; prefer short direct sentences and specific verbs; avoid unnecessary please in technical documentation.
Prefer active voice when the actor matters. Passive voice is acceptable when the actor is unknown or irrelevant, when the action or result is the focus, or in programmer documentation.
Use natural contractions in conversational technical prose, but do not force them in formal legal copy, API references, or generated text.
Prefer simpler English over Latinisms: use for example or such as instead of e.g., and so on instead of etc., that is instead of i.e., compared to instead of vs., and by, through, or using instead of via. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Use that without commas for essential clauses, and which with commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such as June 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space before a.m. or p.m.; use ET and PT for needed time zones; avoid 24/7; and prefer from 12:30 to 1:00 p.m. for prose ranges.
Format numbers consistently: spell out zero through nine in body text, use numerals for 10 or greater and for technical values, use commas in thousands, do not begin a sentence with a numeral, spell out ordinals, and use numerals consistently within a category wh...

Files:

  • pypi.md
  • adapters/deepagents/README.md
**/*.{md,mdx,rst}

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

**/*.{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 case.
Format code elements, commands, parameters, package names, expressions, directories, file names, and paths in monospace; represent path placeholders as angle-bracketed values inside monospace.
Use quotation marks for error messages and strings when appropriate, while retaining code formatting for literal code strings when it provides clearer meaning.
Format UI buttons, menus, fields, and labels in bold; separate consecutive menu selections with > and match UI text exactly, including capitalization.
Use italics on first use of new terms, italicize publication titles, and do so sparingly where appropriate.
Write keyboard shortcuts as plain text and link GitHub repositories using owner/repository link text, such as [NVIDIA/NeMo](link).
Introduce every code block with a complete sentence; do not let a code block complete or continue the surrounding sentence, and use syntax highlighting when supported.
Avoid the word “snippet” unless the surrounding documentation already uses it as a term of art, and keep inline method, function, and class references consistent with nearby documentation.
Use descriptive link text matching the destination title when possible; avoid raw URLs, generic anchors, long-sentence links, and unnecessary links that distract from procedures.
Ensure lists have a complete lead-in sentence, more than one item, no more than two levels, parallel construction, one idea or action per item, and appropriate end punctuation.
Use bulleted lists when order does not matter and numbered lists when order matters or the list is a task sequence.
Format definition lists with a bold term followed by a complete, parallel, punctuated definition.
Use tables for reference information, decision support, compatibility matrices,...

Files:

  • pypi.md
  • adapters/deepagents/README.md
**/{README.md,*.md,*.mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Update relevant SDK, API, adapter, example, integration, and embedded documentation when public behavior or the corresponding surface changes.

In standalone documents, pages, and pull request descriptions, use “NVIDIA NeMo Fabric” for the first product mention and “NeMo Fabric” thereafter; never shorten it to “Fabric”.

Files:

  • pypi.md
  • adapters/deepagents/README.md
**/*.{md,mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Top-of-file MDX SPDX comments must use {/* ... */} delimiters rather than HTML comment delimiters.

Files:

  • pypi.md
  • adapters/deepagents/README.md
**/*.{html,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

HTML and Markdown files must use the specified HTML comment form for SPDX license headers.

Files:

  • pypi.md
  • adapters/deepagents/README.md
**/*.{md,mdx,rst,yml,yaml}

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

**/*.{md,mdx,rst,yml,yaml}: Prefer the documented public API over internal shortcuts in documentation and examples.
Keep package names, repository references, and build commands current.
Update entry-point documentation when examples or documentation reading paths change.

Files:

  • pypi.md
  • adapters/deepagents/README.md
**/*.{md,mdx,rst,txt,yml,yaml,py,rs}

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)

Use current repository commands, package names, APIs, bindings, paths, entry points, and support claims; flag stale or incorrect documentation.

Files:

  • pypi.md
  • adapters/deepagents/README.md
**/*.{md,mdx,rst,txt,py,rs}

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)

Use NVIDIA NeMo Fabric for the first product mention in a standalone document or generated standalone page, then use NeMo Fabric; use NeMo Fabric in source prose fragments. Never use standalone capitalized Fabric as the product name, while preserving exact identifiers such as Fabric, FabricConfig, FabricError, and nemo_fabric.

Files:

  • pypi.md
  • adapters/deepagents/README.md
**/*.{md,mdx,rst,txt,py,rs,yml,yaml}

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)

Capitalize NVIDIA correctly and keep user-facing terminology consistent with current repository terminology.

Files:

  • pypi.md
  • adapters/deepagents/README.md
.agents/skills/**/SKILL.md

📄 CodeRabbit inference engine (.agents/skills/README.md)

Each maintainer skill file must begin with YAML frontmatter containing at least name and description.

Files:

  • .agents/skills/review-doc-style/SKILL.md
.agents/skills/*/

📄 CodeRabbit inference engine (.agents/skills/README.md)

Use descriptive, task-based names for maintainer skill directories, such as contribute-api and validate-change.

Files:

  • .agents/skills/review-doc-style/SKILL.md
.agents/skills/**

📄 CodeRabbit inference engine (.agents/skills/README.md)

Maintainer skills are auto-discovered from .agents/skills/; Claude Code uses .claude/skills as a symlink to the same directory rather than a separate skill set.

Maintainer skills may reference repository internals and contribution commands; do not add consumer integration guidance to this tier.

Files:

  • .agents/skills/review-doc-style/SKILL.md
**/README.md

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

Update relevant getting-started, reference, example, or adapter documentation when those areas change.

Check package, crate, adapter, and integration README files for corresponding updates when public behavior changes.

Files:

  • adapters/deepagents/README.md
{README.md,docs/**,adapters/*/README.md,python/src/nemo_fabric/integrations/*/README.md,examples/README.md}

📄 CodeRabbit inference engine (AGENTS.md)

Update user-facing entry points when public behavior, the nemo-fabric package, examples, or supported bindings change.

Files:

  • adapters/deepagents/README.md
{adapters/**,examples/**}

⚙️ CodeRabbit configuration file

{adapters/**,examples/**}: Review adapter and example changes for command correctness, config/schema consistency, artifact handling, and compatibility with the public NeMo Fabric contracts.

Files:

  • adapters/deepagents/README.md
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:29.970Z
Learning: Run `just docs` when the documentation site changes.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:38.656Z
Learning: Run relevant validation under `validate-change` before opening a pull request.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:38.656Z
Learning: Update documentation and examples when public behavior changes.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:38.656Z
Learning: Use `NVIDIA NeMo Fabric` on the first product mention and `NeMo Fabric` thereafter; use standalone `Fabric` only as an exact code or API identifier.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:38.656Z
Learning: Update dependent maintainer or consumer skills when code changes affect their APIs, bindings, commands, paths, packaging guidance, or best practices.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:38.656Z
Learning: For new or updated dependencies, document the functional need, alternatives considered, and why the selected dependency is the narrowest fit.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:38.656Z
Learning: Use Conventional Commit style for pull-request titles: `<type>: <concise imperative summary>`. Choose the type from the actual change surface; use `fix` only for an actual user-facing or runtime/product code bug fix, never for chores, CI, docs, tests, packaging metadata, generated output, or agent/skill guidance.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:38.656Z
Learning: The pull-request body must contain `#### Overview`, `#### Details`, `#### Validation`, `#### Where should the reviewer start?`, and `#### Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)` sections, with the required summary, changes, validation, reviewer-start point, and issue reference or `Relates to: none`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:38.656Z
Learning: For dependency changes, include dependency rationale and material license-diff findings in the `#### Overview`; treat the license diff as review evidence, not a compatibility decision.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:38.656Z
Learning: Only check contribution-confirmation boxes when they are true; if either confirmation cannot be made, stop before opening the pull request and surface the blocker.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:38.656Z
Learning: After creating or editing a pull request, fetch the rendered body and verify that the template's visible headings and checklist items remain present.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:38.656Z
Learning: Explicitly call out breaking changes or renamed surfaces in the pull request.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:46.974Z
Learning: Prioritize factual accuracy, current repository behavior, and actionable findings over copy polish during documentation reviews.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:46.974Z
Learning: Keep documentation changes scoped, surface assumptions, and define focused validation before editing.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:46.974Z
Learning: When reporting documentation findings, lead with `Must fix`, `Should fix`, and `Nice to have` sections; include a file path, line reference, current problem, rationale, and concrete rewrite or direction.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:57.523Z
Learning: Review documentation in this order: verify facts, run the fast-path checklist, consult only the relevant support document, and report findings with severity and a concrete rewrite or direction.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:57.523Z
Learning: Classify findings as Must fix for incorrect, stale, misleading, or clearly noncompliant content; Should fix for comprehension, scanability, or consistency problems; and Nice to have for optional polish that does not affect accuracy or reader success.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:57.523Z
Learning: Omit style-only findings when wording is clear, accurate, and consistent with nearby documentation unless a deep copyedit is requested.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:57.523Z
Learning: Do not enforce marketing or social-media rules on technical documentation.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:57.523Z
Learning: Do not replace precise technical terms with simpler words when precision would be lost.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:57.523Z
Learning: Do not report a style issue without a concrete rewrite or remediation path.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:57.523Z
Learning: When support documents do not answer a question, consult Merriam-Webster, AP Stylebook, Chicago Manual of Style, and then Microsoft Style Guide in that order.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:57.523Z
Learning: Use the finding format: severity and short issue, file and line, current problem, why it matters, and a concrete rewrite.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:11:57.523Z
Learning: For code review output, use the review tool's inline finding format when available and keep the finding body focused on reader impact and the fix.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:12:05.454Z
Learning: Use branch prefixes `feat/`, `fix/`, `docs/`, `test/`, or `refactor/`; name branches after the work and never include Linear ticket IDs or slugs.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:12:05.454Z
Learning: Use signed-off commits for pull request work by running `git commit -s`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:12:05.454Z
Learning: When creating a pull request from the current branch, target the upstream repository rather than a fork.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T03:12:05.454Z
Learning: PR descriptions must state what changed, why, how it was tested, and any breaking changes within the repository template format.
🔇 Additional comments (7)
.coderabbit.yaml (1)

77-79: LGTM!

.agents/skills/review-doc-style/SKILL.md (3)

3-3: LGTM!


42-68: LGTM!


119-124: LGTM!

adapters/deepagents/README.md (1)

37-39: LGTM!

Also applies to: 62-62, 169-177

pypi.md (2)

28-29: LGTM!


41-53: LGTM!

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@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: 3

Caution

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

⚠️ Outside diff range comments (2)
.agents/skills/contribute-adapter/SKILL.md (2)

1-5: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Add the required SPDX header.

The license frontmatter is not an SPDX header. Add the required HTML SPDX comments after the frontmatter so this new source file complies with the repository-wide license-header rule.

Proposed fix
 ---
 name: contribute-adapter
 description: Add or substantially change a NeMo Fabric harness adapter, including its architecture, descriptor claims, package wiring, capability and policy mapping, runtime behavior, and validation.
 license: Apache-2.0
 ---
 
+<!-- SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -->
+<!-- SPDX-License-Identifier: Apache-2.0 -->
+
 # Contribute an Adapter to NVIDIA NeMo Fabric
🤖 Prompt for 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.

In @.agents/skills/contribute-adapter/SKILL.md around lines 1 - 5, Add the
repository-required HTML SPDX license comments immediately after the frontmatter
in SKILL.md, while preserving the existing name, description, and license
metadata.

Source: Coding guidelines


150-154: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Sync adapter-tests before the focused adapter command. just test-python already installs that group, but the standalone uv run --no-sync pytest tests/adapters/test_<name>*.py example can fail on a fresh environment. Add uv sync --group adapter-tests first, or point readers to just test-python.

🤖 Prompt for 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.

In @.agents/skills/contribute-adapter/SKILL.md around lines 150 - 154, Update
the validation instructions in the contribute-adapter skill to synchronize the
adapter-tests dependency group before the standalone focused pytest command,
using uv sync --group adapter-tests, or direct readers to just test-python
instead. Keep the existing validate-change and applicable adapter test guidance
intact.
🤖 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 `@adapters/deepagents/pyproject.toml`:
- Around line 42-44: Update the Relay version comment in the dependency
configuration to state that 0.6.0 is already published, while preserving the
lockfile behavior: use 0.5.0 today and adopt 0.6.x on the next re-lock.

In `@adapters/deepagents/README.md`:
- Around line 61-62: Update the adapter documentation command from “fabric
doctor” to “nemo-fabric doctor” while preserving the existing NeMo Fabric
Runtime installation qualification. Apply this change in
adapters/deepagents/README.md lines 61-62 and adapters/hermes/README.md line 77.

In `@pypi.md`:
- Around line 28-29: Update the adapter-extra installation examples in the
runtime/adapter environment section to explicitly require choosing exactly one
adapter. Replace the sequential install commands with a placeholder command or
clearly labeled mutually exclusive alternatives so readers install only the
selected adapter distribution.

---

Outside diff comments:
In @.agents/skills/contribute-adapter/SKILL.md:
- Around line 1-5: Add the repository-required HTML SPDX license comments
immediately after the frontmatter in SKILL.md, while preserving the existing
name, description, and license metadata.
- Around line 150-154: Update the validation instructions in the
contribute-adapter skill to synchronize the adapter-tests dependency group
before the standalone focused pytest command, using uv sync --group
adapter-tests, or direct readers to just test-python instead. Keep the existing
validate-change and applicable adapter test guidance intact.
🪄 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: 2537bba3-1e06-449f-b1cb-1684e494a9b0

📥 Commits

Reviewing files that changed from the base of the PR and between fa69806 and 0e3ac3e.

⛔ Files ignored due to path filters (5)
  • adapters/claude/uv.lock is excluded by !**/*.lock
  • adapters/codex/uv.lock is excluded by !**/*.lock
  • adapters/deepagents/uv.lock is excluded by !**/*.lock
  • adapters/hermes/uv.lock is excluded by !**/*.lock
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (26)
  • .agents/skills/contribute-adapter/SKILL.md
  • .github/workflows/ci_python.yml
  • README.md
  • adapters/claude/README.md
  • adapters/claude/pyproject.toml
  • adapters/codex/README.md
  • adapters/codex/pyproject.toml
  • adapters/deepagents/README.md
  • adapters/deepagents/pyproject.toml
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/README.md
  • adapters/hermes/pyproject.toml
  • docs/experimentation/cli.mdx
  • docs/getting-started/install.mdx
  • docs/integrations/claude.mdx
  • examples/code_review_agent/README.md
  • examples/harbor/calculator/task/environment/Dockerfile
  • examples/harbor/prepare_swebench.sh
  • examples/notebooks/02_variations.ipynb
  • examples/notebooks/README.md
  • justfile
  • pypi.md
  • pyproject.toml
  • tests/adapters/test_adapter_package_metadata.py
  • tests/adapters/test_deepagents.py
  • tests/integrations/test_harbor_runner.py
💤 Files with no reviewable changes (3)
  • adapters/hermes/pyproject.toml
  • adapters/claude/pyproject.toml
  • adapters/codex/pyproject.toml
📜 Review details
🧰 Additional context used
📓 Path-based instructions (53)
**/*.{md,rst}

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

Update documentation and examples in the same branch as the public API change.

Files:

  • examples/code_review_agent/README.md
  • README.md
  • adapters/claude/README.md
  • adapters/hermes/README.md
  • examples/notebooks/README.md
  • pypi.md
  • adapters/codex/README.md
  • adapters/deepagents/README.md
{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:

  • examples/code_review_agent/README.md
  • README.md
  • docs/integrations/claude.mdx
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
  • examples/notebooks/README.md
{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:

  • examples/code_review_agent/README.md
  • docs/integrations/claude.mdx
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
  • examples/notebooks/README.md
**/*

📄 CodeRabbit inference engine (.agents/skills/karpathy-guidelines/SKILL.md)

**/*: 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.

**/*: Always spell NVIDIA in all caps; do not use Nvidia, nvidia, nVidia, nVIDIA, or NV.
Use an NVIDIA before a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol after NVIDIA when referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names with NVIDIA on first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...

Files:

  • examples/code_review_agent/README.md
  • examples/harbor/calculator/task/environment/Dockerfile
  • README.md
  • docs/integrations/claude.mdx
  • adapters/claude/README.md
  • adapters/hermes/README.md
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
  • examples/notebooks/README.md
  • examples/harbor/prepare_swebench.sh
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • pyproject.toml
  • pypi.md
  • tests/adapters/test_adapter_package_metadata.py
  • examples/notebooks/02_variations.ipynb
  • adapters/codex/README.md
  • adapters/deepagents/README.md
  • adapters/deepagents/pyproject.toml
  • justfile
  • tests/integrations/test_harbor_runner.py
  • tests/adapters/test_deepagents.py
**/*.{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:

  • examples/code_review_agent/README.md
  • README.md
  • docs/integrations/claude.mdx
  • adapters/claude/README.md
  • adapters/hermes/README.md
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
  • examples/notebooks/README.md
  • pypi.md
  • adapters/codex/README.md
  • adapters/deepagents/README.md
**/*.{md,rst,txt,adoc}

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

**/*.{md,rst,txt,adoc}: For technical documentation, use professional, active, conversational, engaging, precise, and plain-English prose. Prefer active voice, present tense, short sentences, and scannable paragraphs. Avoid casual or imprecise language, swearing, threats, insults, jokes, puns, culture-specific idioms, marketing exaggeration, and unsupported third-party comparisons.
Use can for possibility and reserve may for permission; use after for temporal order; use refer to for cross-references; prefer short direct sentences and specific verbs; avoid unnecessary please in technical documentation.
Prefer active voice when the actor matters. Passive voice is acceptable when the actor is unknown or irrelevant, when the action or result is the focus, or in programmer documentation.
Use natural contractions in conversational technical prose, but do not force them in formal legal copy, API references, or generated text.
Prefer simpler English over Latinisms: use for example or such as instead of e.g., and so on instead of etc., that is instead of i.e., compared to instead of vs., and by, through, or using instead of via. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Use that without commas for essential clauses, and which with commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such as June 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space before a.m. or p.m.; use ET and PT for needed time zones; avoid 24/7; and prefer from 12:30 to 1:00 p.m. for prose ranges.
Format numbers consistently: spell out zero through nine in body text, use numerals for 10 or greater and for technical values, use commas in thousands, do not begin a sentence with a numeral, spell out ordinals, and use numerals consistently within a category wh...

Files:

  • examples/code_review_agent/README.md
  • README.md
  • adapters/claude/README.md
  • adapters/hermes/README.md
  • examples/notebooks/README.md
  • pypi.md
  • adapters/codex/README.md
  • adapters/deepagents/README.md
**/README.md

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)

Update relevant package, crate, adapter, and integration README files when public behavior or entry-point documentation changes.

Files:

  • examples/code_review_agent/README.md
  • README.md
  • adapters/claude/README.md
  • adapters/hermes/README.md
  • examples/notebooks/README.md
  • adapters/codex/README.md
  • adapters/deepagents/README.md
**/*.{md,mdx}

📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)

**/*.{md,mdx}: Use the full product name NVIDIA NeMo Fabric on its first usage, typically in the title or H1; use NeMo Fabric thereafter.
Use fabric by itself only when referring to the CLI tool, and surround those references with backticks.
Capitalize NVIDIA correctly in public documentation.
Format commands, code elements, expressions, file names, paths, and filenames as inline code where needed.
Use title case consistently for headings in technical documentation.
Introduce code blocks, tables, and lists with complete lead-in sentences.
Use descriptive anchor text instead of raw URLs or generic link text such as here.
Prefer active voice, present tense, short sentences, and plain English.
Use consistent terminology for the same concept throughout a document.
Write procedures as imperative, parallel, easy-to-scan steps, and split long sequences into smaller tasks.
Use after instead of once when expressing temporal sequence.
Use can instead of may when the intended meaning is possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
For learning-oriented documentation, do not force trademark symbols unless the source document explicitly requires them.
Introduce examples' code blocks with full sentences and ensure examples match current APIs and build commands.

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

Files:

  • examples/code_review_agent/README.md
  • README.md
  • docs/integrations/claude.mdx
  • adapters/claude/README.md
  • adapters/hermes/README.md
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
  • examples/notebooks/README.md
  • pypi.md
  • adapters/codex/README.md
  • adapters/deepagents/README.md
**/{README.md,*.md,*.mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Update relevant SDK, API, adapter, example, integration, and embedded documentation when public behavior or the corresponding surface changes.

Files:

  • examples/code_review_agent/README.md
  • README.md
  • docs/integrations/claude.mdx
  • adapters/claude/README.md
  • adapters/hermes/README.md
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
  • examples/notebooks/README.md
  • pypi.md
  • adapters/codex/README.md
  • adapters/deepagents/README.md
**/*.{html,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

HTML and Markdown files must use the specified HTML comment form for SPDX license headers.

Files:

  • examples/code_review_agent/README.md
  • README.md
  • adapters/claude/README.md
  • adapters/hermes/README.md
  • examples/notebooks/README.md
  • pypi.md
  • adapters/codex/README.md
  • adapters/deepagents/README.md
{adapters/**,examples/**}

⚙️ CodeRabbit configuration file

{adapters/**,examples/**}: Review adapter and example changes for command correctness, config/schema consistency, artifact handling, and compatibility with the public NeMo Fabric contracts.

Files:

  • examples/code_review_agent/README.md
  • examples/harbor/calculator/task/environment/Dockerfile
  • adapters/claude/README.md
  • adapters/hermes/README.md
  • examples/notebooks/README.md
  • examples/harbor/prepare_swebench.sh
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • examples/notebooks/02_variations.ipynb
  • adapters/codex/README.md
  • adapters/deepagents/README.md
  • adapters/deepagents/pyproject.toml
{*.md,**/*.md,**/*.mdx,**/*.ipynb}

⚙️ CodeRabbit configuration file

{*.md,**/*.md,**/*.mdx,**/*.ipynb}: Enforce the product name in user-facing prose: use "NVIDIA NeMo Fabric" on first use and "NeMo Fabric" thereafter. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag the lowercase fabric CLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.

Files:

  • examples/code_review_agent/README.md
  • README.md
  • docs/integrations/claude.mdx
  • adapters/claude/README.md
  • adapters/hermes/README.md
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
  • examples/notebooks/README.md
  • pypi.md
  • examples/notebooks/02_variations.ipynb
  • adapters/codex/README.md
  • adapters/deepagents/README.md
**/.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/ci_python.yml
{docs/package.json,docs/package-lock.json,.github/workflows/*.yml,justfile}

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

Keep documentation tooling, CI workflows, install commands, build/test/clean recipes, and examples consistent with current package names and commands.

Files:

  • .github/workflows/ci_python.yml
  • justfile
{pyproject.toml,python/pyproject.toml,Cargo.toml,docs/package.json,.github/workflows/*.yml,justfile}

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

Reflect public packaging changes in release-facing documentation and ensure CI references the same package names and commands used by local workflows.

Files:

  • .github/workflows/ci_python.yml
  • pyproject.toml
  • justfile
{README.md,docs/index.yml}

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

Update README.md or docs/index.yml when documentation entry points or example reading paths change.

Files:

  • README.md
README.md

📄 CodeRabbit inference engine (AGENTS.md)

Update the root README.md when public behavior, the nemo-fabric package, examples, or supported bindings change.

Update the top-level README.md when changed behavior affects an entry point users would naturally consult.

Update the root README.md when workspace structure, supported adapters, or top-level documentation changes.

Files:

  • README.md
{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:

  • README.md
  • docs/integrations/claude.mdx
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
**/*.mdx

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

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

Use {/* ... */} delimiters for top-of-file MDX SPDX comments, not HTML comment delimiters.

MDX files must use a JSX comment for the SPDX license header.

Files:

  • docs/integrations/claude.mdx
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
docs/**/*.{md,mdx,yml}

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

Run just docs when the documentation site changes.

Files:

  • docs/integrations/claude.mdx
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
docs/**/*

📄 CodeRabbit inference engine (AGENTS.md)

Update Fern documentation under docs/ when public behavior, the nemo-fabric package, examples, or supported bindings change.

Files:

  • docs/integrations/claude.mdx
  • docs/getting-started/install.mdx
  • docs/experimentation/cli.mdx
.agents/skills/**

📄 CodeRabbit inference engine (AGENTS.md)

Keep maintainer skills under .agents/skills/ focused on repository contribution work, including API, documentation, testing, CI, packaging, release, and PR preparation; do not add consumer integration guidance.

Maintainer skills are auto-discovered from .agents/skills/; Claude Code uses .claude/skills as a symlink to the same directory rather than a separate skill set.

Files:

  • .agents/skills/contribute-adapter/SKILL.md
.agents/skills/**/SKILL.md

📄 CodeRabbit inference engine (.agents/skills/README.md)

Each maintainer skill file must begin with YAML frontmatter containing at least name and description.

Files:

  • .agents/skills/contribute-adapter/SKILL.md
.agents/skills/*/

📄 CodeRabbit inference engine (.agents/skills/README.md)

Use descriptive, task-based names for maintainer skill directories, such as contribute-api and validate-change.

Files:

  • .agents/skills/contribute-adapter/SKILL.md
adapters/*/README.md

📄 CodeRabbit inference engine (AGENTS.md)

Update adapter README files when public behavior, examples, or supported bindings change.

Files:

  • adapters/claude/README.md
  • adapters/hermes/README.md
  • adapters/codex/README.md
  • adapters/deepagents/README.md
adapters/**/*

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

adapters/**/*: Place repository adapters under adapters/<name> and include the required adapter structure, including LICENSE -> ../../LICENSE, README.md, fabric-adapter.json, native package and lock files, a source entry point, and focused tests.
Provide a credential-free fixture covering plan, doctor, and run; keep live credential-dependent harness tests opt-in while retaining a deterministic CI end-to-end path.

Files:

  • adapters/claude/README.md
  • adapters/hermes/README.md
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/codex/README.md
  • adapters/deepagents/README.md
  • adapters/deepagents/pyproject.toml
adapters/**/README.md

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

Document installation, supported configuration, harness-only settings, credentials, lifecycle, telemetry, artifacts, limitations, focused test commands, and canonical typed SDK or harness-native YAML examples where applicable.

Files:

  • adapters/claude/README.md
  • adapters/hermes/README.md
  • adapters/codex/README.md
  • adapters/deepagents/README.md
**/*.{toml,yml,yaml,sh,bash}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

TOML, YAML, and shell files must use the specified #-comment SPDX license header.

Files:

  • examples/harbor/prepare_swebench.sh
  • pyproject.toml
  • adapters/deepagents/pyproject.toml
**/*.{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:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/adapters/test_adapter_package_metadata.py
  • tests/integrations/test_harbor_runner.py
  • tests/adapters/test_deepagents.py
**/*.{rs,py}

📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)

For native binding changes, run cargo check -p fabric-python --locked.

Files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/adapters/test_adapter_package_metadata.py
  • tests/integrations/test_harbor_runner.py
  • tests/adapters/test_deepagents.py
**/*.{py,pyi}

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

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

Use type annotations for public Python APIs and keep native Python binding declarations synchronized with their Rust implementations.

Files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/adapters/test_adapter_package_metadata.py
  • tests/integrations/test_harbor_runner.py
  • tests/adapters/test_deepagents.py
**/*.{rs,py,pyi}

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

**/*.{rs,py,pyi}: If public configuration types change, confirm schema snapshot tests in just test-rust pass and review generated schema diffs.
For schema or public contract changes, run both language suites and review changes under schemas/ and generated API references.

**/*.{rs,py,pyi}: Use snake_case for Rust and Python functions and variables; use PascalCase for Rust types and Python classes.
Keep native Python binding declarations synchronized with their Rust implementations when public contracts change.

Files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/adapters/test_adapter_package_metadata.py
  • tests/integrations/test_harbor_runner.py
  • tests/adapters/test_deepagents.py
**/*.{py,pyi,rs}

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

For Python SDK or PyO3 binding changes, use python-tests, run focused pytest tests first, then just test-python; rebuild with just build-python when native code or packaging changes.

Files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/adapters/test_adapter_package_metadata.py
  • tests/integrations/test_harbor_runner.py
  • tests/adapters/test_deepagents.py
**/*.{rs,py,toml}

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

When editing version helpers, verify every nemo-fabric-* workspace package through Cargo metadata and reject a static version in python/pyproject.toml.

Files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • pyproject.toml
  • tests/adapters/test_adapter_package_metadata.py
  • adapters/deepagents/pyproject.toml
  • tests/integrations/test_harbor_runner.py
  • tests/adapters/test_deepagents.py
**/*.{toml,rs,py}

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

Avoid blind repository-wide replacement of version-like strings; distinguish package-version references from examples and unrelated dependency versions.

Files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • pyproject.toml
  • tests/adapters/test_adapter_package_metadata.py
  • adapters/deepagents/pyproject.toml
  • tests/integrations/test_harbor_runner.py
  • tests/adapters/test_deepagents.py
adapters/**/*.py

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

adapters/**/*.py: For Python adapters, use pyproject.toml, uv.lock, src/nemo_fabric_adapters/<name>/adapter.py, and tests/adapters/test_<name>*.py.
Use the existing Fabric python or process runner and normalized request/result contracts; do not add a runner or one-off abstraction for a single adapter.
Treat normalized config, capability_plan, telemetry_plan, and runtime_context as authoritative; reserve harness.settings for harness-specific behavior and apply precedence in that order before descriptor and adapter defaults.
Reject conflicting duplicate declarations or unsupported behavior with an actionable error naming the field and supported alternatives; never silently drop configuration.
Never expose credential values in output, errors, events, logs, or fixtures.
Forward only required system variables, selected credential variables, telemetry variables, and documented harness-specific environment; never forward or log unrelated environment values.
Start one local adapter host per Fabric runtime and keep it alive for ordered startinvoke*stop; emit one JSON lifecycle response per request on stdout and diagnostics only on stderr.
Return harness-level invoke failures as successful lifecycle responses with response: null, failed: true, and structured error fields (code, message, retryable, and optional metadata).
Scope workspace, generated configuration, state, sessions, and artifacts to the resolved runtime context, and isolate stateful adapters by Fabric runtime ID.
Keep stdout stable: emit response plus adapter-specific extensions such as error, harness events, usage, and session IDs; do not duplicate Fabric-owned result fields.

Files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
adapters/**/*.{py,json}

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

Add focused evidence for descriptor shape and exact capabilities, positive mappings, unsupported-value rejection, unenforceable-policy rejection, result normalization without secret leakage, one-shot and continuation behavior, runtime isolation, and packaged entry-point execution.

Files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
{Cargo.toml,python/pyproject.toml,pyproject.toml}

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

Keep Rust workspace/package metadata and Python/maturin package metadata internally consistent, including package names, versions, import paths, and module names.

Files:

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

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

{Cargo.toml,Cargo.lock,pyproject.toml,uv.lock,python/pyproject.toml}: Keep workspace, Python, and lockfile dependency versions aligned where required, and review both direct and transitive dependency changes from resolved lockfiles.
Inspect resolved transitive licenses, explicitly surface UNKNOWN, non-SPDX/custom, proprietary, source-available, copyleft, or network-copyleft terms, and route unresolved licensing questions to dependency approvers with distribution and linkage context.
Document the functional need, alternatives considered, rationale for the selected dependency, and any unresolved licensing question when introducing dependencies.

Files:

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

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

Before adding a dependency, prefer the standard library, an existing dependency, or a small local implementation when appropriate; otherwise select a maintained, narrow-fit dependency with clear SPDX metadata and a permissive license where possible.

Files:

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

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

After updating manifests or lockfiles, run uv run --no-project python scripts/licensing/license_diff.py --base-ref origin/main and review added packages and license changes.

Files:

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

📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)

For any Rust change, run just test-rust and cargo fmt --all -- --check.

For Rust core, CLI, or shared runtime semantic changes, run Rust formatting and tests, and add Python tests when behavior is exposed through the SDK.

Use Rust stable tooling; format Rust code with cargo fmt --all, check formatting with cargo fmt --all -- --check, and compile with cargo check --workspace --locked.

Files:

  • pyproject.toml
  • adapters/deepagents/pyproject.toml
**/{Cargo.toml,Cargo.lock,pyproject.toml,package.json}

📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)

For new or updated dependencies, document the functional need, alternatives considered, and why the selected dependency is the narrowest fit.

Files:

  • pyproject.toml
  • adapters/deepagents/pyproject.toml
**/*.{toml,lock}

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

If a manifest or lockfile changes, run the license-diff script against origin/main, review transitive license changes, and run the attributions-rust and attributions-python pre-commit hooks.

Files:

  • pyproject.toml
  • adapters/deepagents/pyproject.toml
**/*.{yml,yaml,toml,lock}

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

For CI or packaging changes, use maintain-ci or maintain-packaging, then run recipes and checks whose behavior changed.

Files:

  • pyproject.toml
  • adapters/deepagents/pyproject.toml
{pyproject.toml,adapters/**/pyproject.toml}

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

{pyproject.toml,adapters/**/pyproject.toml}: Update the literal project.version in the root setuptools project and every adapter pyproject.toml.
Keep internal exact-version requirements aligned: root nemo-fabric-* == <version> optional dependencies and each adapter's nemo-fabric-adapters-common == <version> dependency.

Files:

  • pyproject.toml
  • adapters/deepagents/pyproject.toml
**/pyproject.toml

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

Wire public Python adapter packages into root optional extras, the adapter dependency group, [tool.uv.sources], and python_projects in justfile; ship descriptors under share/nemo-fabric/adapters/<name>.

Files:

  • pyproject.toml
  • adapters/deepagents/pyproject.toml
tests/adapters/**/*.py

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

tests/adapters/**/*.py: If an adapter or integration changes, run its focused tests.
For adapter behavior changes, run focused adapter tests under tests/adapters, then run just test-python.

Files:

  • tests/adapters/test_adapter_package_metadata.py
  • tests/adapters/test_deepagents.py
tests/**/*.{rs,py}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

When adding functionality, include tests in the corresponding Rust crate or the relevant area under tests/.

Files:

  • tests/adapters/test_adapter_package_metadata.py
  • tests/integrations/test_harbor_runner.py
  • tests/adapters/test_deepagents.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 and run by the async runner.
Do not add -> None return type annotations to test functions.
When mocking a class, use unittest.mock.MagicMock or unittest.mock.AsyncMock, using the spec argument when necessary, rather than defining a new class.
Prefix mocked class names with mock, not fake.
Prefer pytest fixtures over helper methods.
Do not repeat fixtures; place fixtures needed by multiple test files in conftest.py.
Define fixtures using @pytest.fixture(name="<fixture_name>"[, scope="<scope>"]) and a function named <fixture_name>_fixture; 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 or it does not return a value.
Use the autouse restore_environ_fixture from tests/conftest.py to restore environment variables; modify variables with os.environ and do not use monkeypatch.setenv.
Avoid defensive programming in tests; access expected data directly so missing data raises a clear failure, such as using results["data"] instead of results.get("data").

Files:

  • tests/adapters/test_adapter_package_metadata.py
  • tests/integrations/test_harbor_runner.py
  • tests/adapters/test_deepagents.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/adapters/test_adapter_package_metadata.py
  • tests/integrations/test_harbor_runner.py
  • tests/adapters/test_deepagents.py
adapters/**/pyproject.toml

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

Keep published runtime dependencies razor-thin and adapter-owned. Do not declare wrapped harness or consumer-agent libraries; declare only other directly imported runtime libraries owned by the adapter.

Files:

  • adapters/deepagents/pyproject.toml
justfile

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

justfile: The set-version recipe must run just lock-python after source metadata is updated.
set_project_version must invoke both Cargo and Python project version helpers.

Files:

  • justfile
🧠 Learnings (2)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T21:08:38.534Z
Learning: Read the authoritative reference surfaces before editing and use the closest existing adapter only for harness-specific patterns, not for the core contract.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-23T21:08:38.534Z
Learning: Use companion guidance for scoped changes, tests, packaging, documentation, validation, and review handoff; do not use this adapter-contribution guidance for applications that merely select an existing adapter.
📚 Learning: 2026-07-09T22:28:51.689Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 43
File: adapters/claude-sdk/src/nemo_fabric_adapters/claude_sdk/adapter.py:164-168
Timestamp: 2026-07-09T22:28:51.689Z
Learning: In the NeMo-Fabric adapters, treat path values used in Fabric adapter configuration (including logic like `_resolve_path` in adapter.py) as config-root-relative. Do not apply `Path.expanduser()` (or otherwise apply `~`/home or shell-style expansion), because it will make the resolved paths normalize inconsistently across adapters. Also, do not rely on or add any resolution behavior that uses `harness.settings.cwd` as an override point for these adapter paths—`harness.settings.cwd` is explicitly unsupported in this adapter context.

Applied to files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
🪛 SkillSpector (2.3.11)
.agents/skills/contribute-adapter/SKILL.md

[error] 169: [RA1] Self-Modification: Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Remediation: Prevent the skill from modifying its own code, SKILL.md, or configuration files. Treat skill files as read-only at runtime.

(Rogue Agent (RA1))

🪛 zizmor (1.26.1)
.github/workflows/ci_python.yml

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

(template-injection)


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

(template-injection)

🔇 Additional comments (23)
.agents/skills/contribute-adapter/SKILL.md (1)

7-146: LGTM!

Also applies to: 155-178

adapters/deepagents/pyproject.toml (1)

36-40: LGTM!

Also applies to: 45-46

pyproject.toml (1)

48-52: LGTM!

Also applies to: 93-101

tests/adapters/test_adapter_package_metadata.py (1)

1-79: LGTM!

.github/workflows/ci_python.yml (1)

91-91: LGTM!

examples/notebooks/02_variations.ipynb (1)

203-214: LGTM!

examples/notebooks/README.md (1)

28-35: LGTM!

adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)

139-139: LGTM!

examples/harbor/calculator/task/environment/Dockerfile (1)

18-18: LGTM!

examples/harbor/prepare_swebench.sh (1)

67-67: LGTM!

tests/adapters/test_deepagents.py (1)

315-318: LGTM!

tests/integrations/test_harbor_runner.py (1)

20-20: LGTM!

Also applies to: 257-265

justfile (1)

404-404: LGTM!

README.md (1)

140-143: LGTM!

Also applies to: 158-158, 176-181

adapters/claude/README.md (1)

12-42: LGTM!

Also applies to: 153-154

adapters/codex/README.md (1)

10-33: LGTM!

Also applies to: 71-74

adapters/deepagents/README.md (1)

12-40: LGTM!

Also applies to: 157-171

adapters/hermes/README.md (1)

12-36: LGTM!

docs/experimentation/cli.mdx (1)

188-192: LGTM!

docs/getting-started/install.mdx (1)

32-67: LGTM!

docs/integrations/claude.mdx (1)

13-16: LGTM!

pypi.md (1)

38-63: LGTM!

examples/code_review_agent/README.md (1)

62-62: LGTM!

Comment thread adapters/deepagents/pyproject.toml Outdated
Comment thread adapters/deepagents/README.md Outdated
Comment thread pypi.md Outdated
@NVIDIA NVIDIA deleted a comment from ZhongxuanWang Jul 23, 2026
@zhongxuanwang-nv zhongxuanwang-nv self-assigned this Jul 24, 2026
@zhongxuanwang-nv
zhongxuanwang-nv force-pushed the refactor/slim-adapter-dependencies branch from a3897ef to bb5294d Compare July 24, 2026 19:51
@zhongxuanwang-nv
zhongxuanwang-nv force-pushed the refactor/slim-adapter-dependencies branch from bb5294d to 8fd8458 Compare July 24, 2026 19:58
@zhongxuanwang-nv
zhongxuanwang-nv force-pushed the refactor/slim-adapter-dependencies branch from 8fd8458 to 6daba0d Compare July 24, 2026 21:29
@zhongxuanwang-nv
zhongxuanwang-nv force-pushed the refactor/slim-adapter-dependencies branch from 6daba0d to 8b03fcc Compare July 24, 2026 21:49
@zhongxuanwang-nv
zhongxuanwang-nv force-pushed the refactor/slim-adapter-dependencies branch from 8b03fcc to a6ef90d Compare July 24, 2026 21:57
@zhongxuanwang-nv
zhongxuanwang-nv marked this pull request as ready for review July 24, 2026 22:00
@zhongxuanwang-nv
zhongxuanwang-nv requested review from a team as code owners July 24, 2026 22:00
requires-python = ">=3.11"
dependencies = [
"nemo-fabric-adapters-common == 0.1.0",
"claude-agent-sdk==0.2.120",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

i get it for CLIs, but for SDKs, why do we need to remove it?

Also, how do we know what version of SDK our adapter is compatible with?

@zhongxuanwang-nv zhongxuanwang-nv Jul 24, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Thanks Ajay! Here we moved the SDK from the standalone adapter wheels to the root [pyproject.toml](https://github.com/NVIDIA/NeMo-Fabric/pull/105/changes#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711) to prevent installing an adapter into a harness-owned env from changing that env's SDK.

For that version, CI tests this version (ci_python.yml:91 and ci_python.yml:96) by installing the claude and codex extras with these versions and runs just test-python so I assumed it would be compatible; I left the version unchanged

dependencies = [
"nemo-fabric-adapters-common == 0.1.0",
"openai-codex==0.144.4",
"tomli-w~=1.2",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

same question as for claude sdk dep

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Same to claude sdk above, we moved them to the root [pyproject.toml](https://github.com/NVIDIA/NeMo-Fabric/pull/105/changes#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711)

Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
@zhongxuanwang-nv
zhongxuanwang-nv force-pushed the refactor/slim-adapter-dependencies branch from a6ef90d to f5b953c Compare July 24, 2026 22:15
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