Skip to content

feat: add persistent local adapter hosting#87

Merged
rapids-bot[bot] merged 34 commits into
NVIDIA:mainfrom
AjayThorve:feat/persistent-local-adapter-host
Jul 22, 2026
Merged

feat: add persistent local adapter hosting#87
rapids-bot[bot] merged 34 commits into
NVIDIA:mainfrom
AjayThorve:feat/persistent-local-adapter-host

Conversation

@AjayThorve

@AjayThorve AjayThorve commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator

Overview

Make persistent local hosting the only execution model for local process and python adapters. Fabric.run(...) remains the single-invocation convenience API, but it now uses the same start → invoke → stop lifecycle as Fabric.start_runtime(...); there is no second per-invocation adapter path.

The change also removes the temporary runtime.local_host descriptor marker, unused runner.callable metadata, direct adapter run(...) entrypoints, and cross-process session reconstruction. Runtime topology remains adapter-owned and is not exposed as a public FabricConfig strategy. Remote-service hosting remains out of scope.

Harness implementations

Each bundled adapter runs inside one persistent Python adapter host with an ordered start → invoke* → stop protocol.

Adapter State retained across turns Relay integration Per-turn behavior Stop behavior
Claude ClaudeSDKClient and in-memory Claude session identity Runtime-owned Relay CLI gateway plus generated Claude hooks Calls client.query(), validates stable session identity, and collects ATIF/ATOF Disconnects the client, stops the gateway, and removes the generated plugin
Codex AsyncCodex app-server client and SDK thread Runtime-owned Relay CLI gateway plus Codex SDK hooks Registers normalized skill roots once, starts the thread with normalized MCP config, and reuses that thread Closes the SDK client/app server, then stops the gateway
Deep Agents Compiled LangGraph agent, async checkpointer, and thread ID Relay Python SDK integration applied when compiling the agent Creates a fresh Relay plugin/request scope and callback for each invocation Closes the checkpointer; no gateway process
Hermes AIAgent, SessionDB, and in-memory conversation history Hermes Relay plugin context Finalizes and flushes Relay once after each invocation Closes the agent/database and exits the plugin context

Contract and lifecycle changes

  • Dispatch process and python adapter kinds through the persistent local-host transport by definition; a host crash or timeout terminates that runtime without respawn or request replay.
  • Narrow AdapterInvocation and the invoke wire payload to exactly runtime_context and request.
  • Send resolved config, base directory, capability plan, and telemetry plan once during lifecycle start. The common Python host passes each minimal invocation unchanged; an adapter retains any startup configuration it needs as runtime-owned state.
  • Remove the legacy Rust per-invocation runners and every bundled adapter's direct run(...) execution helper.
  • Remove persisted Claude session, Codex thread, Deep Agents thread-correlation, and Hermes history reload paths. Continuity is owned by the live runtime resources listed above.
  • Keep runner.module as the Python adapter entrypoint executed with python -m; remove runner.callable, which Fabric did not consume before or after this change.
  • Convert the scripted Process adapter, Harbor scripted adapter, and Hermes test shim to the same ordered lifecycle protocol.
  • Keep Relay resources aligned with their owner: gateways live for Claude/Codex runtimes, while Deep Agents request scopes and Hermes per-turn finalization remain invocation-scoped.
  • Regenerate JSON Schemas and Rust/Python API references, and synchronize the top-level README, adapter READMEs, Fern docs, notebook guidance, and exported consumer skill.

Consumer usage

A single invocation and a multi-turn runtime use the same lifecycle implementation:

fabric = Fabric()

result = await fabric.run(
    config,
    base_dir=base_dir,
    input="Inspect the repository",
)

async with await fabric.start_runtime(config, base_dir=base_dir) as runtime:
    first = await runtime.invoke(input="Inspect the repository")
    second = await runtime.invoke(input="Implement the fix")

There is no Python SDK signature break. There is an intentional adapter-boundary break: third-party local Process/Python adapters must implement the lifecycle protocol, and invoke messages no longer repeat the full configuration.

Validation

  • RUSTUP_TOOLCHAIN=1.94.0 cargo test --workspace --locked — 38 Rust unit tests passed, plus doctests
  • Rebuilt the editable native extension from this head with Maturin, then uv run --no-sync pytest -q — 427 passed, 14 credential-gated tests skipped
  • RUSTUP_TOOLCHAIN=1.94.0 cargo clippy --workspace --all-targets --locked -- -D warnings
  • RUSTUP_TOOLCHAIN=1.94.0 cargo fmt --all --check and git diff --check
  • RUSTUP_TOOLCHAIN=1.94.0 just docs — generated Python/Rust references; Fern config and strict broken-link checks passed with the expected unauthenticated redirect warning
  • pre-commit run --all-files — all hooks passed, including license-diff with no Rust or Python dependency changes
  • All commits include the DCO sign-off

Credential-backed live Claude, Codex, Deep Agents, and Hermes tests remain opt-in and were not run.

Where should the reviewer start?

Start with crates/fabric-core/src/runtime.rs for the minimal start/invoke wire boundary and persistent-only Process/Python dispatch. Then review adapters/common/src/nemo_fabric_adapters/common/lifecycle.py, followed by the ClaudeRuntime, CodexRuntime, DeepAgentsRuntime, and HermesRuntime implementations. The adapter tests show resource reuse, stable session/thread identity, Relay ownership, failure handling, and cleanup.

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

  • Closes FABRIC-59

  • 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 standardized persistent local-host runtimes with start/invoke/stop for bundled Claude, Codex, Deep Agents, and Hermes (and Process/Python local-host support).
    • Multi-turn invocations now reuse native runtime state; if the host crashes or times out, Fabric won’t silently recover or replay.
    • Relay observability and gateway lifecycle are now runtime-scoped for supported adapters.
  • Documentation
    • Expanded lifecycle and capability guidance, including “Single-Invocation” vs multi-turn terminology and updated Relay/auth ownership details, plus a new supported-harness comparison section.
  • Bug Fixes
    • Improved structured CLI failure reporting for run-plan errors.
  • Tests
    • Expanded coverage for lifecycle reuse, Relay behavior, timeouts/eviction, and end-to-end persistence; updated adapter runtime test flows.

@linear

linear Bot commented Jul 17, 2026

Copy link
Copy Markdown

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

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

Use the following commands to manage reviews:

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

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

This change introduces persistent local-host lifecycle execution in Fabric, updates four bundled adapters to retain native state, revises lifecycle schemas and descriptors, and expands runtime, Relay, CLI, integration-test, and documentation coverage.

Changes

Persistent local-host lifecycle

Layer / File(s) Summary
Lifecycle protocol and Fabric hosting
adapters/common/..., crates/fabric-core/..., schemas/...
Adds start/invoke/stop messaging, persistent host reuse, structured lifecycle errors, runtime-scoped Relay correlation, timeout/crash handling, artifact capture, and initialized-runtime invocation payloads.
Bundled adapter runtimes
adapters/{claude,codex,deepagents,hermes}/...
Adds lifecycle runtime classes that initialize SDK clients, graphs, sessions, checkpointers, and Relay resources once, reuse them across invocations, and clean them up during stop.
Validation and integration coverage
tests/adapters/..., tests/e2e/..., crates/fabric-core/src/runtime.rs
Tests protocol reuse, runtime identity, native-state persistence, Relay ownership, cleanup failures, timeout eviction, stderr capture, failure normalization, and stable host metadata.
Contracts and documentation
README.md, adapters/..., docs/..., skills/..., crates/fabric-cli/assets/...
Documents adapter-declared hosting, capability compatibility, runtime-scoped Relay behavior, single-invocation terminology, updated schemas, and lifecycle entrypoint descriptors.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 11.82% 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 uses valid Conventional Commits format and accurately summarizes the persistent local adapter hosting change.
Description check ✅ Passed The description includes the required overview, reviewer start point, related issue, checklist items, and sufficient implementation detail.
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: 8

🤖 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/common/src/nemo_fabric_adapters/common/lifecycle.py`:
- Around line 265-269: Update the LifecycleError handling around the invoke
operation so runtime_failed is set only for unexpected adapter execution or
response failures, not protocol or request-validation errors such as
lifecycle_runtime_mismatch or lifecycle_invalid_payload. Preserve the failure
response for all LifecycleError cases, and add a regression test covering a
mismatched invocation followed by a valid invocation on the active runtime.

In `@adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py`:
- Around line 377-381: Prevent duplicate Relay session finalization between
invoke() and stop(): update the stop() path or _finalize_relay_session() so the
same live agent/session is finalized only once. Preserve finalization for
sessions not already finalized and retain the existing invoke() cleanup
behavior.

In `@crates/fabric-core/src/runtime.rs`:
- Around line 1104-1105: Update the invoke exchange in the runtime lifecycle
flow around exchange_lifecycle_message to use a finite timeout instead of None;
when the timeout expires, evict the affected host, release any held host mutex
before terminating it, and ensure late responses cannot affect subsequent
requests. Add a host fixture that accepts invoke messages without responding,
and cover the timeout, eviction, and termination behavior while preserving
runtime lifecycle correctness.

In `@docs/sdk/python.mdx`:
- Around line 119-123: Update the runtime hosting documentation describing
adapter-owned native resources so it states that stop() attempts to release
them, rather than guaranteeing their release. Preserve the surrounding behavior
describing host startup and resource reuse, and align the wording with the
documented possibility of FabricRuntimeError during shutdown.

In `@README.md`:
- Around line 128-133: Update the README adapter matrix’s “Telemetry Providers”
column to use the exact telemetry descriptor values supported by each adapter,
such as atif, otel, and openinference, rather than labels like Relay or native.
Keep the entries aligned with the current adapter descriptors and ensure the
public documentation does not advertise unsupported configuration values.

In `@tests/adapters/test_adapters_common_lifecycle.py`:
- Around line 156-191: Update
test_lifecycle_host_scopes_invocation_telemetry_environment to set
FABRIC_TEST_LIFECYCLE_ENV through os.environ instead of monkeypatch.setenv,
relying on the repository’s autouse environment-restoration fixture while
preserving the existing host-value and invocation-value assertions.

In `@tests/adapters/test_claude_adapter.py`:
- Around line 535-536: Update the Claude runtime lifecycle tests around
ClaudeRuntime.start and the corresponding Relay test to remove the request field
from the invocation payload before calling start. Ensure start receives only the
request-free lifecycle payload, while preserving the full payload for
invocation-related assertions.

In `@tests/adapters/test_codex_adapter.py`:
- Around line 300-311: In the runtime lifecycle test around runtime.invoke and
runtime.stop, assert that stop_gateway has not been called after both
invocations and before runtime.stop(). Keep the existing final
stop_gateway.assert_called_once_with(process) assertion to verify cleanup occurs
specifically during runtime.stop().
🪄 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: b2401a94-9f7f-4f23-83e4-bd0ca35a8bc4

📥 Commits

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

📒 Files selected for processing (121)
  • README.md
  • adapters/claude/README.md
  • adapters/claude/fabric-adapter.json
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/README.md
  • adapters/codex/fabric-adapter.json
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • adapters/common/README.md
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • adapters/common/src/nemo_fabric_adapters/common/relay_gateway.py
  • adapters/deepagents/README.md
  • adapters/deepagents/fabric-adapter.json
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/README.md
  • adapters/hermes/fabric-adapter.json
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/error.rs
  • crates/fabric-core/src/lib.rs
  • crates/fabric-core/src/runtime.rs
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/constant-adapter-lifecycle-contract-version.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitykind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-controllocation.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-fabricdocument.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatifstorageconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofendpointfieldnamepolicy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofendpointtransport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofmode.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayotlptransport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayunsupportedbehavior.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-resolutionstrategy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-telemetryprovider.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-adapter-descriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-fabric-document.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-effective-config-from-config.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-effective-config-with-profiles.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-effective-config.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-effective-config.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-with-profiles.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-validate-agent-directory.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterlocalhostsupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterrequirements.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterruntimesupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetryprovidersupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetrysupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityroute.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilitytargetplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-effectiveconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-harnessconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-metadataconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-modelconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-profileconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-profileregistryconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatifconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofendpointconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relaycomponentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfigpolicy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayobservabilityconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayotlpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvedadapterdescriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimecapabilities.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimeconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-skillconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryproviderconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/enum-doctorstatus.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/fn-doctor-plan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorcheck.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorreport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/fn-version.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdx
  • docs/sdk/python.mdx
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
  • examples/harbor/swebench/adapters/hermes/fabric-adapter.json
  • schemas/SCHEMA.md
  • schemas/adapter-descriptor.schema.json
  • schemas/run-plan.schema.json
  • skills/nemo-fabric-integrate/SKILL.md
  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_claude.py
  • tests/e2e/test_codex.py
  • tests/e2e/test_deepagents.py
  • tests/e2e/test_hermes_e2e.py
  • tests/e2e/test_hermes_runtime.py
  • tests/fixtures/claude/mock-claude-cli.py
  • tests/python/test_environment_handle.py
💤 Files with no reviewable changes (1)
  • tests/fixtures/claude/mock-claude-cli.py

Comment thread adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
Comment thread adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
Comment thread crates/fabric-core/src/runtime.rs Outdated
Comment thread docs/sdk/python.mdx Outdated
Comment thread README.md Outdated
Comment thread tests/adapters/test_adapters_common_lifecycle.py Outdated
Comment thread tests/adapters/test_claude_adapter.py Outdated
Comment thread tests/adapters/test_codex_adapter.py

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

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

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

156-157: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Describe the normalized tool surface precisely.

The documented normalized surface is the blocked-tool policy (tools.blocked), not a portable tool-definition catalog. Replace “normalized tools” with “normalized tool-blocking policy” or “normalized tools.blocked” to avoid advertising a broader API.

Suggested wording
-typed configuration, normalized tools, MCP and skills, persistent multi-turn
+typed configuration, normalized `tools.blocked` policy, MCP and skills, persistent multi-turn
🤖 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 `@README.md` around lines 156 - 157, Update the README feature list by
replacing “normalized tools” with “normalized tool-blocking policy” or
“normalized `tools.blocked`,” accurately describing the supported surface
without implying a portable tool-definition catalog.

Source: Path instructions

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

Outside diff comments:
In `@README.md`:
- Around line 156-157: Update the README feature list by replacing “normalized
tools” with “normalized tool-blocking policy” or “normalized `tools.blocked`,”
accurately describing the supported surface without implying a portable
tool-definition catalog.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 8278abc0-a2c8-444e-9d68-c0c694099d86

📥 Commits

Reviewing files that changed from the base of the PR and between 749b37d and bb4dc06.

📒 Files selected for processing (2)
  • README.md
  • docs/sdk/python.mdx
📜 Review details
🧰 Additional context used
📓 Path-based instructions (18)
**/*.{md,mdx,html}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • README.md
  • docs/sdk/python.mdx
README.md

📄 CodeRabbit inference engine (CONTRIBUTING.md)

The root README.md must reflect the current workspace, supported adapters, and top-level documentation.

Update README.md when a small Fabric bug fix changes public behavior.

Files:

  • README.md
**/README.md

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Update an adapter or example README.md when that adapter or example surface changes.

Files:

  • README.md
**/*.{md,mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • README.md
  • docs/sdk/python.mdx
**/*

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

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

Files:

  • README.md
  • docs/sdk/python.mdx
**/*.{html,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

HTML and Markdown files must use the specified SPDX header in an HTML comment.

Files:

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

Verify README and documentation entry points, package names, paths, examples, and public commands remain current after changes.

Files:

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

  • README.md
  • docs/sdk/python.mdx
{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
**/*.{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:

  • README.md
  • docs/sdk/python.mdx
**/*.{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:

  • README.md
{docs/**,README.md,AGENTS.md}

⚙️ CodeRabbit configuration file

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

Files:

  • README.md
  • docs/sdk/python.mdx
**/*.mdx

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • docs/sdk/python.mdx
{docs/**/*.{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/**/*.{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/**/*,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml,justfile}

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

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

Files:

  • docs/sdk/python.mdx
{docs/**/*,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml}

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

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

Files:

  • docs/sdk/python.mdx
docs/**/*

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

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

Files:

  • docs/sdk/python.mdx
🔇 Additional comments (3)
docs/sdk/python.mdx (2)

119-123: Do not promise guaranteed cleanup.

This is the same unresolved issue from the previous review: stop() attempts to release adapter-owned resources and can raise FabricRuntimeError. Change “releases them” to “attempts to release them.”

Suggested wording
- reuses its adapter-owned native resources across ordered invocations, and releases them
+ reuses its adapter-owned native resources across ordered invocations, and attempts to release them

Source: Path instructions


131-136: LGTM!

README.md (1)

128-133: LGTM!

@AjayThorve
AjayThorve force-pushed the feat/persistent-local-adapter-host branch from 265a725 to fc9a972 Compare July 17, 2026 23:18

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

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

⚠️ Outside diff range comments (1)
adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py (1)

419-439: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Preserve retry state when Relay flushing fails.

Line 433 clears _relay_session_pending before subscribers.flush(). If flushing raises, stop() cannot retry the queued flush, potentially losing turn telemetry. Track hook completion and pending flush separately, and add a flush-failure retry test.

As per path instructions, tests should cover lifecycle cleanup and error paths.

🤖 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/hermes/src/nemo_fabric_adapters/hermes/adapter.py` around lines 419
- 439, Update _finalize_relay_session so _relay_session_pending is cleared only
after subscribers.flush() completes successfully; preserve it when flushing
raises so stop() can retry. Track hook invocation completion separately from
pending flush state, and add tests covering lifecycle cleanup plus flush-failure
retry behavior.

Source: Path instructions

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

Outside diff comments:
In `@adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py`:
- Around line 419-439: Update _finalize_relay_session so _relay_session_pending
is cleared only after subscribers.flush() completes successfully; preserve it
when flushing raises so stop() can retry. Track hook invocation completion
separately from pending flush state, and add tests covering lifecycle cleanup
plus flush-failure retry behavior.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 15ff6d42-34a8-4de2-aeff-054bbc4a33fa

📥 Commits

Reviewing files that changed from the base of the PR and between bb4dc06 and 265a725.

📒 Files selected for processing (11)
  • README.md
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • crates/fabric-core/src/runtime.rs
  • docs/sdk/python.mdx
  • scripts/test_adapter_lifecycles.sh
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_claude.py
  • tests/e2e/test_deepagents.py
  • tests/e2e/test_hermes_e2e.py
  • tests/e2e/test_hermes_runtime.py
📜 Review details
🧰 Additional context used
📓 Path-based instructions (32)
**/*.{md,mdx,html}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • docs/sdk/python.mdx
  • README.md
**/*.{md,mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • docs/sdk/python.mdx
  • README.md
**/*

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

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

Files:

  • docs/sdk/python.mdx
  • tests/e2e/test_claude.py
  • scripts/test_adapter_lifecycles.sh
  • tests/e2e/test_hermes_runtime.py
  • README.md
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_hermes_e2e.py
  • tests/adapters/test_deepagents.py
  • crates/fabric-core/src/runtime.rs
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • tests/e2e/test_deepagents.py
**/*.mdx

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • docs/sdk/python.mdx
{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
  • 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/**/*.{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/**/*,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml,justfile}

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

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

Files:

  • docs/sdk/python.mdx
{docs/**/*,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml}

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

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

Files:

  • docs/sdk/python.mdx
**/*.{md,mdx,rst}

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

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

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

Files:

  • docs/sdk/python.mdx
  • README.md
docs/**/*

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

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

Files:

  • docs/sdk/python.mdx
{docs/**,README.md,AGENTS.md}

⚙️ CodeRabbit configuration file

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

Files:

  • docs/sdk/python.mdx
  • README.md
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • tests/e2e/test_claude.py
  • tests/e2e/test_hermes_runtime.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_hermes_e2e.py
  • tests/adapters/test_deepagents.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • tests/e2e/test_deepagents.py
**/*.{rs,py}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • tests/e2e/test_claude.py
  • tests/e2e/test_hermes_runtime.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_hermes_e2e.py
  • tests/adapters/test_deepagents.py
  • crates/fabric-core/src/runtime.rs
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • tests/e2e/test_deepagents.py
**/*.{rs,py,pyi,json,yaml,yml}

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

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

Files:

  • tests/e2e/test_claude.py
  • tests/e2e/test_hermes_runtime.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_hermes_e2e.py
  • tests/adapters/test_deepagents.py
  • crates/fabric-core/src/runtime.rs
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • tests/e2e/test_deepagents.py
tests/**/*.py

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

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

Files:

  • tests/e2e/test_claude.py
  • tests/e2e/test_hermes_runtime.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_hermes_e2e.py
  • tests/adapters/test_deepagents.py
  • tests/e2e/test_deepagents.py
**/*.{py,pyi}

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

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

Files:

  • tests/e2e/test_claude.py
  • tests/e2e/test_hermes_runtime.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_hermes_e2e.py
  • tests/adapters/test_deepagents.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • tests/e2e/test_deepagents.py
**/*.{rs,py,pyi,toml}

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

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

Files:

  • tests/e2e/test_claude.py
  • tests/e2e/test_hermes_runtime.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_hermes_e2e.py
  • tests/adapters/test_deepagents.py
  • crates/fabric-core/src/runtime.rs
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • tests/e2e/test_deepagents.py
{tests/**,python/tests/**}

⚙️ CodeRabbit configuration file

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

Files:

  • tests/e2e/test_claude.py
  • tests/e2e/test_hermes_runtime.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_hermes_e2e.py
  • tests/adapters/test_deepagents.py
  • tests/e2e/test_deepagents.py
**/*.{toml,yaml,yml,sh,bash}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • scripts/test_adapter_lifecycles.sh
README.md

📄 CodeRabbit inference engine (CONTRIBUTING.md)

The root README.md must reflect the current workspace, supported adapters, and top-level documentation.

Update README.md when a small Fabric bug fix changes public behavior.

Files:

  • README.md
**/README.md

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Update an adapter or example README.md when that adapter or example surface changes.

Files:

  • README.md
**/*.{html,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

HTML and Markdown files must use the specified SPDX header in an HTML comment.

Files:

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

Verify README and documentation entry points, package names, paths, examples, and public commands remain current after changes.

Files:

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

  • README.md
tests/adapters/**/*

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

When an adapter or integration changes, run its focused tests under tests/adapters, followed by just test-python.

Files:

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

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • crates/fabric-core/src/runtime.rs
**/*.rs

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

Implement new runtime or binding behavior in the shared Rust core first.

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

Run cargo check --workspace --locked after version changes.

Files:

  • crates/fabric-core/src/runtime.rs
crates/fabric-core/**/*

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

For changes under crates/fabric-core, run both the Rust and Python test suites.

When crates/fabric-core changes in a way exposed through Python, run both the Rust and Python test suites.

Files:

  • crates/fabric-core/src/runtime.rs
crates/fabric-core/src/**/*.rs

⚙️ CodeRabbit configuration file

crates/fabric-core/src/**/*.rs: Review the Rust core for runtime lifecycle correctness, handle validation, capability routing accuracy, schema stability, and error semantics.
Public API changes should match committed schemas, tests, and documentation.

Files:

  • crates/fabric-core/src/runtime.rs
{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 Fabric contracts.

Files:

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

Applied to files:

  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
🧬 Code graph analysis (8)
tests/e2e/test_claude.py (1)
adapters/claude/src/nemo_fabric_adapters/claude/adapter.py (1)
  • invoke (883-944)
tests/e2e/test_hermes_runtime.py (1)
examples/code_review_agent/config.py (2)
  • hermes_config (71-100)
  • with_relay (227-249)
tests/adapters/test_hermes_adapter.py (1)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)
  • stop (719-725)
tests/e2e/test_hermes_e2e.py (2)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)
  • invoke (615-681)
examples/code_review_agent/config.py (2)
  • hermes_config (71-100)
  • with_relay (227-249)
tests/adapters/test_deepagents.py (1)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (3)
  • invoke (615-681)
  • start (535-587)
  • stop (719-725)
crates/fabric-core/src/runtime.rs (1)
crates/fabric-core/src/config.rs (1)
  • resolve_run_plan (1216-1219)
adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py (1)
tests/adapters/test_hermes_adapter.py (1)
  • _finalize_relay_session (79-79)
tests/e2e/test_deepagents.py (2)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)
  • invoke (615-681)
examples/code_review_agent/config.py (2)
  • with_relay (227-249)
  • deepagents_config (131-155)
🪛 Ruff (0.15.21)
tests/adapters/test_deepagents.py

[warning] 170-170: Missing return type annotation for private function plugin_ctx

(ANN202)

🪛 Shellcheck (0.11.0)
scripts/test_adapter_lifecycles.sh

[warning] 55-55: Declare and assign separately to avoid masking return values.

(SC2155)

🔇 Additional comments (12)
docs/sdk/python.mdx (2)

119-123: Should fix: Avoid guaranteeing shutdown cleanup.

Line 122 should say stop() attempts to release resources because shutdown can fail. This remains the same previously reported finding.

As per path instructions, documentation must reflect current API behavior.

Source: Path instructions


135-172: LGTM!

crates/fabric-core/src/runtime.rs (1)

455-461: LGTM!

Also applies to: 953-953, 1720-1723, 1945-1948, 2800-2828, 2843-2843, 3052-3056, 3119-3121, 3378-3381, 4140-4192

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

228-239: LGTM!

Also applies to: 373-424, 441-489

README.md (1)

132-133: LGTM!

tests/e2e/test_deepagents.py (1)

53-93: LGTM!

Also applies to: 153-182

tests/e2e/test_hermes_e2e.py (1)

46-82: LGTM!

Also applies to: 87-88, 124-178

tests/e2e/test_hermes_runtime.py (1)

28-39: LGTM!

Also applies to: 72-108

scripts/test_adapter_lifecycles.sh (1)

1-155: LGTM!

tests/adapters/test_deepagents.py (1)

166-176: LGTM!

Also applies to: 767-816

tests/adapters/test_hermes_adapter.py (1)

72-72: LGTM!

Also applies to: 89-119

tests/e2e/test_claude.py (1)

278-306: LGTM!

@AjayThorve
AjayThorve marked this pull request as ready for review July 17, 2026 23:55
@AjayThorve
AjayThorve requested a review from a team as a code owner July 17, 2026 23:55

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

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

⚠️ Outside diff range comments (1)
crates/fabric-core/src/runtime.rs (1)

1096-1153: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Close the timeout eviction race before releasing the host mutex.

Line 1135 releases the host guard before Line 1281 reacquires it. A concurrent invocation that already cloned this host can acquire the mutex first, send another request, and consume the timed-out request’s late response or delay termination for another timeout period.

Evict and mark or terminate the host while the original guard is held, or add a terminal flag checked immediately after every lock acquisition. Add a two-invocation regression test where the first exchange times out while the second waits.

As per path instructions, “Review the Rust core for runtime lifecycle correctness.”

Also applies to: 1270-1285, 4246-4295

🤖 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 `@crates/fabric-core/src/runtime.rs` around lines 1096 - 1153, The timeout
handling in the runtime exchange releases the host mutex before invalidating the
timed-out host, allowing concurrent invocations to reuse it. Update the exchange
error path around exchange_lifecycle_message and invalidate_timed_out_local_host
so the host is evicted and marked or terminated while the original host guard
remains held, or enforce a terminal-state check immediately after every host
lock acquisition. Add a regression test covering two invocations where the first
times out while the second is waiting, ensuring the second cannot send through
or reuse the timed-out host.

Source: Path instructions

🤖 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 `@skills/nemo-fabric-integrate/references/sdk-api-inventory.md`:
- Around line 70-75: In the runtime hosting description, update the sentence
containing “third-party compatibility adapters may reconstruct continuity on
each invocation” to use “can” instead of “may,” preserving the rest of the
statement unchanged.

---

Outside diff comments:
In `@crates/fabric-core/src/runtime.rs`:
- Around line 1096-1153: The timeout handling in the runtime exchange releases
the host mutex before invalidating the timed-out host, allowing concurrent
invocations to reuse it. Update the exchange error path around
exchange_lifecycle_message and invalidate_timed_out_local_host so the host is
evicted and marked or terminated while the original host guard remains held, or
enforce a terminal-state check immediately after every host lock acquisition.
Add a regression test covering two invocations where the first times out while
the second is waiting, ensuring the second cannot send through or reuse the
timed-out host.
🪄 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: 3da819d9-bf23-4d99-9703-b9510820b506

📥 Commits

Reviewing files that changed from the base of the PR and between fc9a972 and e8e75b9.

📒 Files selected for processing (10)
  • adapters/common/README.md
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • crates/fabric-core/src/runtime.rs
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/sdk/python.mdx
  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
📜 Review details
⏰ Context from checks skipped due to timeout. (11)
  • GitHub Check: Pre-commit
  • GitHub Check: Test (Python 3.12, arm64)
  • GitHub Check: Test (Python 3.11, x86_64)
  • GitHub Check: Build wheels (x86_64)
  • GitHub Check: Test (Python 3.13, x86_64)
  • GitHub Check: Test (Python 3.12, x86_64)
  • GitHub Check: Test (Python 3.11, arm64)
  • GitHub Check: Test (Python 3.14, arm64)
  • GitHub Check: Test (Python 3.14, x86_64)
  • GitHub Check: Test (Python 3.13, arm64)
  • GitHub Check: Build and publish docs
🧰 Additional context used
📓 Path-based instructions (29)
**/*.{md,mdx,html}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • adapters/common/README.md
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/sdk/python.mdx
**/*.{md,mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • adapters/common/README.md
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/sdk/python.mdx
**/*

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

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

Files:

  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • adapters/common/README.md
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/sdk/python.mdx
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • crates/fabric-core/src/runtime.rs
**/*.{html,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

HTML and Markdown files must use the specified SPDX header in an HTML comment.

Files:

  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • adapters/common/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.

Verify README and documentation entry points, package names, paths, examples, and public commands remain current after changes.

Files:

  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • adapters/common/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:

  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • adapters/common/README.md
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/sdk/python.mdx
**/*.{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:

  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • adapters/common/README.md
**/README.md

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Update an adapter or example README.md when that adapter or example surface changes.

Files:

  • adapters/common/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 Fabric contracts.

Files:

  • adapters/common/README.md
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
**/*.mdx

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/sdk/python.mdx
{README.md,docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

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

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

Files:

  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/sdk/python.mdx
{docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

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

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

Files:

  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/sdk/python.mdx
docs/**/*.{md,mdx,yml}

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

Run just docs when the documentation site changes.

Files:

  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/sdk/python.mdx
{docs/**/*,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml,justfile}

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

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

Files:

  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/sdk/python.mdx
{docs/**/*,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml}

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

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

Files:

  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/sdk/python.mdx
docs/**/*

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

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

Files:

  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • 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.

Files:

  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/sdk/python.mdx
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
**/*.{rs,py}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • crates/fabric-core/src/runtime.rs
**/*.{rs,py,pyi,json,yaml,yml}

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

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

Files:

  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • crates/fabric-core/src/runtime.rs
tests/**/*.py

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

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

Files:

  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
**/*.{py,pyi}

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

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

Files:

  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
**/*.{rs,py,pyi,toml}

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

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

Files:

  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • crates/fabric-core/src/runtime.rs
tests/adapters/**/*

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

When an adapter or integration changes, run its focused tests under tests/adapters, followed by just test-python.

Files:

  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
{tests/**,python/tests/**}

⚙️ CodeRabbit configuration file

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

Files:

  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
**/*.{rs,toml}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • crates/fabric-core/src/runtime.rs
**/*.rs

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

Implement new runtime or binding behavior in the shared Rust core first.

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

Run cargo check --workspace --locked after version changes.

Files:

  • crates/fabric-core/src/runtime.rs
crates/fabric-core/**/*

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

For changes under crates/fabric-core, run both the Rust and Python test suites.

When crates/fabric-core changes in a way exposed through Python, run both the Rust and Python test suites.

Files:

  • crates/fabric-core/src/runtime.rs
crates/fabric-core/src/**/*.rs

⚙️ CodeRabbit configuration file

crates/fabric-core/src/**/*.rs: Review the Rust core for runtime lifecycle correctness, handle validation, capability routing accuracy, schema stability, and error semantics.
Public API changes should match committed schemas, tests, and documentation.

Files:

  • crates/fabric-core/src/runtime.rs
🧬 Code graph analysis (3)
tests/adapters/test_claude_adapter.py (1)
adapters/claude/src/nemo_fabric_adapters/claude/adapter.py (1)
  • start (854-881)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (1)
crates/fabric-core/src/runtime.rs (1)
  • operation (390-396)
crates/fabric-core/src/runtime.rs (2)
crates/fabric-core/src/config.rs (2)
  • RunPlan (1892-1924)
  • resolve_run_plan (1216-1219)
crates/fabric-core/src/error.rs (1)
  • FabricError (16-175)
🪛 Ruff (0.15.21)
tests/adapters/test_adapters_common_lifecycle.py

[warning] 115-115: Missing return type annotation for private function start

Add return type annotation: None

(ANN202)


[warning] 118-118: Missing return type annotation for private function invoke

(ANN202)

🔇 Additional comments (9)
adapters/common/README.md (1)

24-56: LGTM!

docs/sdk/python.mdx (1)

119-159: LGTM!

docs/integrations/claude.mdx (1)

88-93: LGTM!

docs/integrations/codex.mdx (1)

73-95: LGTM!

adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (1)

265-273: LGTM!

crates/fabric-core/src/runtime.rs (1)

33-35: LGTM!

Also applies to: 987-987, 1020-1020, 1061-1073, 1505-1581, 3147-3149

tests/adapters/test_adapters_common_lifecycle.py (1)

91-134: LGTM!

Also applies to: 170-205

tests/adapters/test_claude_adapter.py (1)

535-538: LGTM!

Also applies to: 612-615

tests/adapters/test_codex_adapter.py (1)

304-304: LGTM!

Comment thread skills/nemo-fabric-integrate/references/sdk-api-inventory.md Outdated

@Salonijain27 Salonijain27 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Approved from a dependency point of view

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

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

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

⚠️ Outside diff range comments (2)
adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py (1)

240-245: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Constrain hermes_home to the config root.

An absolute hermes_home discards base_dir, and .. can escape it. This redirects HOME, generated configuration, and session files outside the Fabric workspace. Reject absolute/traversing paths and verify the resolved path remains under the config root.

Based on learnings, treat path values used in Fabric adapter configuration as config-root-relative.

🤖 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/hermes/src/nemo_fabric_adapters/hermes/adapter.py` around lines 240
- 245, Update the hermes_home handling in the adapter initialization to treat
the configured value as relative to common_utils.base_dir(payload). Reject
absolute paths and any traversal components, then resolve the candidate and
verify it remains under the config root before passing it to
common_utils.runtime_state_directory. Preserve the existing default and
runtime-state setup for valid values.

Source: Learnings

crates/fabric-core/src/runtime.rs (1)

988-1006: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

runtime_start is emitted per invocation, not per host start.

run_local_host_adapter_with_timeout adds this event on every invoke_runtime call, so persistent hosts will log duplicate “runtime_start” events even when the same host_pid is reused. Rename it to an invocation-scoped event or move true host-start events to LocalHostAdapter::start.

🤖 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 `@crates/fabric-core/src/runtime.rs` around lines 988 - 1006, The runtime_start
event in run_local_host_adapter_with_timeout is emitted for every invocation, so
rename it to an invocation-scoped event such as runtime_invocation while
preserving its existing metadata. Do not treat this per-call event as a
host-start event; reserve true host-start emission for LocalHostAdapter::start
if needed.
🤖 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 `@tests/adapters/test_adapters_common_lifecycle.py`:
- Around line 120-129: Add explicit return annotations to the nested Runtime
methods start, invoke, and stop to satisfy Ruff ANN202; use the appropriate
async return type for each method while preserving their existing behavior.

---

Outside diff comments:
In `@adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py`:
- Around line 240-245: Update the hermes_home handling in the adapter
initialization to treat the configured value as relative to
common_utils.base_dir(payload). Reject absolute paths and any traversal
components, then resolve the candidate and verify it remains under the config
root before passing it to common_utils.runtime_state_directory. Preserve the
existing default and runtime-state setup for valid values.

In `@crates/fabric-core/src/runtime.rs`:
- Around line 988-1006: The runtime_start event in
run_local_host_adapter_with_timeout is emitted for every invocation, so rename
it to an invocation-scoped event such as runtime_invocation while preserving its
existing metadata. Do not treat this per-call event as a host-start event;
reserve true host-start emission for LocalHostAdapter::start if needed.
🪄 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: 9427cef5-06f1-4678-96d5-30334cb27c7e

📥 Commits

Reviewing files that changed from the base of the PR and between f1b6d6f and aebea96.

📒 Files selected for processing (30)
  • README.md
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/README.md
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • adapters/common/README.md
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • crates/fabric-cli/assets/adapters/scripted/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/scripted/run.py
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/runtime.rs
  • crates/fabric-core/src/schema.rs
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/sdk/python.mdx
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/fabric-adapter.json
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py
  • schemas/SCHEMA.md
  • schemas/adapter-invocation.schema.json
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_hermes_adapter.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.json
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/python/test_native_sdk.py
  • tests/python/test_typed_config.py
📜 Review details
🧰 Additional context used
📓 Path-based instructions (33)
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • tests/python/test_native_sdk.py
  • tests/python/test_typed_config.py
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py
  • crates/fabric-cli/assets/adapters/scripted/run.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • tests/adapters/test_hermes_adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
**/*.{rs,py}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • tests/python/test_native_sdk.py
  • tests/python/test_typed_config.py
  • crates/fabric-core/src/schema.rs
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py
  • crates/fabric-cli/assets/adapters/scripted/run.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_claude_adapter.py
  • crates/fabric-core/src/config.rs
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • tests/adapters/test_hermes_adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • crates/fabric-core/src/runtime.rs
**/*

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

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

Files:

  • tests/python/test_native_sdk.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.json
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • tests/python/test_typed_config.py
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/fabric-adapter.json
  • crates/fabric-core/src/schema.rs
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py
  • crates/fabric-cli/assets/adapters/scripted/fabric-adapter.json
  • adapters/common/README.md
  • crates/fabric-cli/assets/adapters/scripted/run.py
  • docs/sdk/python.mdx
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • README.md
  • adapters/codex/README.md
  • schemas/SCHEMA.md
  • tests/adapters/test_claude_adapter.py
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • crates/fabric-core/src/config.rs
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • schemas/adapter-invocation.schema.json
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • tests/adapters/test_hermes_adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • crates/fabric-core/src/runtime.rs
**/*.{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_native_sdk.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.json
  • tests/python/test_typed_config.py
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/fabric-adapter.json
  • crates/fabric-core/src/schema.rs
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py
  • crates/fabric-cli/assets/adapters/scripted/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/scripted/run.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_claude_adapter.py
  • crates/fabric-core/src/config.rs
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • schemas/adapter-invocation.schema.json
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • tests/adapters/test_hermes_adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • crates/fabric-core/src/runtime.rs
tests/**/*.py

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

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

Files:

  • tests/python/test_native_sdk.py
  • tests/python/test_typed_config.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_hermes_adapter.py
  • tests/adapters/test_deepagents.py
**/*.{py,pyi}

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

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

Files:

  • tests/python/test_native_sdk.py
  • tests/python/test_typed_config.py
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py
  • crates/fabric-cli/assets/adapters/scripted/run.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • tests/adapters/test_hermes_adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
**/*.{rs,py,pyi,toml}

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

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

Files:

  • tests/python/test_native_sdk.py
  • tests/python/test_typed_config.py
  • crates/fabric-core/src/schema.rs
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py
  • crates/fabric-cli/assets/adapters/scripted/run.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_claude_adapter.py
  • crates/fabric-core/src/config.rs
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • tests/adapters/test_hermes_adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • crates/fabric-core/src/runtime.rs
{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_native_sdk.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.json
  • tests/python/test_typed_config.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_hermes_adapter.py
  • tests/adapters/test_deepagents.py
**/*.{json,jsonc}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Public contract changes must keep checked-in JSON Schema snapshots synchronized.

Files:

  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.json
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/scripted/fabric-adapter.json
  • schemas/adapter-invocation.schema.json
**/*.{md,mdx,html}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • adapters/common/README.md
  • docs/sdk/python.mdx
  • README.md
  • adapters/codex/README.md
  • schemas/SCHEMA.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
**/*.{md,mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • adapters/common/README.md
  • docs/sdk/python.mdx
  • README.md
  • adapters/codex/README.md
  • schemas/SCHEMA.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
**/*.mdx

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/sdk/python.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
{README.md,docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

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

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

Files:

  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/sdk/python.mdx
  • README.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
{docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

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

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

Files:

  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/sdk/python.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
docs/**/*.{md,mdx,yml}

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

Run just docs when the documentation site changes.

Files:

  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/sdk/python.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
{docs/**/*,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml,justfile}

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

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

Files:

  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/sdk/python.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
{docs/**/*,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml}

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

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

Files:

  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/sdk/python.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.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/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • adapters/common/README.md
  • docs/sdk/python.mdx
  • README.md
  • adapters/codex/README.md
  • schemas/SCHEMA.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
docs/**/*

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

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

Files:

  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/sdk/python.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
{docs/**,README.md,AGENTS.md}

⚙️ CodeRabbit configuration file

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

Files:

  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/sdk/python.mdx
  • README.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
{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 Fabric contracts.

Files:

  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/fabric-adapter.json
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py
  • adapters/common/README.md
  • adapters/codex/README.md
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
**/*.{rs,toml}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • crates/fabric-core/src/schema.rs
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/runtime.rs
**/*.rs

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

Implement new runtime or binding behavior in the shared Rust core first.

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

Run cargo check --workspace --locked after version changes.

Files:

  • crates/fabric-core/src/schema.rs
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/runtime.rs
crates/fabric-core/**/*

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

For changes under crates/fabric-core, run both the Rust and Python test suites.

When crates/fabric-core changes in a way exposed through Python, run both the Rust and Python test suites.

Files:

  • crates/fabric-core/src/schema.rs
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/runtime.rs
crates/fabric-core/src/**/*.rs

⚙️ CodeRabbit configuration file

crates/fabric-core/src/**/*.rs: Review the Rust core for runtime lifecycle correctness, handle validation, capability routing accuracy, schema stability, and error semantics.
Public API changes should match committed schemas, tests, and documentation.

Files:

  • crates/fabric-core/src/schema.rs
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/runtime.rs
**/README.md

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Update an adapter or example README.md when that adapter or example surface changes.

Files:

  • adapters/common/README.md
  • README.md
  • adapters/codex/README.md
**/*.{html,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

HTML and Markdown files must use the specified SPDX header in an HTML comment.

Files:

  • adapters/common/README.md
  • README.md
  • adapters/codex/README.md
  • schemas/SCHEMA.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.

Verify README and documentation entry points, package names, paths, examples, and public commands remain current after changes.

Files:

  • adapters/common/README.md
  • README.md
  • adapters/codex/README.md
  • schemas/SCHEMA.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/README.md
  • README.md
  • adapters/codex/README.md
  • schemas/SCHEMA.md
README.md

📄 CodeRabbit inference engine (CONTRIBUTING.md)

The root README.md must reflect the current workspace, supported adapters, and top-level documentation.

Update README.md when a small Fabric bug fix changes public behavior.

Files:

  • 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
schemas/**/*

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

When public configuration types change, ensure schema snapshot tests pass through just test-rust and review generated schema diffs.

Files:

  • schemas/SCHEMA.md
  • schemas/adapter-invocation.schema.json

⚙️ CodeRabbit configuration file

schemas/**/*: Schemas are generated public contract snapshots. Check that schema diffs correspond to intentional Rust type changes and are covered by core tests.

Files:

  • schemas/SCHEMA.md
  • schemas/adapter-invocation.schema.json
tests/adapters/**/*

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

When an adapter or integration changes, run its focused tests under tests/adapters, followed by just test-python.

Files:

  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_hermes_adapter.py
  • tests/adapters/test_deepagents.py
🧠 Learnings (2)
📚 Learning: 2026-06-29T22:34:52.407Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 27
File: adapters/codex-cli/fabric-adapter.json:13-15
Timestamp: 2026-06-29T22:34:52.407Z
Learning: In NeMo-Fabric adapter manifest files (e.g., `*/fabric-adapter.json`), keep `config.accepts` limited to the top-level Fabric capability sections that `resolve_capability_plan` consumes (such as `models`, `tools`, `mcp`, `skills`, `telemetry`). Do not add adapter-owned `harness.settings` keys to `config.accepts`; `harness.settings` should remain adapter-owned and be passed through unchanged.

Applied to files:

  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.json
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/scripted/fabric-adapter.json
📚 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/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
🧬 Code graph analysis (13)
crates/fabric-cli/assets/adapters/scripted/run.py (4)
crates/fabric-core/src/runtime.rs (1)
  • response (1458-1458)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)
  • response (880-880)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (1)
  • response (306-306)
adapters/codex/src/nemo_fabric_adapters/codex/adapter.py (1)
  • runtime_id (169-175)
tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py (1)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (4)
  • serve (390-407)
  • invoke (33-33)
  • start (30-30)
  • stop (36-36)
tests/adapters/test_claude_adapter.py (2)
adapters/claude/src/nemo_fabric_adapters/claude/adapter.py (1)
  • ClaudeRuntime (884-1043)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (1)
  • serve (390-407)
crates/fabric-core/src/config.rs (1)
crates/fabric-core/src/error.rs (1)
  • FabricError (16-175)
tests/adapters/test_adapters_common_lifecycle.py (1)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (1)
  • serve (390-407)
tests/adapters/test_codex_adapter.py (1)
adapters/codex/src/nemo_fabric_adapters/codex/adapter.py (1)
  • CodexRuntime (1130-1286)
adapters/claude/src/nemo_fabric_adapters/claude/adapter.py (1)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (1)
  • serve (390-407)
tests/adapters/test_hermes_adapter.py (2)
adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py (1)
  • HermesRuntime (203-362)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (1)
  • serve (390-407)
tests/adapters/test_deepagents.py (1)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)
  • DeepAgentsRuntime (507-666)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (1)
  • serve (390-407)
adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py (1)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (1)
  • serve (390-407)
adapters/codex/src/nemo_fabric_adapters/codex/adapter.py (1)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (1)
  • serve (390-407)
crates/fabric-core/src/runtime.rs (3)
crates/fabric-core/src/config.rs (2)
  • RunPlan (1475-1499)
  • AdapterKind (411-420)
crates/fabric-core/src/error.rs (1)
  • FabricError (16-175)
crates/fabric-core/src/schema.rs (1)
  • AdapterInvocation (126-126)
🪛 ast-grep (0.44.1)
examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py

[info] 15-20: use jsonify instead of json.dumps for JSON output
Context: json.dumps(
{
"operation": operation,
"outcome": {"status": "succeeded", "output": output},
}
)
Note: [CWE-116] Improper Encoding or Escaping of Output.

(use-jsonify)

crates/fabric-cli/assets/adapters/scripted/run.py

[info] 13-18: use jsonify instead of json.dumps for JSON output
Context: json.dumps(
{
"operation": operation,
"outcome": {"status": "succeeded", "output": output},
}
)
Note: [CWE-116] Improper Encoding or Escaping of Output.

(use-jsonify)

🪛 Ruff (0.15.21)
examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py

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

(ANN401)


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

(TRY003)


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

(TRY003)

crates/fabric-cli/assets/adapters/scripted/run.py

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

(ANN401)


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

(TRY003)


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

(TRY003)

tests/adapters/test_adapters_common_lifecycle.py

[warning] 121-121: Missing return type annotation for private function start

Add return type annotation: None

(ANN202)


[warning] 124-124: Missing return type annotation for private function invoke

(ANN202)


[warning] 128-128: Missing return type annotation for private function stop

Add return type annotation: None

(ANN202)

🔇 Additional comments (32)
docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx (1)

16-16: LGTM!

README.md (1)

147-184: LGTM!

adapters/codex/README.md (1)

74-147: LGTM!

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

1324-1340: LGTM!

adapters/common/README.md (1)

24-64: LGTM!

adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (2)

221-243: LGTM!


246-268: LGTM!

schemas/adapter-invocation.schema.json (1)

235-252: LGTM!

tests/adapters/test_adapters_common_lifecycle.py (1)

92-141: LGTM!

tests/python/test_native_sdk.py (1)

173-173: LGTM!

tests/python/test_typed_config.py (1)

124-124: LGTM!

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

585-627: LGTM!

Also applies to: 894-956, 1024-1056, 1131-1147

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

119-130: LGTM!

Also applies to: 435-460, 581-671, 748-764

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

158-167: LGTM!

Also applies to: 226-239, 246-490

crates/fabric-cli/assets/adapters/scripted/run.py (1)

9-52: LGTM!

examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py (1)

11-63: LGTM!

tests/adapters/test_claude_adapter.py (1)

1173-1179: LGTM!

tests/adapters/test_codex_adapter.py (1)

112-140: LGTM!

Also applies to: 1094-1100

tests/adapters/test_deepagents.py (1)

161-185: LGTM!

Also applies to: 749-763, 1115-1121

tests/adapters/test_hermes_adapter.py (1)

631-637: LGTM!

tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py (1)

12-27: LGTM!

crates/fabric-cli/assets/adapters/scripted/fabric-adapter.json (1)

8-11: LGTM!

crates/fabric-core/src/config.rs (2)

122-160: LGTM!

Also applies to: 1128-1145, 1171-1171


1764-1853: LGTM! Test coverage is thorough and the prior parity-test-scope comment is already resolved.

crates/fabric-core/src/runtime.rs (1)

320-327: LGTM! Lifecycle routing, host start/invoke/stop, runtime-scoped relay config, and the accompanying test suite are internally consistent and well covered.

Also applies to: 373-376, 534-585, 763-891, 901-986, 1309-1368, 1649-1708, 2215-2275, 2365-2889

crates/fabric-core/src/schema.rs (1)

28-29: LGTM!

docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx (1)

4-25: LGTM!

docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx (1)

52-57: LGTM!

docs/sdk/python.mdx (1)

118-156: LGTM! The "attempts to release" wording and terminal-failure documentation match the reviewed runtime.rs behavior and the previously resolved feedback thread.

Also applies to: 308-311

examples/harbor/calculator/task/environment/fabric/adapters/scripted/fabric-adapter.json (1)

8-11: LGTM!

schemas/SCHEMA.md (1)

25-28: LGTM!

Also applies to: 34-36

tests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.json (1)

14-16: LGTM!

Comment thread tests/adapters/test_adapters_common_lifecycle.py
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
Signed-off-by: Ajay Thorve <athorve@nvidia.com>

@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/codex/testing.md`:
- Around line 21-27: Update the testing documentation paragraph to spell out
ATOF and ATIF on their first use, optionally retaining the acronyms afterward.
Replace “requires decoded LLM request content” with “requires the LLM request
content to be decoded” so the semantic regression pass criteria are explicit.

In `@tests/adapters/test_claude_adapter.py`:
- Around line 49-74: Update install_fake_client’s nested FakeClient methods,
including connect, query, receive_response, disconnect, and interrupt, with
explicit return annotations; annotate the responses generators at the referenced
locations with AsyncIterator[Message] or AsyncIterator[ResultMessage] as
appropriate, importing the required typing and message symbols if needed.

In `@tests/adapters/test_codex_adapter.py`:
- Around line 43-50: Annotate the nested async helpers named scenario in
runtime_start_error and the other referenced test helpers with their correct
return types based on each helper’s returned value. Add a None return annotation
to boom, including its **_kwargs parameter as already shaped, so all helpers
satisfy Ruff ANN202 without changing test behavior.

In `@tests/adapters/test_deepagents.py`:
- Around line 282-288: Update test_missing_api_key_fails_runtime_start to remove
NVIDIA_API_KEY through os.environ instead of monkeypatch.delenv, relying on the
existing restore_environ_fixture for cleanup; leave the runtime-start assertion
unchanged.

In
`@tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py`:
- Around line 27-28: Update the unstarted-runtime guard in the adapter method
containing _start_payload to raise lifecycle.LifecycleError with the project’s
established stable error code instead of a free-form RuntimeError. Reuse the
existing lifecycle error conventions and preserve the current message/context.
🪄 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: cfaee9b0-78cc-4a9a-8c44-ed9d0043cfcc

📥 Commits

Reviewing files that changed from the base of the PR and between aebea96 and 405a2fc.

📒 Files selected for processing (58)
  • README.md
  • adapters/claude/README.md
  • adapters/claude/fabric-adapter.json
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/README.md
  • adapters/codex/fabric-adapter.json
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • adapters/codex/testing.md
  • adapters/common/README.md
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • adapters/deepagents/README.md
  • adapters/deepagents/fabric-adapter.json
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/README.md
  • adapters/hermes/fabric-adapter.json
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/codex/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/deepagents/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/hermes/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/scripted/fabric-adapter.json
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/runtime.rs
  • docs/about-nemo-fabric/overview.mdx
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimecontext.mdx
  • docs/sdk/python.mdx
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/fabric-adapter.json
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
  • examples/harbor/swebench/adapters/hermes/fabric-adapter.json
  • examples/notebooks/01_quickstart.ipynb
  • python/src/nemo_fabric/client.py
  • schemas/SCHEMA.md
  • schemas/adapter-descriptor.schema.json
  • schemas/adapter-invocation.schema.json
  • schemas/run-plan.schema.json
  • schemas/run-result.schema.json
  • schemas/runtime-context.schema.json
  • schemas/runtime-handle.schema.json
  • skills/README.md
  • skills/nemo-fabric-integrate/SKILL.md
  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_claude.py
  • tests/e2e/test_codex.py
  • tests/e2e/test_deepagents.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.json
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
💤 Files with no reviewable changes (3)
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/fabric-adapter.json
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/scripted/fabric-adapter.json
📜 Review details
🧰 Additional context used
📓 Path-based instructions (37)
**/*.{md,mdx,html}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • docs/about-nemo-fabric/overview.mdx
  • adapters/codex/testing.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimecontext.mdx
  • README.md
  • skills/README.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/integrations/claude.mdx
  • adapters/common/README.md
  • docs/integrations/codex.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • adapters/codex/README.md
  • adapters/claude/README.md
  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • schemas/SCHEMA.md
  • adapters/deepagents/README.md
  • skills/nemo-fabric-integrate/SKILL.md
  • adapters/hermes/README.md
  • docs/sdk/python.mdx
**/*.{md,mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • docs/about-nemo-fabric/overview.mdx
  • adapters/codex/testing.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimecontext.mdx
  • README.md
  • skills/README.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/integrations/claude.mdx
  • adapters/common/README.md
  • docs/integrations/codex.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • adapters/codex/README.md
  • adapters/claude/README.md
  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • schemas/SCHEMA.md
  • adapters/deepagents/README.md
  • skills/nemo-fabric-integrate/SKILL.md
  • adapters/hermes/README.md
  • docs/sdk/python.mdx
**/*

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

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

Files:

  • docs/about-nemo-fabric/overview.mdx
  • adapters/codex/testing.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • examples/harbor/swebench/adapters/hermes/fabric-adapter.json
  • examples/notebooks/01_quickstart.ipynb
  • schemas/runtime-handle.schema.json
  • schemas/run-result.schema.json
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
  • adapters/hermes/fabric-adapter.json
  • adapters/deepagents/fabric-adapter.json
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimecontext.mdx
  • python/src/nemo_fabric/client.py
  • schemas/run-plan.schema.json
  • crates/fabric-cli/assets/adapters/deepagents/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/codex/fabric-adapter.json
  • README.md
  • schemas/runtime-context.schema.json
  • crates/fabric-cli/assets/adapters/hermes/fabric-adapter.json
  • skills/README.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • adapters/codex/fabric-adapter.json
  • schemas/adapter-descriptor.schema.json
  • docs/integrations/claude.mdx
  • tests/e2e/test_codex.py
  • adapters/claude/fabric-adapter.json
  • adapters/common/README.md
  • crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
  • schemas/adapter-invocation.schema.json
  • docs/integrations/codex.mdx
  • crates/fabric-core/src/config.rs
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • adapters/codex/README.md
  • adapters/claude/README.md
  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • schemas/SCHEMA.md
  • adapters/deepagents/README.md
  • tests/e2e/test_claude.py
  • skills/nemo-fabric-integrate/SKILL.md
  • adapters/hermes/README.md
  • docs/sdk/python.mdx
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • crates/fabric-core/src/runtime.rs
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_claude_adapter.py
**/*.mdx

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • docs/about-nemo-fabric/overview.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimecontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • docs/sdk/python.mdx
{README.md,docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

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

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

Files:

  • docs/about-nemo-fabric/overview.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimecontext.mdx
  • README.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • docs/sdk/python.mdx
{docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

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

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

Files:

  • docs/about-nemo-fabric/overview.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimecontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • docs/sdk/python.mdx
docs/**/*.{md,mdx,yml}

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

Run just docs when the documentation site changes.

Files:

  • docs/about-nemo-fabric/overview.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimecontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • docs/sdk/python.mdx
{docs/**/*,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml,justfile}

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

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

Files:

  • docs/about-nemo-fabric/overview.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimecontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • docs/sdk/python.mdx
{docs/**/*,.github/workflows/ci_python.yml,.github/workflows/ci_rust.yml}

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

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

Files:

  • docs/about-nemo-fabric/overview.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimecontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • docs/sdk/python.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/about-nemo-fabric/overview.mdx
  • adapters/codex/testing.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimecontext.mdx
  • README.md
  • skills/README.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/integrations/claude.mdx
  • adapters/common/README.md
  • docs/integrations/codex.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • adapters/codex/README.md
  • adapters/claude/README.md
  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • schemas/SCHEMA.md
  • adapters/deepagents/README.md
  • skills/nemo-fabric-integrate/SKILL.md
  • adapters/hermes/README.md
  • docs/sdk/python.mdx
docs/**/*

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

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

Files:

  • docs/about-nemo-fabric/overview.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimecontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • 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.

Files:

  • docs/about-nemo-fabric/overview.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runtimecontext.mdx
  • README.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/integrations/claude.mdx
  • docs/integrations/codex.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdx
  • docs/sdk/python.mdx
**/*.{html,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

HTML and Markdown files must use the specified SPDX header in an HTML comment.

Files:

  • adapters/codex/testing.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • README.md
  • skills/README.md
  • adapters/common/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • schemas/SCHEMA.md
  • adapters/deepagents/README.md
  • skills/nemo-fabric-integrate/SKILL.md
  • adapters/hermes/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.

Verify README and documentation entry points, package names, paths, examples, and public commands remain current after changes.

Files:

  • adapters/codex/testing.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • README.md
  • skills/README.md
  • adapters/common/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • schemas/SCHEMA.md
  • adapters/deepagents/README.md
  • skills/nemo-fabric-integrate/SKILL.md
  • adapters/hermes/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/codex/testing.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • README.md
  • skills/README.md
  • adapters/common/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • schemas/SCHEMA.md
  • adapters/deepagents/README.md
  • skills/nemo-fabric-integrate/SKILL.md
  • adapters/hermes/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 Fabric contracts.

Files:

  • adapters/codex/testing.md
  • examples/harbor/swebench/adapters/hermes/fabric-adapter.json
  • examples/notebooks/01_quickstart.ipynb
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
  • adapters/hermes/fabric-adapter.json
  • adapters/deepagents/fabric-adapter.json
  • adapters/codex/fabric-adapter.json
  • adapters/claude/fabric-adapter.json
  • adapters/common/README.md
  • adapters/codex/README.md
  • adapters/claude/README.md
  • adapters/deepagents/README.md
  • adapters/hermes/README.md
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
**/*.{json,jsonc}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Public contract changes must keep checked-in JSON Schema snapshots synchronized.

Files:

  • examples/harbor/swebench/adapters/hermes/fabric-adapter.json
  • schemas/runtime-handle.schema.json
  • schemas/run-result.schema.json
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
  • adapters/hermes/fabric-adapter.json
  • adapters/deepagents/fabric-adapter.json
  • schemas/run-plan.schema.json
  • crates/fabric-cli/assets/adapters/deepagents/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/codex/fabric-adapter.json
  • schemas/runtime-context.schema.json
  • crates/fabric-cli/assets/adapters/hermes/fabric-adapter.json
  • adapters/codex/fabric-adapter.json
  • schemas/adapter-descriptor.schema.json
  • adapters/claude/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
  • schemas/adapter-invocation.schema.json
**/*.{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:

  • examples/harbor/swebench/adapters/hermes/fabric-adapter.json
  • schemas/runtime-handle.schema.json
  • schemas/run-result.schema.json
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
  • adapters/hermes/fabric-adapter.json
  • adapters/deepagents/fabric-adapter.json
  • python/src/nemo_fabric/client.py
  • schemas/run-plan.schema.json
  • crates/fabric-cli/assets/adapters/deepagents/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/codex/fabric-adapter.json
  • schemas/runtime-context.schema.json
  • crates/fabric-cli/assets/adapters/hermes/fabric-adapter.json
  • adapters/codex/fabric-adapter.json
  • schemas/adapter-descriptor.schema.json
  • tests/e2e/test_codex.py
  • adapters/claude/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
  • schemas/adapter-invocation.schema.json
  • crates/fabric-core/src/config.rs
  • tests/e2e/test_claude.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • crates/fabric-core/src/runtime.rs
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_claude_adapter.py
schemas/**/*

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

When public configuration types change, ensure schema snapshot tests pass through just test-rust and review generated schema diffs.

Files:

  • schemas/runtime-handle.schema.json
  • schemas/run-result.schema.json
  • schemas/run-plan.schema.json
  • schemas/runtime-context.schema.json
  • schemas/adapter-descriptor.schema.json
  • schemas/adapter-invocation.schema.json
  • schemas/SCHEMA.md

⚙️ CodeRabbit configuration file

schemas/**/*: Schemas are generated public contract snapshots. Check that schema diffs correspond to intentional Rust type changes and are covered by core tests.

Files:

  • schemas/runtime-handle.schema.json
  • schemas/run-result.schema.json
  • schemas/run-plan.schema.json
  • schemas/runtime-context.schema.json
  • schemas/adapter-descriptor.schema.json
  • schemas/adapter-invocation.schema.json
  • schemas/SCHEMA.md
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • python/src/nemo_fabric/client.py
  • tests/e2e/test_codex.py
  • tests/e2e/test_claude.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_claude_adapter.py
**/*.{rs,py}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • python/src/nemo_fabric/client.py
  • tests/e2e/test_codex.py
  • crates/fabric-core/src/config.rs
  • tests/e2e/test_claude.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • crates/fabric-core/src/runtime.rs
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_claude_adapter.py
{Cargo.toml,pyproject.toml,python/pyproject.toml,python/src/nemo_fabric/**}

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

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

Files:

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

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

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

Files:

  • python/src/nemo_fabric/client.py
**/*.{py,pyi}

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

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

Files:

  • python/src/nemo_fabric/client.py
  • tests/e2e/test_codex.py
  • tests/e2e/test_claude.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_claude_adapter.py
**/*.{rs,py,pyi,toml}

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

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

Files:

  • python/src/nemo_fabric/client.py
  • tests/e2e/test_codex.py
  • crates/fabric-core/src/config.rs
  • tests/e2e/test_claude.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • crates/fabric-core/src/runtime.rs
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_claude_adapter.py
python/src/nemo_fabric/**/*

⚙️ CodeRabbit configuration file

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

Files:

  • python/src/nemo_fabric/client.py
README.md

📄 CodeRabbit inference engine (CONTRIBUTING.md)

The root README.md must reflect the current workspace, supported adapters, and top-level documentation.

Update README.md when a small Fabric bug fix changes public behavior.

Files:

  • README.md
**/README.md

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Update an adapter or example README.md when that adapter or example surface changes.

Files:

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

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

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

Files:

  • tests/e2e/test_codex.py
  • tests/e2e/test_claude.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_deepagents.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_claude_adapter.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/e2e/test_codex.py
  • tests/e2e/test_claude.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_hermes_adapter.py
  • tests/e2e/test_deepagents.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_claude_adapter.py
**/*.{rs,toml}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/runtime.rs
**/*.rs

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

Implement new runtime or binding behavior in the shared Rust core first.

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

Run cargo check --workspace --locked after version changes.

Files:

  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/runtime.rs
crates/fabric-core/**/*

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

For changes under crates/fabric-core, run both the Rust and Python test suites.

When crates/fabric-core changes in a way exposed through Python, run both the Rust and Python test suites.

Files:

  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/runtime.rs
crates/fabric-core/src/**/*.rs

⚙️ CodeRabbit configuration file

crates/fabric-core/src/**/*.rs: Review the Rust core for runtime lifecycle correctness, handle validation, capability routing accuracy, schema stability, and error semantics.
Public API changes should match committed schemas, tests, and documentation.

Files:

  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/runtime.rs
**/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/nemo-fabric-integrate/SKILL.md
tests/adapters/**/*

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

When an adapter or integration changes, run its focused tests under tests/adapters, followed by just test-python.

Files:

  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_hermes_adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_claude_adapter.py
🧠 Learnings (3)
📚 Learning: 2026-06-29T22:34:52.407Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 27
File: adapters/codex-cli/fabric-adapter.json:13-15
Timestamp: 2026-06-29T22:34:52.407Z
Learning: In NeMo-Fabric adapter manifest files (e.g., `*/fabric-adapter.json`), keep `config.accepts` limited to the top-level Fabric capability sections that `resolve_capability_plan` consumes (such as `models`, `tools`, `mcp`, `skills`, `telemetry`). Do not add adapter-owned `harness.settings` keys to `config.accepts`; `harness.settings` should remain adapter-owned and be passed through unchanged.

Applied to files:

  • examples/harbor/swebench/adapters/hermes/fabric-adapter.json
  • examples/harbor/swebench/adapters/claude/fabric-adapter.json
  • adapters/hermes/fabric-adapter.json
  • adapters/deepagents/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/deepagents/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/codex/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/hermes/fabric-adapter.json
  • adapters/codex/fabric-adapter.json
  • adapters/claude/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
📚 Learning: 2026-06-28T04:03:32.877Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 26
File: python/tests/smoke_typed_config.py:163-177
Timestamp: 2026-06-28T04:03:32.877Z
Learning: In NVIDIA NeMo Fabric Python SDK serialization of `RuntimeCapabilities` (to satisfy the “parity contract” with Rust core and the CLI), do not emit metadata keys when the corresponding metadata is absent. Instead, omit those fields entirely so the produced JSON matches the Rust/CLI output (e.g., avoid `null`, empty objects, or placeholder metadata). During review, verify the serializer/builders follow this omission rule and that Python outputs/parity tests reflect the same shape.

Applied to files:

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

Applied to files:

  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
🧬 Code graph analysis (8)
adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py (1)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (2)
  • LifecycleError (42-57)
  • _runtime_id (112-117)
tests/adapters/test_hermes_adapter.py (1)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (2)
  • invoke (32-33)
  • start (29-30)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (2)
  • LifecycleError (42-57)
  • _runtime_id (112-117)
adapters/codex/src/nemo_fabric_adapters/codex/adapter.py (1)
tests/adapters/test_codex_adapter.py (1)
  • thread_start (158-164)
crates/fabric-core/src/runtime.rs (1)
crates/fabric-core/src/config.rs (1)
  • RunPlan (1426-1450)
tests/adapters/test_codex_adapter.py (1)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (4)
  • LifecycleError (42-57)
  • invoke (32-33)
  • start (29-30)
  • stop (35-36)
tests/adapters/test_deepagents.py (2)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)
  • AdapterConfigError (66-67)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (3)
  • invoke (32-33)
  • start (29-30)
  • stop (35-36)
tests/adapters/test_claude_adapter.py (2)
adapters/claude/src/nemo_fabric_adapters/claude/adapter.py (1)
  • build_options (491-556)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (4)
  • LifecycleError (42-57)
  • invoke (32-33)
  • start (29-30)
  • stop (35-36)
🪛 LanguageTool
adapters/codex/testing.md

[style] ~26-~26: The double modal “requires decoded” is nonstandard (only accepted in certain dialects). Consider “to be decoded”.
Context: .... The semantic regression also requires decoded LLM request content, a model, token usa...

(NEEDS_FIXED)

🪛 Ruff (0.15.21)
tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py

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

(TRY003)

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

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

(ANN401)

tests/adapters/test_codex_adapter.py

[warning] 44-44: Missing return type annotation for private function scenario

(ANN202)


[warning] 228-228: Missing return type annotation for private function scenario

(ANN202)


[warning] 260-260: Missing return type annotation for private function scenario

(ANN202)


[warning] 828-828: Missing return type annotation for private function scenario

(ANN202)

tests/adapters/test_deepagents.py

[warning] 319-319: Missing return type annotation for private function boom

Add return type annotation: Never

(ANN202)


[warning] 319-319: Missing type annotation for **_kwargs

(ANN003)


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

(TRY003)


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

(RUF043)


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

(RUF043)

tests/adapters/test_claude_adapter.py

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

Add return type annotation: None

(ANN204)


[warning] 58-58: Missing return type annotation for private function connect

Add return type annotation: None

(ANN202)


[warning] 61-61: Missing return type annotation for private function query

Add return type annotation: None

(ANN202)


[warning] 64-64: Missing return type annotation for private function receive_response

(ANN202)


[warning] 67-67: Missing return type annotation for private function disconnect

Add return type annotation: None

(ANN202)


[warning] 70-70: Missing return type annotation for private function interrupt

Add return type annotation: None

(ANN202)


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

(RUF043)


[warning] 707-707: Missing return type annotation for private function responses

(ANN202)


[warning] 777-777: Missing return type annotation for private function responses

(ANN202)


[warning] 835-835: Missing return type annotation for private function responses

(ANN202)


[warning] 895-895: Missing return type annotation for private function responses

(ANN202)


[warning] 931-931: Missing return type annotation for private function responses

(ANN202)

Comment thread adapters/codex/testing.md Outdated
Comment thread tests/adapters/test_claude_adapter.py Outdated
Comment thread tests/adapters/test_codex_adapter.py
Comment thread tests/adapters/test_deepagents.py Outdated
Signed-off-by: Ajay Thorve <athorve@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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 `@tests/adapters/test_claude_adapter.py`:
- Around line 54-75: Replace the hand-written FakeClient used in the
ClaudeSDKClient monkeypatch with a MagicMock factory. Configure connect, query,
disconnect, and interrupt as AsyncMock methods, while preserving prompt
recording and receive_response behavior through the mock instance. Update any
client tracking assertions to use the generated MagicMock instances.
🪄 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: b9b34f20-7a67-4573-a653-f9c2f1045437

📥 Commits

Reviewing files that changed from the base of the PR and between 405a2fc and 95ccfef.

📒 Files selected for processing (5)
  • adapters/codex/testing.md
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_deepagents.py
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
📜 Review details
⏰ Context from checks skipped due to timeout. (9)
  • GitHub Check: Preview docs
  • GitHub Check: Pre-commit
  • GitHub Check: Test (Python 3.12, arm64)
  • GitHub Check: Test (Python 3.14, x86_64)
  • GitHub Check: Test (Python 3.12, x86_64)
  • GitHub Check: Test (Python 3.11, x86_64)
  • GitHub Check: Test (Python 3.11, arm64)
  • GitHub Check: Test (Python 3.13, arm64)
  • GitHub Check: Test (Python 3.13, x86_64)
🧰 Additional context used
📓 Path-based instructions (16)
**/*.{md,mdx,html}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • adapters/codex/testing.md
**/*.{md,mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • adapters/codex/testing.md
**/*

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

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

Files:

  • adapters/codex/testing.md
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
**/*.{html,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

HTML and Markdown files must use the specified SPDX header in an HTML comment.

Files:

  • adapters/codex/testing.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.

Verify README and documentation entry points, package names, paths, examples, and public commands remain current after changes.

Files:

  • adapters/codex/testing.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/codex/testing.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/codex/testing.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 Fabric contracts.

Files:

  • adapters/codex/testing.md
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
**/*.{rs,py}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
**/*.{rs,py,pyi,json,yaml,yml}

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

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

Files:

  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
tests/**/*.py

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

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

Files:

  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
**/*.{py,pyi}

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

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

Files:

  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
**/*.{rs,py,pyi,toml}

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

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

Files:

  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.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/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
tests/adapters/**/*

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

When an adapter or integration changes, run its focused tests under tests/adapters, followed by just test-python.

Files:

  • tests/adapters/test_deepagents.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_claude_adapter.py
🧬 Code graph analysis (2)
tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py (1)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (1)
  • LifecycleError (42-57)
tests/adapters/test_codex_adapter.py (1)
adapters/common/src/nemo_fabric_adapters/common/lifecycle.py (1)
  • LifecycleError (42-57)
🔇 Additional comments (5)
adapters/codex/testing.md (1)

21-28: LGTM!

tests/adapters/test_claude_adapter.py (1)

10-10: LGTM!

Also applies to: 21-21, 709-709, 779-779, 837-837, 897-899, 933-933

tests/adapters/test_codex_adapter.py (1)

9-9: LGTM!

Also applies to: 45-45, 229-229, 261-261, 829-829

tests/adapters/test_deepagents.py (1)

15-15: LGTM!

Also applies to: 283-284

tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py (1)

28-31: LGTM!

Comment thread tests/adapters/test_claude_adapter.py Outdated
Signed-off-by: Ajay Thorve <athorve@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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/README.md`:
- Line 30: Update the Codex row in the adapters matrix to state that a
configured tools.blocked policy is treated as unsupported and raises
UnsupportedToolsPolicy, rather than being silently accepted, normalized, or
partially enforced.
🪄 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: bc941807-b571-42f2-ac4e-055372f280d4

📥 Commits

Reviewing files that changed from the base of the PR and between 95ccfef and db8c33b.

📒 Files selected for processing (2)
  • README.md
  • adapters/README.md
📜 Review details
⏰ Context from checks skipped due to timeout. (10)
  • GitHub Check: Preview docs
  • GitHub Check: Test (Python 3.13, arm64)
  • GitHub Check: Test (Python 3.12, x86_64)
  • GitHub Check: Test (Python 3.13, x86_64)
  • GitHub Check: Test (Python 3.11, x86_64)
  • GitHub Check: Test (Python 3.12, arm64)
  • GitHub Check: Test (Python 3.14, x86_64)
  • GitHub Check: Test (Python 3.14, arm64)
  • GitHub Check: Test (Python 3.11, arm64)
  • GitHub Check: Pre-commit
🧰 Additional context used
📓 Path-based instructions (13)
**/*.{md,mdx,html}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • adapters/README.md
  • README.md
**/README.md

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Update an adapter or example README.md when that adapter or example surface changes.

Files:

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

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

Files:

  • adapters/README.md
  • README.md
**/*

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

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

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

Files:

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

📄 CodeRabbit inference engine (CONTRIBUTING.md)

HTML and Markdown files must use the specified SPDX header in an HTML comment.

Files:

  • adapters/README.md
  • 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.

Verify README and documentation entry points, package names, paths, examples, and public commands remain current after changes.

Files:

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

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

  • adapters/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 Fabric contracts.

Files:

  • adapters/README.md
README.md

📄 CodeRabbit inference engine (CONTRIBUTING.md)

The root README.md must reflect the current workspace, supported adapters, and top-level documentation.

Update README.md when a small Fabric bug fix changes public behavior.

Files:

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

  • 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
{docs/**,README.md,AGENTS.md}

⚙️ CodeRabbit configuration file

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

Files:

  • README.md
🔇 Additional comments (2)
README.md (1)

147-163: LGTM!

Also applies to: 175-176, 200-203, 230-231

adapters/README.md (1)

1-29: LGTM!

Also applies to: 31-64

Comment thread adapters/README.md Outdated
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
Signed-off-by: Ajay Thorve <athorve@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

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

⚠️ Outside diff range comments (1)
adapters/README.md (1)

16-18: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add complete-sentence lead-ins before the first two tables.

The tables under ## Bundled Adapter Packages and ## Configuration Compatibility start immediately after their headings. Add one sentence before each table to introduce its purpose.

As per coding guidelines, “Introduce code blocks, lists, tables, and images with complete sentences.”

Also applies to: 25-27

🤖 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/README.md` around lines 16 - 18, Add complete-sentence introductory
text between the headings and tables in the README sections “Bundled Adapter
Packages” and “Configuration Compatibility,” describing what each table
contains. Keep the existing table content and headings unchanged.

Source: Coding guidelines

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

Inline comments:
In `@tests/adapters/test_claude_adapter.py`:
- Line 60: Update the build_client helper signature to replace options: Any with
object, or the concrete Claude SDK options type if enforcing that contract; keep
the helper’s forwarding and storage behavior unchanged.

---

Outside diff comments:
In `@adapters/README.md`:
- Around line 16-18: Add complete-sentence introductory text between the
headings and tables in the README sections “Bundled Adapter Packages” and
“Configuration Compatibility,” describing what each table contains. Keep the
existing table content and headings unchanged.
🪄 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: 78e16228-3068-4378-b507-9d738fa06bde

📥 Commits

Reviewing files that changed from the base of the PR and between db8c33b and bbc0984.

📒 Files selected for processing (2)
  • adapters/README.md
  • tests/adapters/test_claude_adapter.py
📜 Review details
⏰ Context from checks skipped due to timeout. (9)
  • GitHub Check: Preview docs
  • GitHub Check: Test (Python 3.12, arm64)
  • GitHub Check: Test (Python 3.14, x86_64)
  • GitHub Check: Test (Python 3.13, arm64)
  • GitHub Check: Test (Python 3.11, arm64)
  • GitHub Check: Test (Python 3.11, x86_64)
  • GitHub Check: Test (Python 3.13, x86_64)
  • GitHub Check: Test (Python 3.12, x86_64)
  • GitHub Check: Pre-commit
🧰 Additional context used
📓 Path-based instructions (17)
**/*.{md,rst}

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

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

Files:

  • adapters/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/README.md
  • tests/adapters/test_claude_adapter.py
**/*.{md,mdx,rst}

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

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

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

Files:

  • adapters/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/README.md
**/*.{md,mdx}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.{md,mdx}: Update relevant documentation when public behavior, adapters, examples, or workspace structure changes; update API references and affected README files as applicable.
For documentation-site changes, run just docs to regenerate Python and Rust API references and validate Fern configuration.

**/*.{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/README.md
**/*.{rs,py,html,md,mdx,toml,yaml,yml,sh,bash}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

All source files must include the required SPDX copyright and Apache-2.0 license headers using the comment syntax appropriate to the file type; MDX files must use a JSX comment.

Files:

  • adapters/README.md
  • tests/adapters/test_claude_adapter.py
**/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/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 Fabric contracts.

Files:

  • adapters/README.md
**/*.{rs,py,pyi,json,yaml,yml}

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

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

Files:

  • tests/adapters/test_claude_adapter.py
tests/**/*.py

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

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

Files:

  • tests/adapters/test_claude_adapter.py
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • tests/adapters/test_claude_adapter.py
**/*.{rs,py}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.{rs,py}: Use snake_case for Rust and Python functions and variables; use PascalCase for Rust types and Python classes.
Run tests for every affected language surface; changes to the Rust core or public schemas require both Rust and Python test suites.
When adding functionality, include tests in the corresponding Rust crate or relevant area under tests/.
Keep native Python binding declarations synchronized with their Rust implementations when changing public contracts.
For affected changes, verify packages compile using the appropriate just build-rust, just build-python, or just build-all command.
Use the repository justfile test targets: just test-rust for the Rust workspace, just test-python for Python surfaces, and just test-all for both.

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

**/*.{rs,py}: When changing version-helper code, set_project_version must invoke both Cargo and Python project version helpers.
When changing version-helper code, set_cargo_workspace_version must update the workspace version and nemo-fabric-core workspace dependency, then verify every nemo-fabric-* workspace package through Cargo metadata.
When changing version-helper code, set_python_project_versions must update the root setuptools version, recursively discovered adapter pyproject.toml versions, and all internal exact-version pins while rejecting a static version in python/pyproject.toml.

Files:

  • tests/adapters/test_claude_adapter.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.

Files:

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

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

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

Files:

  • tests/adapters/test_claude_adapter.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_claude_adapter.py
**/*.{py,pyi,rs}

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

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

Files:

  • tests/adapters/test_claude_adapter.py
{tests/**,python/tests/**}

⚙️ CodeRabbit configuration file

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

Files:

  • tests/adapters/test_claude_adapter.py
🪛 Ruff (0.15.21)
tests/adapters/test_claude_adapter.py

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

(ANN401)

🔇 Additional comments (1)
adapters/README.md (1)

30-30: LGTM!

Comment thread tests/adapters/test_claude_adapter.py Outdated
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
Signed-off-by: Ajay Thorve <athorve@nvidia.com>
@AjayThorve

Copy link
Copy Markdown
Collaborator Author

/merge

@rapids-bot
rapids-bot Bot merged commit 4f3f592 into NVIDIA:main Jul 22, 2026
21 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants