Skip to content

docs: Create separate pypi.md files for each Python package - #153

Closed
dagardner-nv wants to merge 13 commits into
NVIDIA:release/0.1from
dagardner-nv:david-pypi-119
Closed

docs: Create separate pypi.md files for each Python package#153
dagardner-nv wants to merge 13 commits into
NVIDIA:release/0.1from
dagardner-nv:david-pypi-119

Conversation

@dagardner-nv

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

Copy link
Copy Markdown
Collaborator

Overview

  • README.md files remain developer focused
  • pypi.md provides brief install instructions appropriate for presentation on pypi.org
  • Merge testing.md files back into the README.md files
  • Update project.url settings in pyproject.toml files

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

  • Closes FABRIC-119

  • I confirm this contribution is my own work, or I have the right to submit it under this project's license.

  • I searched existing issues and open pull requests, and this does not duplicate existing work.

Summary by CodeRabbit

  • New Features

    • Added clearer installation options for runtime, adapters, harnesses, and optional Relay support.
    • Added PyPI package pages and expanded deployment guidance, including separate environments.
    • Documented supported Python versions and adapter-specific compatibility requirements.
  • Documentation

    • Expanded Claude, Codex, Deep Agents, Hermes, Harbor, and general installation and testing guidance.
  • Bug Fixes

    • Improved Hermes configuration writing when PyYAML is unavailable.
  • Tests

    • Added validation for package metadata, extras, dependency composition, and documented installation commands.

zhongxuanwang-nv and others added 13 commits July 28, 2026 23:43
#### 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: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
Signed-off-by: David Gardner <dagardner@nvidia.com>
@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

This change establishes a thinner runtime/adapter packaging boundary, moves harness dependencies into adapter extras, adds metadata validation, updates CI and local installation workflows, and rewrites installation guidance and Harbor examples for the new runtime, harness, adapter, and Relay combinations.

Changes

Packaging and Installation

Layer / File(s) Summary
Define runtime and adapter packaging contracts
.agents/skills/*, pyproject.toml, python/*, adapters/*/pyproject.toml, adapters/*/pypi.md
Adapter harness dependencies are moved to optional extras; root extras delegate to leaf harness extras; runtime dependency and adapter-test group metadata are defined and documented.
Wire installation and metadata validation
justfile, .github/workflows/ci_python.yml, tests/adapters/*
Local and CI synchronization installs the adapter-tests group, while tests verify root and leaf dependency, extra, version, and fallback metadata.
Document installation scenarios
README.md, CONTRIBUTING.md, pypi.md, docs/getting-started/*, docs/sdk/python.mdx, skills/integrations/*
Installation instructions now distinguish runtime, adapter, harness, Relay, shared-environment, and separate-environment workflows.
Align adapter guides and harness behavior
adapters/{claude,codex,deepagents,hermes}/*, docs/integrations/harness/*
Adapter documentation covers extras, SDK requirements, Relay CLI or Python-package requirements, environment selection, testing, and adapter startup checks.
Update Harbor installation examples and assertions
examples/harbor/*, tests/integrations/test_harbor_runner.py, tests/python/test_harbor_integration.py, tests/python/test_readme_examples.py
Harbor commands remove redundant runtime extras, package pins and Docker installs are updated, and documentation assertions validate declared root extras.

Estimated code review effort: 3 (Moderate) | ~30 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 follows Conventional Commits and accurately summarizes the PR’s main documentation split.
Description check ✅ Passed The description includes an overview, related issue, and required confirmations, though the reviewer-start section is missing.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@github-actions

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🤖 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 121-126: Update the documentation in preflight_check() to describe
the deepagents import and model-provider credential requirements as being
validated during adapter startup, matching its call from start(). Do not imply
that validation occurs before each invoke().
- Around line 128-133: Update the Deep Agents preflight around
importlib.util.find_spec to import and validate the create_deep_agent symbol
itself, rather than only checking package presence. Catch failures from that
import and raise the existing RuntimeError with the same adapter-environment
message, ensuring missing or broken exports fail during startup.

In `@CONTRIBUTING.md`:
- Around line 57-67: Add explicit local wheel-install commands for both split
Hermes distributions in the adapter installation section: one using the
[harness] extra and one installing the bare nemo-fabric-adapters-hermes package.
Keep the existing explanation about environments that already manage a
compatible Hermes Agent installation.

In `@python/pypi.md`:
- Around line 34-35: Update the NVIDIA NeMo Fabric repository link in the
surrounding installation and usage guidance to use the canonical URL casing,
changing the repository segment from NVIDIA/nemo-fabric to NVIDIA/NeMo-Fabric
while preserving the link destination and surrounding text.

In `@tests/adapters/test_hermes_config_builder.py`:
- Around line 50-53: Update import_without_yaml to raise ImportError without a
custom message when name is "yaml", preserving the existing fallback behavior
and real_import delegation for all other modules.
🪄 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: a447a2ba-ad9e-4fbf-be2e-1f3aa429edc9

📥 Commits

Reviewing files that changed from the base of the PR and between d438ac3 and 366bd8a.

⛔ 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 (45)
  • .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/pypi.md
  • adapters/claude/pyproject.toml
  • adapters/claude/testing.md
  • adapters/codex/README.md
  • adapters/codex/pypi.md
  • adapters/codex/pyproject.toml
  • adapters/codex/testing.md
  • adapters/common/pypi.md
  • adapters/common/pyproject.toml
  • adapters/deepagents/README.md
  • adapters/deepagents/pypi.md
  • adapters/deepagents/pyproject.toml
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/README.md
  • adapters/hermes/pypi.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
  • python/pypi.md
  • python/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
💤 Files with no reviewable changes (2)
  • adapters/codex/testing.md
  • adapters/claude/testing.md
📜 Review details
⏰ Context from checks skipped due to timeout. (8)
  • GitHub Check: Test (Python 3.14, windows-amd64)
  • GitHub Check: Test (Python 3.11, windows-amd64)
  • GitHub Check: Test (Python 3.13, windows-amd64)
  • GitHub Check: Pre-commit
  • GitHub Check: Test (Python 3.14, macos-arm64)
  • GitHub Check: Test (Python 3.13, macos-arm64)
  • GitHub Check: Test (Python 3.11, linux-arm64)
  • GitHub Check: Test (Python 3.12, windows-amd64)
🧰 Additional context used
📓 Path-based instructions (51)
**/*

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

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

Run cargo fmt --all and verify formatting with cargo fmt --all -- --check for Rust changes.

Files:

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

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

Keep workspace, Python, and lockfile versions aligned where required, and review dependency changes using the resolved transitive graph rather than only direct dependencies.

Files:

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

  • python/pyproject.toml
  • adapters/common/pyproject.toml
  • adapters/codex/pyproject.toml
  • adapters/hermes/pyproject.toml
  • adapters/claude/pyproject.toml
  • adapters/deepagents/pyproject.toml
  • pyproject.toml
python/pyproject.toml

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

Keep project.dynamic = ["version"]; do not add a literal project.version, because Maturin derives the runtime version from Cargo metadata.

Keep leaf adapters adapter-only by default. Every leaf must provide harness and full; provide relay only when the adapter imports the NeMo Relay Python package. For external Relay executables, full must equal harness.

Files:

  • python/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:

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

  • python/pyproject.toml
  • tests/python/test_readme_examples.py
  • adapters/common/pyproject.toml
  • adapters/codex/pyproject.toml
  • tests/adapters/test_hermes_config_builder.py
  • adapters/hermes/pyproject.toml
  • adapters/claude/pyproject.toml
  • tests/python/test_harbor_integration.py
  • adapters/deepagents/pyproject.toml
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • pyproject.toml
  • tests/adapters/test_adapter_package_metadata.py
  • tests/integrations/test_harbor_runner.py
**/*.{toml,lock,json}

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

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; explicitly review UNKNOWN, custom, proprietary, source-available, copyleft, and network-copyleft terms with dependency approvers.

Files:

  • python/pyproject.toml
  • adapters/common/pyproject.toml
  • adapters/codex/pyproject.toml
  • adapters/hermes/pyproject.toml
  • adapters/claude/pyproject.toml
  • adapters/deepagents/pyproject.toml
  • pyproject.toml
**/*.{md,mdx,py,rs,toml,yml,yaml}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Update corresponding documentation when public behavior, adapters, examples, or workspace structure changes.

Files:

  • python/pyproject.toml
  • docs/getting-started/quickstart.mdx
  • adapters/common/pypi.md
  • adapters/codex/pypi.md
  • adapters/hermes/pypi.md
  • adapters/deepagents/pypi.md
  • examples/harbor/calculator/README.md
  • adapters/claude/pypi.md
  • CONTRIBUTING.md
  • tests/python/test_readme_examples.py
  • python/pypi.md
  • docs/sdk/python.mdx
  • adapters/common/pyproject.toml
  • docs/integrations/harness/hermes.mdx
  • examples/harbor/README.md
  • adapters/hermes/README.md
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • adapters/codex/pyproject.toml
  • docs/integrations/harness/deepagents.mdx
  • docs/integrations/harness/codex.mdx
  • tests/adapters/test_hermes_config_builder.py
  • adapters/hermes/pyproject.toml
  • adapters/claude/pyproject.toml
  • tests/python/test_harbor_integration.py
  • adapters/deepagents/README.md
  • adapters/deepagents/pyproject.toml
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/codex/README.md
  • pyproject.toml
  • docs/integrations/harness/claude.mdx
  • docs/getting-started/install.mdx
  • tests/adapters/test_adapter_package_metadata.py
  • README.md
  • examples/harbor/swebench/README.md
  • pypi.md
  • tests/integrations/test_harbor_runner.py
  • adapters/claude/README.md
**/*.{rs,py,html,md,mdx,toml,yml,yaml,sh,bash}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

All source files must include the appropriate SPDX license header and comment syntax for their file type.

Files:

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

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

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

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

Files:

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

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

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

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

Keep package names, import paths, and module names internally consistent, and update documentation and examples to use current install, import, and build commands.

Files:

  • adapters/common/pypi.md
  • adapters/codex/pypi.md
  • adapters/hermes/pypi.md
  • adapters/deepagents/pypi.md
  • examples/harbor/calculator/README.md
  • adapters/claude/pypi.md
  • CONTRIBUTING.md
  • tests/python/test_readme_examples.py
  • python/pypi.md
  • examples/harbor/README.md
  • adapters/hermes/README.md
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • tests/adapters/test_hermes_config_builder.py
  • tests/python/test_harbor_integration.py
  • adapters/deepagents/README.md
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/codex/README.md
  • tests/adapters/test_adapter_package_metadata.py
  • README.md
  • examples/harbor/swebench/README.md
  • pypi.md
  • tests/integrations/test_harbor_runner.py
  • 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/common/pypi.md
  • adapters/codex/pypi.md
  • adapters/hermes/pypi.md
  • adapters/deepagents/pypi.md
  • examples/harbor/calculator/README.md
  • adapters/claude/pypi.md
  • adapters/common/pyproject.toml
  • examples/harbor/README.md
  • examples/harbor/calculator/task/environment/Dockerfile
  • adapters/hermes/README.md
  • adapters/codex/pyproject.toml
  • adapters/hermes/pyproject.toml
  • adapters/claude/pyproject.toml
  • adapters/deepagents/README.md
  • adapters/deepagents/pyproject.toml
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/codex/README.md
  • examples/harbor/swebench/README.md
  • adapters/claude/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/maintain-packaging/SKILL.md
  • .agents/skills/python-tests/SKILL.md
  • .agents/skills/contribute-adapter/SKILL.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/calculator/README.md
  • examples/harbor/README.md
  • adapters/hermes/README.md
  • adapters/deepagents/README.md
  • adapters/codex/README.md
  • README.md
  • examples/harbor/swebench/README.md
  • adapters/claude/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
.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
**/*.{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
  • tests/python/test_harbor_integration.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.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.

Files:

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

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

Files:

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

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

Files:

  • tests/python/test_readme_examples.py
  • tests/adapters/test_hermes_config_builder.py
  • tests/python/test_harbor_integration.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.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
  • tests/python/test_harbor_integration.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • tests/adapters/test_adapter_package_metadata.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 annotations to test functions.
When mocking a class, use unittest.mock.MagicMock or AsyncMock, with spec when necessary, rather than defining a new class.
Prefix mocked class names with mock, not fake.
Prefer pytest fixtures over helper methods.
If a fixture is needed in multiple test files, define it in conftest.py instead of repeating it.
Define fixtures using @pytest.fixture(name="<fixture_name>") 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 returned value is unused.
Use os.environ to modify environment variables in tests; do not use monkeypatch.setenv, because tests/conftest.py provides an autouse restore_environ_fixture that restores the original environment.
Avoid defensive programming in tests; access expected values directly so missing data raises a clear failure, such as using results["data"] instead of results.get("data").
Packaging metadata tests must assert that the root project unconditionally depends on the exact-version nemo-fabric-runtime distribution.
Packaging metadata tests must assert that each root harness extra delegates to the matching version of the leaf adapter's harness extra.
Packaging metadata tests must assert that bare leaf dependencies remain adapter-owned and that the root adapter-tests dependency group installs each leaf through its harness extra.
Packaging metadata tests must assert that every leaf provides full; only adapters importing NeMo Relay Python APIs provide relay; adapters using an external Relay executable must have full equal to harness.

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; keep checked-in JSON Schema snapshots and native Python binding declarations synchronized for public contract changes.

Files:

  • tests/python/test_readme_examples.py
  • tests/adapters/test_hermes_config_builder.py
  • tests/python/test_harbor_integration.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.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
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
{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/common/pyproject.toml
  • adapters/codex/pyproject.toml
  • adapters/hermes/pyproject.toml
  • adapters/claude/pyproject.toml
  • adapters/deepagents/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 and test dependency-free fallbacks for optional libraries.
Give every leaf adapter a harness extra for supported harness packages and a full extra for package-installable optional integrations; provide a relay extra when importing NeMo Relay Python APIs, but not when Relay is an external executable.

Files:

  • adapters/common/pyproject.toml
  • adapters/codex/pyproject.toml
  • adapters/hermes/pyproject.toml
  • adapters/claude/pyproject.toml
  • adapters/deepagents/pyproject.toml
adapters/*/{pyproject.toml,uv.lock,README.md,LICENSE,fabric-adapter.json}

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

A Python adapter should include LICENSE -> ../../LICENSE, README.md, fabric-adapter.json, pyproject.toml, uv.lock, a source entry point, and focused adapter tests, while remaining independent and small.

Files:

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

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

Files:

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

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

adapters/*/src/**/*.py: Use the existing Fabric python or process runner and normalized request/result contracts; do not add a runner or one-adapter abstraction.
Consume the complete Fabric invocation and treat config, capability_plan, telemetry_plan, and runtime_context as authoritative; reserve 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 error; never silently drop configuration.
Validate fixed dependencies, selected versions, hooks, and credentials before invoking the harness, 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 as successful lifecycle responses 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; Runtime.invoke_stream() uses the SDK-owned NDJSON endpoint while the adapter returns exactly one terminal lifecycle response.
Scope workspace, generated config, state, sessions, and artifacts to the resolved runtime context, and isolate stateful adapters by Fabric runtime ID.
Keep stdout stable by emitting response plus adapter-specific extensions such as error, harness events, usage, and session IDs; Fabric supplies top-level identity, lifecycle IDs, status, artifacts, telemetry, and metadata.
Claim capabilit...

Files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
pyproject.toml

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

pyproject.toml: 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 delegating to the matching nemo-fabric-adapters-<adapter>[harness].
Install leaf adapters through their harness extras in the root adapter-tests dependency group; keep other test-only packages in a non-published group.

pyproject.toml: 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.
Prefer the standard library, an existing dependency, or a small local implementation before adding a Python dependency.

Packaging metadata must preserve the documented adapter dependency composition: exact-version root runtime dependency, root harness delegation, adapter-owned bare leaf dependencies, root adapter-tests harness installation, and the specified full/relay extras.

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

Wire public Python adapter packages into python_projects and applicable installation, build, catalog, and CI surfaces; ship descriptors under share/nemo-fabric/adapters/<name>.

Keep build, test, clean, and documentation recipes aligned with current package names, build commands, and generated artifact locations.

Files:

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

Timestamp: 2026-07-29T17:59:00.173Z
Learning: Read the authoritative reference surfaces before editing, and use the closest existing adapter only for harness-specific patterns rather than the core contract.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T17:59:00.173Z
Learning: Run the applicable validation matrix, including adapter tests, Python and Rust tests where relevant, lockfile and wheel generation for packaging 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-29T17:59:00.173Z
Learning: Keep the change scoped and ensure package metadata, runtime and test dependencies, installation, resolution, documentation, examples, fixtures, generated artifacts, and CI catalogs agree without contract drift or unrelated changes.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T17:59:23.555Z
Learning: All contributors must sign off every commit with `git commit -s`; unsigned-off commits will not be accepted.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T17:59:23.555Z
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-29T17:59:23.555Z
Learning: All pull requests require at least one approving review, and CI must pass before merging.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T17:59:23.555Z
Learning: Address review feedback by pushing additional commits; do not force-push during review.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T17:59:23.555Z
Learning: Use commit messages in the format `type: short description`, with an allowed type such as `feat`, `fix`, `docs`, `test`, `refactor`, `chore`, or `perf`; keep the first line under 72 characters.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-29T17:59:23.555Z
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`.
📚 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)

🪛 SkillSpector (2.4.4)
.agents/skills/contribute-adapter/SKILL.md

[error] 196: [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))


[error] 196: [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.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)

Comment on lines +121 to 126
These checks run during adapter startup. Core descriptor diagnostics do not
invoke adapter-specific preflight hooks, so they cannot verify these
prerequisites. At invocation time the ``deepagents`` package must be
importable and the configured model-provider credential must be present in
the environment.
"""

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Describe this as startup validation.

preflight_check() is called from start() at Line 480, not before every invoke(). Replace “At invocation time” with “During adapter startup,” unless validation is intentionally moved to each invocation.

🤖 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 `@adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py` around
lines 121 - 126, Update the documentation in preflight_check() to describe the
deepagents import and model-provider credential requirements as being validated
during adapter startup, matching its call from start(). Do not imply that
validation occurs before each invoke().

Comment on lines 128 to +133
import importlib.util

if importlib.util.find_spec("deepagents") is None:
raise RuntimeError(
"the 'deepagents' package is required for the Deep Agents adapter; install "
"it with the 'deepagents' extra (pip install nemo-fabric-adapters-deepagents)."
"a compatible Deep Agents harness in the adapter environment."

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

file='adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py'

echo '--- around preflight ---'
sed -n '110,150p' "$file"

echo
echo '--- around later create_deep_agent import/use ---'
rg -n "create_deep_agent|find_spec|importlib.util" "$file"
sed -n '490,530p' "$file"

Repository: NVIDIA/NeMo-Fabric

Length of output: 3783


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file='adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py'

python3 - <<'PY'
from pathlib import Path
p = Path('adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py')
text = p.read_text()
for needle in ['find_spec("deepagents")', 'create_deep_agent', 'importlib.util']:
    print(f'== {needle} ==')
    for i, line in enumerate(text.splitlines(), 1):
        if needle in line:
            print(i, line)
PY

Repository: NVIDIA/NeMo-Fabric

Length of output: 896


🏁 Script executed:

#!/bin/bash
set -euo pipefail

sed -n '120,140p' adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
printf '\n'
sed -n '500,520p' adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py

Repository: NVIDIA/NeMo-Fabric

Length of output: 1801


🏁 Script executed:

#!/bin/bash
set -euo pipefail

rg -n "find_spec\\(\"deepagents\"\\)|create_deep_agent|importlib\\.util" adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py

Repository: NVIDIA/NeMo-Fabric

Length of output: 762


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file='adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py'

printf '%s\n' '--- preflight ---'
sed -n '120,140p' "$file"
printf '\n%s\n' '--- later create_deep_agent usage ---'
sed -n '500,525p' "$file"
printf '\n%s\n' '--- symbol search ---'
rg -n 'find_spec\("deepagents"\)|create_deep_agent|importlib\.util' "$file"

Repository: NVIDIA/NeMo-Fabric

Length of output: 2624


Import create_deep_agent in preflight. find_spec("deepagents") only proves the package is present; it can still pass when the package import is broken or create_deep_agent is missing, so the later import fails outside the clearer startup error. Catch the import itself and raise the same runtime error.

🤖 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 `@adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py` around
lines 128 - 133, Update the Deep Agents preflight around
importlib.util.find_spec to import and validate the create_deep_agent symbol
itself, rather than only checking package presence. Catch failures from that
import and raise the existing RuntimeError with the same adapter-environment
message, ensuring missing or broken exports fail during startup.

Comment thread CONTRIBUTING.md
Comment on lines 57 to +67
Adapters are distributed as optional extras. For example, install the Hermes
Agent adapter with:
Agent adapter and harness with:

```bash
uv pip install --find-links ./dist "nemo-fabric[hermes]"
uv pip install --find-links ./dist "nemo-fabric[hermes-agent]"
```

To install only the Hermes adapter and its supported harness, use
`nemo-fabric-adapters-hermes[harness]`. Install
`nemo-fabric-adapters-hermes` without an extra when the environment already
manages a compatible Hermes Agent installation.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Show the Local Split-Environment Commands

Lines 64-67 name the leaf distributions but do not provide the uv pip install --find-links ./dist commands required to install locally built wheels. Add explicit harness and bare-adapter commands so this local-installation section is actionable.

Proposed fix
-To install only the Hermes adapter and its supported harness, use
-`nemo-fabric-adapters-hermes[harness]`. Install
-`nemo-fabric-adapters-hermes` without an extra when the environment already
-manages a compatible Hermes Agent installation.
+To install only the Hermes adapter and its supported harness, run:
+
+```bash
+uv pip install --find-links ./dist "nemo-fabric-adapters-hermes[harness]"
+```
+
+Install `nemo-fabric-adapters-hermes` without an extra when the environment
+already manages a compatible Hermes Agent installation.
🤖 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 `@CONTRIBUTING.md` around lines 57 - 67, Add explicit local wheel-install
commands for both split Hermes distributions in the adapter installation
section: one using the [harness] extra and one installing the bare
nemo-fabric-adapters-hermes package. Keep the existing explanation about
environments that already manage a compatible Hermes Agent installation.

Comment thread python/pypi.md
Comment on lines +34 to +35
for installation and usage guidance. Source code is available in the
[NVIDIA NeMo Fabric repository](https://github.com/NVIDIA/nemo-fabric/).

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use the Canonical Repository URL Casing.

Replace NVIDIA/nemo-fabric with NVIDIA/NeMo-Fabric to match the canonical repository URL used elsewhere. As per coding guidelines, preserve official capitalization; the PR objective also requires exact URL casing.

Proposed fix
-[NVIDIA NeMo Fabric repository](https://github.com/NVIDIA/nemo-fabric/).
+[NVIDIA NeMo Fabric repository](https://github.com/NVIDIA/NeMo-Fabric/).
📝 Committable suggestion

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

Suggested change
for installation and usage guidance. Source code is available in the
[NVIDIA NeMo Fabric repository](https://github.com/NVIDIA/nemo-fabric/).
for installation and usage guidance. Source code is available in the
[NVIDIA NeMo Fabric repository](https://github.com/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 `@python/pypi.md` around lines 34 - 35, Update the NVIDIA NeMo Fabric
repository link in the surrounding installation and usage guidance to use the
canonical URL casing, changing the repository segment from NVIDIA/nemo-fabric to
NVIDIA/NeMo-Fabric while preserving the link destination and surrounding text.

Source: Coding guidelines

Comment on lines +50 to +53
def import_without_yaml(name: str, *args: object, **kwargs: object) -> object:
if name == "yaml":
raise ImportError("No module named yaml")
return real_import(name, *args, **kwargs)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Remove the custom ImportError message.

The fallback test only needs the exception type; the message triggers Ruff TRY003.

Proposed fix
         if name == "yaml":
-            raise ImportError("No module named yaml")
+            raise ImportError from None
📝 Committable suggestion

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

Suggested change
def import_without_yaml(name: str, *args: object, **kwargs: object) -> object:
if name == "yaml":
raise ImportError("No module named yaml")
return real_import(name, *args, **kwargs)
def import_without_yaml(name: str, *args: object, **kwargs: object) -> object:
if name == "yaml":
raise ImportError from None
return real_import(name, *args, **kwargs)
🧰 Tools
🪛 Ruff (0.16.0)

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

(TRY003)

🤖 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 `@tests/adapters/test_hermes_config_builder.py` around lines 50 - 53, Update
import_without_yaml to raise ImportError without a custom message when name is
"yaml", preserving the existing fallback behavior and real_import delegation for
all other modules.

Source: Linters/SAST tools

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