Skip to content

chore: manually forward-merge release/0.1 into main - #156

Merged
AjayThorve merged 7 commits into
NVIDIA:mainfrom
AjayThorve:main-merge-release/0.1
Jul 29, 2026
Merged

chore: manually forward-merge release/0.1 into main#156
AjayThorve merged 7 commits into
NVIDIA:mainfrom
AjayThorve:main-merge-release/0.1

Conversation

@AjayThorve

@AjayThorve AjayThorve commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

Overview

Manually forward-merge release/0.1 into main after the automated forward-merge in #150 could not complete.

This preserves the release branch commits while retaining main's 0.2.0 package identity. The resolution synchronizes Cargo, Python package metadata, internal dependency pins, and generated lockfiles to 0.2.0. It also updates the version helper to recognize exact internal dependencies containing extras, such as nemo-fabric-adapters-claude[harness] == 0.2.0.

Operational note: Do not close #150. Merge this PR with /merge nosquash so branch history is preserved and the original forward-merger PR can complete automatically.

Details

  • Forward the adapter dependency-boundary changes from release/0.1.
  • Preserve main's 0.2.0 versions across the Rust workspace and Python distributions.
  • Keep root-to-adapter and adapter-to-common exact-version requirements aligned.
  • Regenerate the root and adapter lockfile version entries.
  • Teach just set-version to update internal package pins containing optional extras.
  • Leave the dynamically versioned nemo-fabric-runtime package contract unchanged.
  • Introduce no new third-party dependencies or license changes.

Validation

  • uv lock --check for the root, runtime, and all adapter projects
  • uv run --no-sync pytest -q tests/adapters/test_adapter_package_metadata.py
    • 16 passed
  • just test-python
    • 529 passed, 15 skipped
  • just build-python
  • cargo check -p fabric-python --locked
  • cargo check --workspace --locked
  • just wheels
    • Built the root, runtime, common, Claude, Codex, Deep Agents, and Hermes 0.2.0 wheels
  • uv run pre-commit run --all-files attributions-rust
  • uv run pre-commit run --all-files attributions-python
  • License comparison against the pre-resolution branch head
    • No Rust or Python packages added, removed, or changed
  • just --fmt --check
  • git diff --check

A license comparison directly against upstream/main cannot generate its Rust baseline because that ref currently has Cargo.toml at 0.2.0 while its local workspace entries in Cargo.lock remain at 0.1.0. This forward-merge resolution corrects that inconsistency.

Where should the reviewer start?

Start with the final resolution commit, 2743690, particularly justfile, Cargo.toml, and the root pyproject.toml. Then verify the corresponding local-package entries in Cargo.lock, uv.lock, and the adapter lockfiles.

The remaining forwarded changes were previously reviewed on the release/0.1 line.

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

Summary by CodeRabbit

  • New Features

    • Improved installation/extras structure across runtime, adapters, harnesses, and Relay (including updated hermes-agent/harness/full/relay semantics).
    • Added clearer guidance for running runtime and adapters in separate environments, including interpreter selection.
    • Expanded deployment scenarios for shared, isolated, and split setups.
  • Documentation

    • Updated README and getting-started/install + adapter integration guides (Claude, Codex, Deep Agents, Hermes) with version- and Python-compatibility details.
    • Refined Relay setup to distinguish Python-package integration vs external CLI usage.
  • Tests

    • Added packaging metadata checks to validate published extras/dependency boundaries and CI now exercises the adapter-test composition set.

zhongxuanwang-nv and others added 6 commits July 29, 2026 10:12
#### Overview

Slim the Python adapter dependency boundary for the `release/0.1` line without changing adapter behavior.

- `nemo-fabric` remains a metadata-only package that unconditionally installs the exact matching `nemo-fabric-runtime`.
- Root harness extras delegate to the matching adapter package's `harness` extra.
- Bare adapter distributions contain only adapter-owned runtime dependencies.
- Every adapter provides `harness` and `full`; only Deep Agents and Hermes provide the Python `relay` extra. Claude and Codex continue to use the separately installed `nemo-relay` CLI.
- Wrapped harness packages required by repository tests remain in the non-published `adapter-tests` dependency group.

#### Details

The supported install modes are now explicit:

- `nemo-fabric[<harness>]`: Runtime, adapter, and supported harness dependencies in one environment.
- `nemo-fabric` plus a bare adapter package: Runtime and adapter with an existing host-managed harness.
- `nemo-fabric-adapters-<adapter>[harness]`: Adapter and supported harness without Runtime, for a separate adapter interpreter.
- Bare `nemo-fabric-adapters-<adapter>`: Adapter-owned dependencies only.
- Adapter `full`: All package-installable dependencies; for Claude and Codex this equals `harness` because Relay is an external CLI.

The README, package description, install guide, adapter guides, Harbor examples, CI, consumer skill, and maintainer packaging skills now describe the same matrix. Metadata tests guard the root-to-adapter delegation and the exact adapter dependency boundaries.

#### Validation

- Focused metadata, README, and Harbor checks: `55 passed`
- Full Python suite: `529 passed, 15 skipped`
- Latest upstream Hermes streaming coverage plus metadata checks: `21 passed`
- Root and all adapter lockfiles: `uv lock --check`
- `just build-python`
- `cargo check -p fabric-python --locked`
- `just docs` (all checks passed; unauthenticated redirect check skipped with the expected warning)
- `just wheels`, followed by root and adapter wheel `METADATA` inspection
- License diff against `upstream/release/0.1`: no Rust or Python additions, removals, or changes
- Full `pre-commit run --all-files`
- `just --fmt --check`
- `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 `docs/getting-started/install.mdx`, `.github/workflows/ci_python.yml`, and `.agents/skills/contribute-adapter/SKILL.md`.

The branch is rebased onto the latest `release/0.1`. It includes and preserves the adapter configuration changes from NVIDIA#117.

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

- Closes [FABRIC-125](https://linear.app/nvidia/issue/FABRIC-125/slim-adapter-runtime-dependencies)
- Relates to NVIDIA#117

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

## Summary by CodeRabbit

* **Documentation**
  * Clarified installation options for runtime, adapters, harnesses, and Relay integrations.
  * Added supported Python version guidance and separate-environment setup instructions.
  * Updated Hermes, Claude, Codex, and Deep Agents quick starts and deployment scenarios.
  * Improved Harbor setup and command examples, including version-alignment guidance.

* **Bug Fixes**
  * Improved Hermes configuration writing when YAML support is unavailable.
  * Clarified Relay CLI requirements and adapter-specific integration behavior.

* **Tests**
  * Added validation for package dependency boundaries, installation metadata, and adapter configuration behavior.

Authors:
  - Zhongxuan (Daniel) Wang (https://github.com/zhongxuanwang-nv)

Approvers:
  - Anuradha Karuppiah (https://github.com/AnuradhaKaruppiah)
  - David Gardner (https://github.com/dagardner-nv)

URL: NVIDIA#105
Signed-off-by: Zhongxuan (Daniel) Wang <daniewang@nvidia.com>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
This reverts commit 557b629.

Signed-off-by: Ajay Thorve <athorve@nvidia.com>
This reverts commit 16546c8, reversing
changes made to 68ee72b.

Signed-off-by: Ajay Thorve <athorve@nvidia.com>
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
@AjayThorve
AjayThorve requested review from a team as code owners July 29, 2026 19:01
@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 3ca30c62-9783-424e-b383-b62e52f59d41

📥 Commits

Reviewing files that changed from the base of the PR and between 2743690 and b2a4db8.

📒 Files selected for processing (6)
  • README.md
  • docs/integrations/harness/deepagents.mdx
  • examples/harbor/README.md
  • examples/harbor/swebench/README.md
  • tests/integrations/test_harbor_runner.py
  • tests/python/test_harbor_integration.py
📜 Recent review details
⏰ Context from checks skipped due to timeout. (2)
  • GitHub Check: Test (Python 3.12, windows-amd64)
  • GitHub Check: Test (Python 3.13, windows-amd64)
🧰 Additional context used
📓 Path-based instructions (29)
**/*.{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/harbor/README.md
  • examples/harbor/swebench/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/harbor/README.md
  • docs/integrations/harness/deepagents.mdx
  • examples/harbor/swebench/README.md
  • 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/harbor/README.md
  • docs/integrations/harness/deepagents.mdx
  • examples/harbor/swebench/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/harbor/README.md
  • tests/python/test_harbor_integration.py
  • docs/integrations/harness/deepagents.mdx
  • tests/integrations/test_harbor_runner.py
  • examples/harbor/swebench/README.md
  • README.md
**/*.{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/harbor/README.md
  • docs/integrations/harness/deepagents.mdx
  • examples/harbor/swebench/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/harbor/README.md
  • examples/harbor/swebench/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/harbor/README.md
  • examples/harbor/swebench/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.

Files:

  • examples/harbor/README.md
  • docs/integrations/harness/deepagents.mdx
  • examples/harbor/swebench/README.md
  • README.md
**/*.md

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

Documentation and examples must be updated consistently with changes to public behavior and reviewed for NVIDIA technical-writing style.

Files:

  • examples/harbor/README.md
  • examples/harbor/swebench/README.md
  • README.md
**/{*.md,*.rst,*.mdx}

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

Reflect public packaging changes in release-facing documentation, and keep documentation and examples current with install, import, and build commands.

Files:

  • examples/harbor/README.md
  • docs/integrations/harness/deepagents.mdx
  • examples/harbor/swebench/README.md
  • README.md
**/*.{md,mdx,html}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

All Markdown, MDX, and HTML source files must include the specified SPDX license header using the appropriate comment syntax.

Files:

  • examples/harbor/README.md
  • docs/integrations/harness/deepagents.mdx
  • examples/harbor/swebench/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/harbor/README.md
  • examples/harbor/swebench/README.md
{*.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/harbor/README.md
  • docs/integrations/harness/deepagents.mdx
  • examples/harbor/swebench/README.md
  • 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/python/test_harbor_integration.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/python/test_harbor_integration.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/python/test_harbor_integration.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.
Run tests for every affected language surface; changes touching the Rust core or public schemas must run both Rust and Python test suites.
Keep native Python binding declarations synchronized with their Rust implementations.
All Rust and Python source files must include the specified SPDX license header using the appropriate comment syntax.

Files:

  • tests/python/test_harbor_integration.py
  • tests/integrations/test_harbor_runner.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/python/test_harbor_integration.py
  • tests/integrations/test_harbor_runner.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:

  • tests/python/test_harbor_integration.py
  • 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:

  • tests/python/test_harbor_integration.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 by the async runner.
Do not add -> None return type annotations to test functions.
When mocking a class, use unittest.mock.MagicMock or AsyncMock, with spec when necessary, instead of 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>") and a <fixture_name>_fixture function; specify scope only when it is not function.
Prefer pytest.mark.parametrize over separate tests for different input types.
Use @pytest.mark.usefixtures when a fixture is needed but its returned value is unused.
Avoid defensive programming in tests; access expected data directly so missing data causes a clear failure.
When adapter installation metadata changes, test the published packaging composition directly: exact-version root runtime dependency, matching harness extras, adapter-owned bare dependencies, root adapter-tests harness installation, and correct full/relay extras.

Files:

  • tests/python/test_harbor_integration.py
  • tests/integrations/test_harbor_runner.py
**/tests/**/*.{rs,py,pyi}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • tests/python/test_harbor_integration.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/python/test_harbor_integration.py
  • tests/integrations/test_harbor_runner.py
**/*.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.

Files:

  • docs/integrations/harness/deepagents.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/harness/deepagents.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/harness/deepagents.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.
For links between files under docs/, require paths relative to the source file with the target file's .mdx extension so they work in both Fern builds and repository browsers. Flag Fern site-root links such as NeMo Fabric overview; use the repository-relative equivalent, such as NeMo Fabric overview.

Files:

  • docs/integrations/harness/deepagents.mdx
  • README.md
{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.

Files:

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

Timestamp: 2026-07-29T19:23:09.263Z
Learning: Use `uv run pytest -k "<pattern>"` for focused test runs and `uv run pytest` to run the full test suite.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T19:23:17.430Z
Learning: Release tags must use raw Rust-compatible SemVer without a leading `v`, such as `0.1.0` or `0.1.0-rc.1`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T19:23:17.430Z
Learning: Public behavior, adapter, example, or workspace changes must update the corresponding documentation in the same branch.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T19:23:17.430Z
Learning: All contributors must sign off commits using `git commit -s`; unsigned commits are not accepted.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T19:23:17.430Z
Learning: Before submitting a pull request, run relevant tests, verify affected packages compile, update documentation, and rebase on the latest `main`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T19:23:17.430Z
Learning: Pull requests require at least one approving review, passing CI, and addressing feedback without force-pushing during review.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T19:23:17.430Z
Learning: Use commit messages formatted as `type: short description`, with an approved type and a first line under 72 characters.
🪛 Ruff (0.16.0)
tests/python/test_harbor_integration.py

[warning] 357-357: Async functions should not use pathlib.Path methods, use trio.Path or anyio.path

(ASYNC240)

🔇 Additional comments (7)
README.md (1)

73-80: LGTM!

Also applies to: 151-153, 170-170, 179-186

docs/integrations/harness/deepagents.mdx (1)

34-39: LGTM!

examples/harbor/README.md (1)

70-77: LGTM!

Also applies to: 118-121, 138-138

examples/harbor/swebench/README.md (1)

30-30: LGTM!

tests/integrations/test_harbor_runner.py (1)

6-7: LGTM!

Also applies to: 32-35, 267-267, 296-302, 323-328, 334-334

tests/python/test_harbor_integration.py (2)

10-10: LGTM!

Also applies to: 359-359, 377-377


357-358: 🚀 Performance & Scalability

No change needed here. This repo’s Ruff config only selects B019, so ASYNC240 is not enforced. The Path.open()/tomllib.load() read is acceptable in this test.

			> Likely an incorrect or invalid review comment.

Walkthrough

The PR restructures NeMo Fabric adapter packaging around slim leaf dependencies, exact runtime pinning, harness/full/Relay extras, adapter-test synchronization, updated installation documentation, and revised Harbor examples and metadata validation.

Changes

Adapter packaging boundary

Layer / File(s) Summary
Dependency contracts and metadata validation
.agents/skills/*, pyproject.toml, adapters/*/pyproject.toml, tests/adapters/*
Root and leaf packages separate runtime and harness dependencies, define adapter-specific extras, and validate metadata relationships and Hermes configuration fallback behavior.
Dependency synchronization and CI wiring
.github/workflows/ci_python.yml, justfile
CI and local targets sync adapter-test dependencies, use narrower extras, and support bracketed internal dependency pins.
General installation and deployment guidance
README.md, CONTRIBUTING.md, docs/getting-started/*, pypi.md, skills/integrations/*
Installation paths, Python constraints, Relay modes, split environments, and runtime/adapter version pairing are documented.
Adapter-specific installation and Relay guidance
adapters/*/README.md, docs/integrations/harness/*
Claude, Codex, Deep Agents, and Hermes documentation describes harness/full/Relay extras, managed SDKs, external Relay CLI usage, and adapter interpreter selection.
Harbor examples and documentation validation
examples/harbor/*, tests/integrations/test_harbor_runner.py, tests/python/*
Harbor commands and container specs use revised extras, while tests validate documented extras and generated install commands.

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

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 6.25% 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
Title check ✅ Passed The title is a valid Conventional Commits chore summary and accurately describes the forward-merge.
Description check ✅ Passed The description matches the template well, with overview, reviewer start point, related issues, and validation details.
Linked Issues check ✅ Passed The changes satisfy #150 by manually forward-merging release/0.1 into main and keeping the branches synchronized.
Out of Scope Changes check ✅ Passed No clear unrelated changes stand out; the edits align with the forward-merge and version-sync objective.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@github-actions

Copy link
Copy Markdown

Comment thread examples/harbor/swebench/README.md 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 `@docs/integrations/harness/deepagents.mdx`:
- Around line 30-32: Add the supported root-level Relay installation path to the
Deep Agents documentation, using either the command pip install
"nemo-fabric[deepagents,relay]" or an explicit nemo-fabric installation with the
adapter’s full extra. Place it alongside the existing explanation of the relay
and full extras.

In `@examples/harbor/README.md`:
- Around line 68-77: Synchronize all Harbor package references with the
repository’s 0.2.0 metadata: update the dependency versions in
examples/harbor/README.md lines 68-77 and FABRIC_PACKAGE in
examples/harbor/swebench/README.md lines 30-32; in
tests/integrations/test_harbor_runner.py lines 321-332 and
tests/python/test_harbor_integration.py lines 355-373, derive expected versions
and pip specifications from pyproject.toml instead of hardcoded 0.1.x values.

In `@README.md`:
- Around line 151-153: Update all stale package version pins in README.md:
change every task-environment example at lines 151-153, the runtime example at
line 170, and the Hermes adapter example at line 179 from 0.1.0 to 0.2.0,
preserving the existing extras and command structure.
🪄 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: 71cd84c0-d1cf-4767-80ce-52f956b4aedb

📥 Commits

Reviewing files that changed from the base of the PR and between a618842 and 2743690.

⛔ Files ignored due to path filters (6)
  • Cargo.lock is excluded by !**/*.lock
  • 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 (35)
  • .agents/skills/contribute-adapter/SKILL.md
  • .agents/skills/maintain-packaging/SKILL.md
  • .agents/skills/python-tests/SKILL.md
  • .github/workflows/ci_python.yml
  • CONTRIBUTING.md
  • 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/getting-started/install.mdx
  • docs/getting-started/quickstart.mdx
  • docs/integrations/harness/claude.mdx
  • docs/integrations/harness/codex.mdx
  • docs/integrations/harness/deepagents.mdx
  • docs/integrations/harness/hermes.mdx
  • docs/sdk/python.mdx
  • examples/harbor/README.md
  • examples/harbor/calculator/README.md
  • examples/harbor/calculator/task/environment/Dockerfile
  • examples/harbor/swebench/README.md
  • justfile
  • pypi.md
  • pyproject.toml
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • tests/adapters/test_adapter_package_metadata.py
  • tests/adapters/test_hermes_config_builder.py
  • tests/integrations/test_harbor_runner.py
  • tests/python/test_harbor_integration.py
  • tests/python/test_readme_examples.py
📜 Review details
⏰ Context from checks skipped due to timeout. (7)
  • GitHub Check: Test (Python 3.13, macos-arm64)
  • GitHub Check: Pre-commit
  • GitHub Check: Test (Python 3.14, windows-amd64)
  • 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.11, macos-arm64)
🧰 Additional context used
📓 Path-based instructions (57)
**/*.{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:

  • adapters/hermes/README.md
  • CONTRIBUTING.md
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • adapters/deepagents/README.md
  • pypi.md
  • examples/harbor/calculator/README.md
  • adapters/codex/README.md
  • examples/harbor/swebench/README.md
  • examples/harbor/README.md
  • README.md
  • adapters/claude/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:

  • adapters/hermes/README.md
  • docs/sdk/python.mdx
  • docs/getting-started/quickstart.mdx
  • examples/harbor/calculator/task/environment/Dockerfile
  • tests/python/test_readme_examples.py
  • CONTRIBUTING.md
  • tests/adapters/test_hermes_config_builder.py
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/deepagents/README.md
  • docs/integrations/harness/hermes.mdx
  • docs/integrations/harness/deepagents.mdx
  • docs/integrations/harness/codex.mdx
  • pypi.md
  • adapters/claude/pyproject.toml
  • examples/harbor/calculator/README.md
  • justfile
  • docs/integrations/harness/claude.mdx
  • adapters/codex/README.md
  • adapters/codex/pyproject.toml
  • examples/harbor/swebench/README.md
  • tests/python/test_harbor_integration.py
  • adapters/deepagents/pyproject.toml
  • examples/harbor/README.md
  • tests/adapters/test_adapter_package_metadata.py
  • docs/getting-started/install.mdx
  • adapters/hermes/pyproject.toml
  • tests/integrations/test_harbor_runner.py
  • pyproject.toml
  • README.md
  • adapters/claude/README.md
**/*.{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:

  • adapters/hermes/README.md
  • docs/sdk/python.mdx
  • docs/getting-started/quickstart.mdx
  • CONTRIBUTING.md
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • adapters/deepagents/README.md
  • docs/integrations/harness/hermes.mdx
  • docs/integrations/harness/deepagents.mdx
  • docs/integrations/harness/codex.mdx
  • pypi.md
  • examples/harbor/calculator/README.md
  • docs/integrations/harness/claude.mdx
  • adapters/codex/README.md
  • examples/harbor/swebench/README.md
  • examples/harbor/README.md
  • docs/getting-started/install.mdx
  • README.md
  • adapters/claude/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:

  • adapters/hermes/README.md
  • CONTRIBUTING.md
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • adapters/deepagents/README.md
  • pypi.md
  • examples/harbor/calculator/README.md
  • adapters/codex/README.md
  • examples/harbor/swebench/README.md
  • examples/harbor/README.md
  • README.md
  • adapters/claude/README.md
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
**/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:

  • adapters/hermes/README.md
  • adapters/deepagents/README.md
  • examples/harbor/calculator/README.md
  • adapters/codex/README.md
  • examples/harbor/swebench/README.md
  • examples/harbor/README.md
  • README.md
  • adapters/claude/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.

Files:

  • adapters/hermes/README.md
  • docs/sdk/python.mdx
  • docs/getting-started/quickstart.mdx
  • CONTRIBUTING.md
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • adapters/deepagents/README.md
  • docs/integrations/harness/hermes.mdx
  • docs/integrations/harness/deepagents.mdx
  • docs/integrations/harness/codex.mdx
  • pypi.md
  • examples/harbor/calculator/README.md
  • docs/integrations/harness/claude.mdx
  • adapters/codex/README.md
  • examples/harbor/swebench/README.md
  • examples/harbor/README.md
  • docs/getting-started/install.mdx
  • README.md
  • adapters/claude/README.md
**/*.md

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

Documentation and examples must be updated consistently with changes to public behavior and reviewed for NVIDIA technical-writing style.

Files:

  • adapters/hermes/README.md
  • CONTRIBUTING.md
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • adapters/deepagents/README.md
  • pypi.md
  • examples/harbor/calculator/README.md
  • adapters/codex/README.md
  • examples/harbor/swebench/README.md
  • examples/harbor/README.md
  • README.md
  • adapters/claude/README.md
adapters/**/*

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

Place each repository adapter under adapters/<name>/, keep it independent and small, and include LICENSE -> ../../LICENSE, README.md, fabric-adapter.json, language-native package and lock files, a source entry point, and focused tests.

Files:

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

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

Add tests covering descriptor shape and exact capabilities, positive normalized-surface mappings, unsupported values and unenforceable policy rejection, result normalization without secret leakage, one-shot execution, continuation, runtime isolation, and a packaged-entry-point subprocess.

Files:

  • 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
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, a canonical typed SDK example, and a canonical harness-native YAML fixture when required.

Files:

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

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

Documentation, examples, CI workflows, and install/build commands must use current package names, import paths, and build commands consistently.

Files:

  • adapters/hermes/README.md
  • tests/python/test_readme_examples.py
  • CONTRIBUTING.md
  • tests/adapters/test_hermes_config_builder.py
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/deepagents/README.md
  • pypi.md
  • examples/harbor/calculator/README.md
  • adapters/codex/README.md
  • examples/harbor/swebench/README.md
  • tests/python/test_harbor_integration.py
  • examples/harbor/README.md
  • tests/adapters/test_adapter_package_metadata.py
  • tests/integrations/test_harbor_runner.py
  • README.md
  • adapters/claude/README.md
{pyproject.toml,python/pyproject.toml,Cargo.toml,**/*.{md,rst}}

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

Public packaging changes must be reflected in release-facing documentation, and editable maturin builds must continue producing nemo_fabric._native.

Files:

  • adapters/hermes/README.md
  • CONTRIBUTING.md
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • adapters/deepagents/README.md
  • pypi.md
  • examples/harbor/calculator/README.md
  • adapters/codex/README.md
  • examples/harbor/swebench/README.md
  • examples/harbor/README.md
  • pyproject.toml
  • README.md
  • adapters/claude/README.md
**/{README.md,*.md,*.mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

For documentation changes, update affected README, SDK/API reference, adapter/example, integration, and support documentation; run just docs for docs site changes.

Files:

  • adapters/hermes/README.md
  • docs/sdk/python.mdx
  • docs/getting-started/quickstart.mdx
  • CONTRIBUTING.md
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • adapters/deepagents/README.md
  • docs/integrations/harness/hermes.mdx
  • docs/integrations/harness/deepagents.mdx
  • docs/integrations/harness/codex.mdx
  • pypi.md
  • examples/harbor/calculator/README.md
  • docs/integrations/harness/claude.mdx
  • adapters/codex/README.md
  • examples/harbor/swebench/README.md
  • examples/harbor/README.md
  • docs/getting-started/install.mdx
  • README.md
  • adapters/claude/README.md
**/*.{html,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Every HTML or Markdown file must include the specified SPDX copyright and Apache-2.0 license header using HTML comment syntax.

Files:

  • adapters/hermes/README.md
  • CONTRIBUTING.md
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • adapters/deepagents/README.md
  • pypi.md
  • examples/harbor/calculator/README.md
  • adapters/codex/README.md
  • examples/harbor/swebench/README.md
  • examples/harbor/README.md
  • README.md
  • adapters/claude/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/hermes/README.md
  • examples/harbor/calculator/task/environment/Dockerfile
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/deepagents/README.md
  • adapters/claude/pyproject.toml
  • examples/harbor/calculator/README.md
  • adapters/codex/README.md
  • adapters/codex/pyproject.toml
  • examples/harbor/swebench/README.md
  • adapters/deepagents/pyproject.toml
  • examples/harbor/README.md
  • adapters/hermes/pyproject.toml
  • adapters/claude/README.md
{*.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:

  • adapters/hermes/README.md
  • docs/sdk/python.mdx
  • docs/getting-started/quickstart.mdx
  • CONTRIBUTING.md
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • adapters/deepagents/README.md
  • docs/integrations/harness/hermes.mdx
  • docs/integrations/harness/deepagents.mdx
  • docs/integrations/harness/codex.mdx
  • pypi.md
  • examples/harbor/calculator/README.md
  • docs/integrations/harness/claude.mdx
  • adapters/codex/README.md
  • examples/harbor/swebench/README.md
  • examples/harbor/README.md
  • docs/getting-started/install.mdx
  • README.md
  • adapters/claude/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:

  • docs/sdk/python.mdx
  • docs/getting-started/quickstart.mdx
  • docs/integrations/harness/hermes.mdx
  • docs/integrations/harness/deepagents.mdx
  • docs/integrations/harness/codex.mdx
  • examples/harbor/calculator/README.md
  • docs/integrations/harness/claude.mdx
  • examples/harbor/swebench/README.md
  • examples/harbor/README.md
  • docs/getting-started/install.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:

  • docs/sdk/python.mdx
  • docs/getting-started/quickstart.mdx
  • docs/integrations/harness/hermes.mdx
  • docs/integrations/harness/deepagents.mdx
  • docs/integrations/harness/codex.mdx
  • examples/harbor/calculator/README.md
  • docs/integrations/harness/claude.mdx
  • examples/harbor/swebench/README.md
  • examples/harbor/README.md
  • docs/getting-started/install.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.

Every MDX file must include the specified SPDX copyright and Apache-2.0 license header using a JSX comment.

Files:

  • docs/sdk/python.mdx
  • docs/getting-started/quickstart.mdx
  • docs/integrations/harness/hermes.mdx
  • docs/integrations/harness/deepagents.mdx
  • docs/integrations/harness/codex.mdx
  • docs/integrations/harness/claude.mdx
  • docs/getting-started/install.mdx
docs/**/*.{md,mdx,yml}

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

Run just docs when the documentation site changes.

Files:

  • docs/sdk/python.mdx
  • docs/getting-started/quickstart.mdx
  • docs/integrations/harness/hermes.mdx
  • docs/integrations/harness/deepagents.mdx
  • docs/integrations/harness/codex.mdx
  • docs/integrations/harness/claude.mdx
  • docs/getting-started/install.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/sdk/python.mdx
  • docs/getting-started/quickstart.mdx
  • docs/integrations/harness/hermes.mdx
  • docs/integrations/harness/deepagents.mdx
  • docs/integrations/harness/codex.mdx
  • docs/integrations/harness/claude.mdx
  • docs/getting-started/install.mdx
docs/sdk/python.mdx

📄 CodeRabbit inference engine (AGENTS.md)

Keep docs/sdk/python.mdx current when the public Python API changes.

Files:

  • docs/sdk/python.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.
For links between files under docs/, require paths relative to the source file with the target file's .mdx extension so they work in both Fern builds and repository browsers. Flag Fern site-root links such as NeMo Fabric overview; use the repository-relative equivalent, such as NeMo Fabric overview.

Files:

  • docs/sdk/python.mdx
  • docs/getting-started/quickstart.mdx
  • docs/integrations/harness/hermes.mdx
  • docs/integrations/harness/deepagents.mdx
  • docs/integrations/harness/codex.mdx
  • docs/integrations/harness/claude.mdx
  • docs/getting-started/install.mdx
  • README.md
.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.

Repository maintainer skills belong under .agents/skills/ and should use descriptive, task-based names such as contribute-api and validate-change.

Files:

  • .agents/skills/python-tests/SKILL.md
  • .agents/skills/contribute-adapter/SKILL.md
  • .agents/skills/maintain-packaging/SKILL.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/python/test_readme_examples.py
  • tests/adapters/test_hermes_config_builder.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/python/test_harbor_integration.py
  • tests/adapters/test_adapter_package_metadata.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.

Keep package names, import paths, and module names internally consistent, and ensure native extension artifacts retain the expected nemo_fabric._native name and placement under python/src/nemo_fabric.

Files:

  • tests/python/test_readme_examples.py
  • tests/adapters/test_hermes_config_builder.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/python/test_harbor_integration.py
  • tests/adapters/test_adapter_package_metadata.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.

**/*.{py,pyi}: Use type annotations for public Python APIs and keep native Python binding declarations synchronized with their Rust implementations.
Every Python source or stub file must include the specified SPDX copyright and Apache-2.0 license header using Python comment syntax.

Files:

  • tests/python/test_readme_examples.py
  • tests/adapters/test_hermes_config_builder.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/python/test_harbor_integration.py
  • tests/adapters/test_adapter_package_metadata.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.

Use language-appropriate naming: snake_case for Rust and Python functions and variables; PascalCase for Rust types and Python classes.

Files:

  • tests/python/test_readme_examples.py
  • tests/adapters/test_hermes_config_builder.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/python/test_harbor_integration.py
  • tests/adapters/test_adapter_package_metadata.py
  • tests/integrations/test_harbor_runner.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/python/test_readme_examples.py
  • tests/adapters/test_hermes_config_builder.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/python/test_harbor_integration.py
  • tests/adapters/test_adapter_package_metadata.py
  • tests/integrations/test_harbor_runner.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:

  • tests/python/test_readme_examples.py
  • tests/adapters/test_hermes_config_builder.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/claude/pyproject.toml
  • adapters/codex/pyproject.toml
  • tests/python/test_harbor_integration.py
  • adapters/deepagents/pyproject.toml
  • tests/adapters/test_adapter_package_metadata.py
  • adapters/hermes/pyproject.toml
  • tests/integrations/test_harbor_runner.py
  • pyproject.toml
**/*.{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:

  • tests/python/test_readme_examples.py
  • tests/adapters/test_hermes_config_builder.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/claude/pyproject.toml
  • adapters/codex/pyproject.toml
  • tests/python/test_harbor_integration.py
  • adapters/deepagents/pyproject.toml
  • tests/adapters/test_adapter_package_metadata.py
  • adapters/hermes/pyproject.toml
  • tests/integrations/test_harbor_runner.py
  • pyproject.toml
tests/**/*.py

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

tests/**/*.py: Use pytest to run Python tests.
Do not add @pytest.mark.asyncio to tests; async tests are automatically detected by the async runner.
Do not add -> None return annotations to test functions.
When mocking classes, use unittest.mock.MagicMock or AsyncMock, using spec when necessary; do not define replacement classes.
Prefix mocked class names with mock, not fake.
Prefer pytest fixtures over helper methods.
Define fixtures shared across multiple test files in conftest.py rather than repeating them.
Define fixtures using @pytest.fixture(name="<fixture_name>") and a <fixture_name>_fixture function; specify scope only when it is not function.
Prefer pytest.mark.parametrize over separate tests for different input types.
Use @pytest.mark.usefixtures when a fixture is needed but its value is unused or it returns no value.
Avoid defensive programming in tests; access required values directly so missing data fails loudly and clearly.
When adapter installation metadata changes, assert the published package composition directly, including root runtime dependency versions, harness extras, leaf ownership, adapter-tests installation, and full/relay behavior.
Use the documented pytest commands: uv run pytest -k "<pattern>" for focused tests and uv run pytest for the full suite.

Files:

  • tests/python/test_readme_examples.py
  • tests/adapters/test_hermes_config_builder.py
  • tests/python/test_harbor_integration.py
  • tests/adapters/test_adapter_package_metadata.py
  • tests/integrations/test_harbor_runner.py
**/*.{rs,py,pyi,json}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

When adding functionality, include tests in the corresponding Rust crate or relevant tests/ area; public contract changes must keep checked-in JSON Schema snapshots and native Python binding declarations synchronized.

Files:

  • tests/python/test_readme_examples.py
  • tests/adapters/test_hermes_config_builder.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/python/test_harbor_integration.py
  • tests/adapters/test_adapter_package_metadata.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/python/test_readme_examples.py
  • tests/adapters/test_hermes_config_builder.py
  • tests/python/test_harbor_integration.py
  • tests/adapters/test_adapter_package_metadata.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_hermes_config_builder.py
  • tests/adapters/test_adapter_package_metadata.py
skills/**

📄 CodeRabbit inference engine (AGENTS.md)

skills/**: Keep consumer skills under skills/ self-contained and dependent only on supported public Python SDK contracts and published documentation; do not add repository-internal contribution guidance.
Keep consumer skills in parity with the public SDK guide, model, and type details when the Python/Rust binding contract changes.

Files:

  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
**/SKILL.md

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

**/SKILL.md: Maintainer skills must begin with YAML frontmatter containing at least name and description.
Maintainer skills may reference repository internals, build and test commands, and contribution workflows, but external usage guidance must remain in the top-level skills/ directory.

Files:

  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md

⚙️ CodeRabbit configuration file

**/SKILL.md: Do not flag SKILL.md files for missing SPDX headers. Skill entrypoints intentionally start with YAML frontmatter instead.
Verify that every SKILL.md keeps valid YAML frontmatter with at least name and description fields before the Markdown body.

Files:

  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.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
.github/workflows/**/*.{yml,yaml}

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

GitHub Actions workflows must use pinned actions and be validated locally when maintained.

Files:

  • .github/workflows/ci_python.yml
.github/workflows/*.{yml,yaml}

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

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

Files:

  • .github/workflows/ci_python.yml
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 abstraction for one adapter.
Use the complete Fabric invocation for adapters consuming normalized configuration or runtime context. Treat config, capability_plan, telemetry_plan, and runtime_context as authoritative, reserving harness.settings for harness-specific behavior.
Apply configuration precedence in this order: normalized config, Fabric-resolved plans and runtime context, harness-specific settings, then descriptor and adapter defaults. Reject conflicting duplicate declarations or unsupported behavior with an actionable field-specific error; never silently drop configuration.
Run dependency and authentication preflight before invoking the harness; declare fixed dependencies in descriptor requirements and 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 on stderr.
Return harness-level invoke failures in a successful lifecycle response as adapter output with response: null, failed: true, and structured error containing code, message, retryable, and optional metadata.
Do not emit NeMo Relay stream records on adapter stdout; return exactly one terminal lifecycle response while Relay sends raw records through the SDK-owned out-of-band NDJSON ATOF endpoint.
Scope workspace, generated configuration, state, sessions, and artifacts to resolved runtime context, and isolate stateful adap...

Files:

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

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

Claim only capabilities that the adapter implements and tests end to end. Reject unsupported providers, capability values, transports, fields, or unenforceable policies, and assert exact descriptor capability values in focused tests.

Files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
**/*.{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.

For Rust changes, run cargo fmt --all, verify formatting with cargo fmt --all -- --check, and compile with cargo check --workspace --locked.

Files:

  • adapters/claude/pyproject.toml
  • adapters/codex/pyproject.toml
  • adapters/deepagents/pyproject.toml
  • adapters/hermes/pyproject.toml
  • 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:

  • adapters/claude/pyproject.toml
  • adapters/codex/pyproject.toml
  • adapters/deepagents/pyproject.toml
  • adapters/hermes/pyproject.toml
  • 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:

  • adapters/claude/pyproject.toml
  • adapters/codex/pyproject.toml
  • adapters/deepagents/pyproject.toml
  • adapters/hermes/pyproject.toml
  • 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:

  • adapters/claude/pyproject.toml
  • adapters/codex/pyproject.toml
  • adapters/deepagents/pyproject.toml
  • adapters/hermes/pyproject.toml
  • 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:

  • adapters/claude/pyproject.toml
  • adapters/codex/pyproject.toml
  • adapters/deepagents/pyproject.toml
  • adapters/hermes/pyproject.toml
  • pyproject.toml
adapters/**/pyproject.toml

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

adapters/**/pyproject.toml: Keep leaf adapter runtime dependencies razor-thin and adapter-owned; do not declare the wrapped harness/SDK or dependencies already declared by its supported package. Provide dependency-free fallbacks for optional libraries.
Give every installable Python leaf adapter a harness extra, a full extra for package-installable optional integrations, and a relay extra when it imports NeMo Relay Python APIs; if Relay is external, omit relay and make full equivalent to harness.

Files:

  • adapters/claude/pyproject.toml
  • adapters/codex/pyproject.toml
  • adapters/deepagents/pyproject.toml
  • adapters/hermes/pyproject.toml
**/{Cargo.toml,pyproject.toml}

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

**/{Cargo.toml,pyproject.toml}: Treat every direct dependency as a long-lived API, supply-chain, and licensing commitment; prefer the standard library, existing dependencies, or a small local implementation when appropriate.
When selecting dependencies, prefer maintained OSS options with clear SPDX metadata, smaller transitive graphs, and permissive licenses such as Apache-2.0, MIT, BSD, or ISC. Inspect resolved transitive dependencies, not only direct licenses.
Treat UNKNOWN, non-SPDX/custom, proprietary, source-available, copyleft, and network-copyleft licenses as explicit review points; route them to dependency approvers with distribution and linkage context rather than silently accepting or rejecting them.
For new dependencies, record the functional need, viable alternatives, why the selected dependency is the narrowest fit, and any unresolved licensing question.

Files:

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

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Every TOML, YAML, or shell file must include the specified SPDX copyright and Apache-2.0 license header using hash-comment syntax.

Files:

  • adapters/claude/pyproject.toml
  • adapters/codex/pyproject.toml
  • adapters/deepagents/pyproject.toml
  • adapters/hermes/pyproject.toml
  • 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.

Keep build, test, clean, and documentation recipes consistent with the current packaging and release workflow.

Files:

  • justfile
{pyproject.toml,justfile,uv.lock,**/ci/**/*}

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

Wire public adapter packages into language-native installation, descriptor, build, catalog, dependency, and CI surfaces; for Python update root extras, dependency groups, [tool.uv.sources], python_projects, catalogs, CI enumerations, and packaged descriptor data.

Files:

  • justfile
  • pyproject.toml
pyproject.toml

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

Keep nemo-fabric-runtime as an exact-version unconditional dependency of the root nemo-fabric metapackage, and give every installable Python adapter one canonical root extra depending on the matching adapter package and its harness extra.

Keep the root nemo-fabric package as a metapackage that unconditionally installs the exact-version nemo-fabric-runtime distribution; root harness extras must delegate to version-matched leaf adapter harness extras, without root adapter-only aliases.

pyproject.toml: Packaging metadata tests must verify that the root project unconditionally depends on the exact-version nemo-fabric-runtime distribution.
Packaging metadata tests must verify root harness extras delegate to matching leaf adapter harness extras, bare leaf dependencies remain adapter-owned, and the root adapter-tests group installs each leaf through its harness extra.
Packaging metadata tests must verify every leaf provides full; only adapters importing NeMo Relay Python APIs provide relay, while adapters using an external Relay executable have full equal to harness.

Files:

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

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

Keep workspace, Python, and lockfile versions aligned wherever required by the packaging configuration.

Files:

  • pyproject.toml
{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.

Files:

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

Timestamp: 2026-07-29T19:02:03.400Z
Learning: Read the authoritative reference surfaces before editing, use the closest existing adapter only for harness-specific patterns, and keep the change scoped to the adapter contract.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T19:02:03.400Z
Learning: Run the applicable validation matrix, including adapter tests, Python/Rust tests as relevant, lockfile and wheel generation for package changes, schema generation for schema changes, documentation generation for docs changes, pre-commit, and `git diff --check`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T19:02:26.252Z
Learning: Run tests for every language surface affected by a change; changes touching the Rust core or public schemas require both Rust and Python test suites.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T19:02:26.252Z
Learning: If a change affects public behavior, adapters, examples, or workspace structure, update the corresponding documentation in the same branch.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T19:02:26.252Z
Learning: Versioned release tags must use raw Rust-compatible SemVer without a leading `v`, such as `0.1.0` or `0.1.0-rc.1`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T19:02:26.252Z
Learning: All contributors must sign off every commit using `git commit -s`; unsigned commits are not accepted.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T19:02:26.252Z
Learning: Before submitting a pull request, identify an issue, run relevant tests, verify affected packages build, update documentation, and rebase onto the latest `main`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T19:02:26.252Z
Learning: Pull requests require at least one approving review, must have passing CI, and contributors should address feedback with additional commits without force-pushing during review.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T19:02:26.252Z
Learning: Use commit messages formatted as `type: short description`, with one of the documented types, and keep the first line under 72 characters.
📚 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.16.0)
tests/adapters/test_hermes_config_builder.py

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

(TRY003)

tests/integrations/test_harbor_runner.py

[warning] 325-325: Consider f-string instead of string join

Replace with f-string

(FLY002)

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

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

(template-injection)


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

(template-injection)


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

(template-injection)

🔇 Additional comments (34)
CONTRIBUTING.md (1)

54-67: LGTM!

README.md (1)

38-52: LGTM!

Also applies to: 73-80

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

10-48: LGTM!

Also applies to: 49-124, 126-160, 182-190

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

12-25: LGTM!

pypi.md (1)

34-113: LGTM!

docs/sdk/python.mdx (1)

509-509: LGTM!

skills/integrations/consumer/nemo-fabric-integrate/SKILL.md (1)

47-71: LGTM!

docs/integrations/harness/hermes.mdx (1)

15-55: LGTM!

adapters/claude/README.md (1)

12-31: LGTM!

Also applies to: 114-117

adapters/codex/README.md (1)

15-30: LGTM!

Also applies to: 66-66, 138-144

adapters/deepagents/README.md (1)

12-29: LGTM!

Also applies to: 49-49, 143-145

adapters/hermes/README.md (1)

12-31: LGTM!

Also applies to: 78-79

docs/integrations/harness/claude.mdx (1)

13-60: LGTM!

docs/integrations/harness/codex.mdx (1)

14-56: LGTM!

docs/integrations/harness/deepagents.mdx (1)

16-28: LGTM!

Also applies to: 34-56

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

52-83: LGTM!

Also applies to: 179-179

.agents/skills/maintain-packaging/SKILL.md (1)

37-43: LGTM!

.agents/skills/python-tests/SKILL.md (1)

39-52: LGTM!

adapters/claude/pyproject.toml (1)

32-38: LGTM!

adapters/codex/pyproject.toml (1)

32-38: LGTM!

adapters/deepagents/pyproject.toml (1)

37-48: LGTM!

adapters/hermes/pyproject.toml (1)

32-41: LGTM!

pyproject.toml (1)

40-58: LGTM!

Also applies to: 76-81

tests/adapters/test_adapter_package_metadata.py (1)

1-146: LGTM!

tests/python/test_readme_examples.py (1)

21-21: LGTM!

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

121-133: LGTM!

tests/adapters/test_hermes_config_builder.py (1)

6-9: LGTM!

Also applies to: 42-65

.github/workflows/ci_python.yml (1)

86-92: LGTM!

justfile (1)

260-264: LGTM!

Also applies to: 350-350, 421-421

examples/harbor/README.md (1)

118-120: LGTM!

Also applies to: 138-138

examples/harbor/calculator/README.md (1)

61-61: LGTM!

Also applies to: 81-81, 106-106, 148-148, 177-177

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

22-22: LGTM!

examples/harbor/swebench/README.md (1)

54-54: LGTM!

Also applies to: 75-75, 103-103, 141-141, 179-179, 197-197, 207-210, 231-231, 252-252, 263-263

tests/integrations/test_harbor_runner.py (1)

6-7: LGTM!

Also applies to: 32-38, 267-267, 296-307

Comment thread docs/integrations/harness/deepagents.mdx
Comment thread examples/harbor/README.md Outdated
Comment thread README.md Outdated
@zhongxuanwang-nv

Copy link
Copy Markdown
Member

Thank you so much Ajay for making this!!

Signed-off-by: Ajay Thorve <athorve@nvidia.com>
@AjayThorve

Copy link
Copy Markdown
Collaborator Author

/merge nosquash

@rapids-bot

rapids-bot Bot commented Jul 29, 2026

Copy link
Copy Markdown

Could not determine original ForwardMerger PR from branch name. The branch name should follow the pattern <target_branch>-merge-<source_branch> (e.g., branch-25.06-merge-branch-25.04 or main-merge-release/25.06). Please contact @rapidsdevops on Slack for assistance.

1 similar comment
@rapids-bot

rapids-bot Bot commented Jul 29, 2026

Copy link
Copy Markdown

Could not determine original ForwardMerger PR from branch name. The branch name should follow the pattern <target_branch>-merge-<source_branch> (e.g., branch-25.06-merge-branch-25.04 or main-merge-release/25.06). Please contact @rapidsdevops on Slack for assistance.

@AjayThorve
AjayThorve merged commit 2b4cf99 into NVIDIA:main Jul 29, 2026
31 checks passed
@coderabbitai coderabbitai Bot mentioned this pull request Jul 30, 2026
2 tasks
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.

3 participants