Skip to content

feat: make nemo-fabric a typed experimentation CLI - #82

Merged
rapids-bot[bot] merged 23 commits into
NVIDIA:mainfrom
AnuradhaKaruppiah:ak-cli-experiments
Jul 20, 2026
Merged

feat: make nemo-fabric a typed experimentation CLI#82
rapids-bot[bot] merged 23 commits into
NVIDIA:mainfrom
AnuradhaKaruppiah:ak-cli-experiments

Conversation

@AnuradhaKaruppiah

@AnuradhaKaruppiah AnuradhaKaruppiah commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

Overview

This PR removes agent/profile YAML handling and makes complete typed FabricConfig values the only authoring contract. It restores a small Rust/Clap experimentation CLI with built-in presets, maintained examples, and editable Python or Rust scaffolds. RunPlan is the resolved execution contract; compatibility loaders, profile provenance, custom CLI factories, and the public effective-config layer are removed.

This is an intentional breaking change before the first release. Fabric no longer discovers or persists YAML, TOML, or JSON agent configuration. Applications construct FabricConfig through a language API; the CLI is for quick harness probes, maintained examples, planning, and diagnostics.

Details

  • Support run --preset and run --example ... --variant ... with complete typed configurations. Presets accept narrow --model and --temperature overrides for quick experiments.
  • Route the Hermes, Claude, Codex, and DeepAgents presets through https://inference-api.nvidia.com/v1 with one public credential contract: NVIDIA_API_KEY.
  • Add NVIDIA-provider support to the Claude and Codex adapters. Claude translates the shared endpoint for the Anthropic Messages client; Codex defines a request-scoped Responses provider and isolated state directory.
  • Add example init for editable Python and Rust applications. Presets, runnable examples, and both scaffold languages share one catalog and one asset tree.
  • Remove agent/profile files, file-loading APIs, compatibility behavior, and stale documentation.
  • Document installation and the three experimentation paths: presets, maintained examples, and editable scaffolds. The CLI boundary is documented separately.

Package Changes

The nemo-fabric executable is distributed by the independent nemo-fabric-cli Rust crate. Installing nemo-fabric-runtime provides the Python SDK and native binding, but does not install the CLI or the adapter packages. This removes the Python console bridge and lets future language bindings share the Rust core without owning CLI packaging.

The CLI keeps Clap with default features disabled. The change removes serde_yaml, ctrlc, and their unused transitive dependencies. No third-party Python dependency is added.

Where Should the Reviewer Start?

Review the final diff by layer rather than commit history:

  1. docs/experimentation/cli.mdx for the experimentation-only intent, installation boundary, preset catalog, and three supported workflows.
  2. crates/fabric-core/src/config.rs for the typed-only input and RunPlan boundary.
  3. crates/fabric-cli/src/{app,presets,examples,scaffold}.rs for preset reuse, the shared example catalog, NVIDIA-backed presets, and editable scaffolds.
  4. adapters/{claude,codex} for request-scoped NVIDIA provider translation.
  5. python/pyproject.toml and crates/fabric-python/Cargo.toml for the independent CLI and Python SDK packaging.

Review generated schemas, API pages, lockfiles, and attributions last as derived output.

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

  • Closes FABRIC-71

  • 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 the nemo-fabric experimentation CLI with preset/example cataloging, preset-based plan/doctor/run, and example init for editable Python/Rust scaffolds.
  • Updates
    • Transitioned lifecycle operations to typed-config only (no profiles); use base_dir as the root for resolving relative paths and for plan/run/diagnostic outputs.
    • Updated adapter filesystem rooting (workspace/CWD and artifact/telemetry output locations) to be base_dir-centric.
    • Expanded Claude and Codex adapters to support NVIDIA-backed model providers with required environment handling.
  • Documentation
    • Refreshed README, SDK, and API/schema references to match the config-only, FabricConfig/base_dir workflow.

@copy-pr-bot

copy-pr-bot Bot commented Jul 16, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@linear

linear Bot commented Jul 16, 2026

Copy link
Copy Markdown

@coderabbitai

coderabbitai Bot commented Jul 16, 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

Fabric replaces profile-backed configuration with complete typed FabricConfig values, shifts path resolution to base_dir, adds NVIDIA adapter support, introduces the nemo-fabric experimentation CLI with presets/examples/scaffolding, and updates SDK contracts, schemas, tests, and documentation.

Changes

Typed configuration and runtime contracts

Layer / File(s) Summary
Core typed resolution and planning
crates/fabric-core/...
Run planning, runtime payloads, diagnostics, errors, schemas, and exports now use typed configs and base_dir instead of profile-backed resolution.
Python SDK and native bindings
python/src/nemo_fabric/..., crates/fabric-python/...
Lifecycle APIs accept FabricConfig plus optional base_dir; profile models, path-based routing, and Fabric.resolve are removed.
Adapter path and provider handling
adapters/...
Workspace, artifact, relay, executable, and state paths use base_dir; Claude and Codex support NVIDIA model providers with request-scoped credentials and endpoints.

Experimentation CLI

Layer / File(s) Summary
CLI catalog and execution
crates/fabric-cli/src/*.rs, crates/fabric-cli/Cargo.toml
Adds the nemo-fabric binary with preset/example selection, plan/doctor/run commands, model and temperature overrides, staged assets, and deterministic catalog tests.
Example scaffolding
crates/fabric-cli/src/scaffold.rs, crates/fabric-cli/templates/*, crates/fabric-cli/assets/*
Generates editable Python or Rust applications from maintained typed-config examples and embedded adapter assets.

Migration and supporting contracts

Layer / File(s) Summary
Tests and fixtures
tests/...
Tests construct typed configs, pass explicit base directories, update adapter payloads, remove profile fixtures, and validate the revised runtime/result shapes.
Schemas and documentation
schemas/..., docs/..., README.md, pypi.md, skills/...
Public schemas and guidance describe typed configuration, the experimentation CLI boundary, installation changes, and private transient transport.

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 37.25% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is Conventional Commits-formatted, under 72 characters, and accurately summarizes the typed experimentation CLI change.
Description check ✅ Passed The description matches the required template with Overview, reviewer start points, related issue, and checklist items filled in.
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.

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

Caution

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

⚠️ Outside diff range comments (4)
crates/fabric-python/src/lib.rs (1)

53-80: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Treat input_text as mutually exclusive too.

Providing input_text with any file or JSON source silently discards it because the match omits that parameter.

Proposed fix
-    let request = match (request_file, request_json, input_file) {
-        (Some(path), None, None) => ...
-        (None, Some(json), None) => ...
-        (None, None, Some(path)) => ...
-        (None, None, None) => RunRequest::text(input_text.unwrap_or_default()),
+    let request = match (request_file, request_json, input_file, input_text) {
+        (Some(path), None, None, None) => ...
+        (None, Some(json), None, None) => ...
+        (None, None, Some(path), None) => ...
+        (None, None, None, Some(text)) => RunRequest::text(text),
+        (None, None, None, None) => RunRequest::text(""),
         _ => {
             return Err(PyRuntimeError::new_err(
-                "request_file, request_json, and input_file are mutually exclusive",
+                "input_text, input_file, request_json, and request_file are mutually exclusive",
             ));
         }
     };
🤖 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-python/src/lib.rs` around lines 53 - 80, Update run_config’s
request-source matching to include input_text in the mutual-exclusion
validation. Reject input_text when request_file, request_json, or input_file is
provided, while preserving the existing source selection and default empty-text
behavior when no other source is supplied.
crates/fabric-core/src/config.rs (1)

1445-1472: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Reject conflicting duplicated plan state.

RunPlan stores both top-level config/base_dir and effective_config.config/base_dir. A deserialized plan can therefore execute commands using one pair while sending another pair to the adapter.

Use one canonical copy, or validate equality at every lifecycle entry point before accepting serialized plans.

As per path instructions, public core plans must preserve lifecycle correctness and binding parity.

🤖 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/config.rs` around lines 1445 - 1472, Update RunPlan
and its lifecycle entry points to prevent conflicting duplicated plan state
between top-level config/base_dir and effective_config.config/base_dir. Use a
single canonical pair where possible; otherwise validate equality before
accepting or executing deserialized plans, rejecting mismatches while preserving
lifecycle correctness and adapter binding parity.

Source: Path instructions

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

632-652: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Reject the removed profiles field instead of preserving it as an extension.

Because profiles is no longer in _fields, Line 652 places legacy profile input into extra_fields. It then round-trips successfully while providing no profile behavior, silently misconfiguring migrated callers.

Proposed validation
         data = _mapping(value, "FabricConfig")
+        if "profiles" in data:
+            raise FabricConfigError(
+                "FabricConfig profiles are no longer supported; "
+                "compose a complete typed config before calling the SDK"
+            )
         if "metadata" not in data:

As per path instructions, Python SDK runtime models must maintain typed API consistency and native parity.

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

In `@python/src/nemo_fabric/types.py` around lines 632 - 652, Update
_ResolvedFabricConfig.from_mapping to explicitly reject a legacy "profiles" key
before constructing the config, raising the established FabricConfigError rather
than placing it in extra_fields. Preserve existing handling for supported fields
and unrelated extension keys.

Source: Path instructions

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

385-411: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Use the loop’s bounded executor for blocking calls

This path starts a daemon thread per invocation and polls every millisecond. Bursty concurrent calls can pile up threads and scheduler wakeups; switch to asyncio.to_thread() or run_in_executor and preserve the current cancellation-drain behavior with shielding.

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

In `@python/src/nemo_fabric/runtime.py` around lines 385 - 411, Update
_call_blocking to submit func through the event loop’s bounded executor using
asyncio.to_thread() or run_in_executor instead of creating a daemon Thread and
polling a concurrent.futures.Future. Preserve the existing cancellation-drain
behavior by shielding the executor await during cleanup, consuming the worker
result or exception, and re-raising the original CancelledError.

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 `@adapters/common/src/nemo_fabric_adapters/common/relay_gateway.py`:
- Around line 50-58: Update resolve_relay_command to distinguish bare command
names from path-valued inputs using the raw value before Path normalization, so
"./nemo-relay" resolves relative to base_dir rather than through shutil.which as
"nemo-relay". Preserve existing absolute and other relative path handling, and
add a regression test covering "./nemo-relay".

In `@crates/fabric-core/src/config.rs`:
- Around line 981-984: Normalize context.base_dir to an absolute path before
constructing EffectiveConfig, ensuring all derived workspace, artifact, and
skill paths remain absolute regardless of the caller’s current working
directory. Update the relevant config-resolution flow around EffectiveConfig and
add a regression test covering a relative base directory with a distinct
workspace while preserving runtime lifecycle behavior.

In `@crates/fabric-core/src/doctor.rs`:
- Around line 472-493: Extend diagnoses_a_typed_plan_without_file_source_fields
to configure a relative harness command such as bin/tool and resolve the plan
with a base_dir distinct from the process working directory. Assert the doctor
diagnostic resolves the command against <base_dir>/bin/tool, covering the
changed command-path resolution rather than only report serialization. Add an
error-path assertion if the diagnostic exposes behavior for invalid or
unresolved command paths.

In `@crates/fabric-python/src/lib.rs`:
- Around line 31-49: The Python bindings retain the GIL during blocking core
operations. Update plan_config, doctor_config, and run_config to execute
resolve_run_plan_from_config and run_plan inside py.detach(...), following the
existing start_runtime and invoke_runtime pattern while preserving their current
result and error handling.

In `@docs/reference/api/python-library-reference/nemo_fabric.client.md`:
- Around line 76-78: Update the documentation descriptions for plan() and
resolve() to remove stale “agent source” and source/profile-flow terminology.
Describe both methods in terms of accepting complete typed FabricConfig values
and resolving the selected adapter into an immutable execution plan, while
preserving the existing capability and non-starting-runtime behavior.

In
`@docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-effectiveconfig.mdx`:
- Around line 22-24: Update the base_dir field description in the
EffectiveConfig reference to state that it resolves all relative Fabric paths,
not only relative config paths. Use the existing wording pattern “Base directory
used to resolve relative Fabric paths” and leave the surrounding documentation
unchanged.

In `@python/src/nemo_fabric/_bundled/adapters/claude/fabric-adapter.json`:
- Line 7: Update the Claude adapter manifest’s config.accepts list to remove the
nested tools.blocked entry, leaving only top-level capability sections such as
tools. Keep the remaining accepted capabilities unchanged so the manifest
matches resolve_capability_plan.

In `@python/src/nemo_fabric/_bundled/adapters/deepagents/fabric-adapter.json`:
- Line 8: Update the config.accepts array in the adapter manifest to remove the
nested tools.blocked entry while retaining the top-level models, tools, mcp,
skills, and telemetry sections.

In `@python/src/nemo_fabric/_bundled/adapters/hermes/fabric-adapter.json`:
- Line 8: Remove the nested "tools.blocked" entry from the accepts array in the
manifest config, leaving "tools" to cover that nested field while preserving the
other top-level capability entries.

In
`@python/src/nemo_fabric/_bundled/examples/code_review_agent/repo/calculator.py`:
- Line 1: Add the repository-standard SPDX copyright and Apache-2.0 license
comment at the beginning of calculator.py, before the module docstring, using
Python comment syntax and preserving the existing docstring unchanged.
- Around line 4-5: Update divide to explicitly validate count before performing
division, raising ValueError when count is zero; preserve normal division for
nonzero counts and add a regression test covering the zero-divisor case.

In
`@python/src/nemo_fabric/_bundled/examples/code_review_agent/skills/code-review.md`:
- Line 1: Add the required SPDX header as an HTML comment at the beginning of
the Markdown file, then update the top-level heading from “Code review” to “Code
Review,” preserving the existing heading structure.

In `@python/src/nemo_fabric/cli.py`:
- Around line 49-66: Wrap the preset and example builder calls in the same
exception-normalization behavior used by load_factory, covering unexpected
exceptions while preserving existing FabricError, SourceError, OSError, and
ValueError handling. Update the preset branch around preset.factory() and the
example branch around factory() so failures become SourceError and retain the
CLI’s friendly error message.
- Around line 154-173: Update _chat so interactive input does not call blocking
input() directly while the Runtime context is active; obtain input through an
async-compatible executor or equivalent non-blocking mechanism, preserving EOF,
exit-command, and pending-input behavior. Before finalizing, inspect Runtime
from nemo_fabric.client/runtime to confirm whether it schedules background
asyncio work during idle periods, and ensure the fix keeps that work progressing
between invocations.

In `@python/src/nemo_fabric/client.py`:
- Around line 64-68: Update the public documentation for the affected APIs,
including the docstrings around the source-resolution description, to replace
“agent source” terminology with wording that accurately describes resolving a
complete FabricConfig. Apply the same terminology correction to the
corresponding documentation section noted by the review, while preserving the
existing distinction between validation/normalization and plan-time execution
details.

In `@README.md`:
- Around line 169-176: Update the README configuration guidance around the
legacy path/profile paragraph to describe only typed FabricConfig inputs. Remove
references to legacy path sources, profile selection, profile overlays, and
caller-order application, while retaining the guidance to compose complete
configuration variants in Python before invoking the SDK and linking to the
Python SDK guide.

In `@schemas/SCHEMA.md`:
- Line 20: Update the “Config And Planning” heading in SCHEMA.md to use
lowercase “and,” resulting in consistent title case: “Config and Planning.”

In `@tests/e2e/test_cli.py`:
- Line 18: Remove the “-> None” return annotations from the test functions
test_discovery_commands and the other referenced test functions in this file,
while preserving their names, parameters, and bodies.
- Line 44: Update the assertion for preset["effective_config"]["base_dir"] to
use platform-independent path handling and compare the resolved directory
components or Path value instead of checking a slash-specific string suffix,
while preserving validation that it points to the nemo_fabric/_bundled
directory.
- Line 108: Update the variadic argument annotations in call_json and run from
Any to object, since both helpers only pass arguments through str(). Preserve
their existing behavior and return types while removing the ANN401 violations.

---

Outside diff comments:
In `@crates/fabric-core/src/config.rs`:
- Around line 1445-1472: Update RunPlan and its lifecycle entry points to
prevent conflicting duplicated plan state between top-level config/base_dir and
effective_config.config/base_dir. Use a single canonical pair where possible;
otherwise validate equality before accepting or executing deserialized plans,
rejecting mismatches while preserving lifecycle correctness and adapter binding
parity.

In `@crates/fabric-python/src/lib.rs`:
- Around line 53-80: Update run_config’s request-source matching to include
input_text in the mutual-exclusion validation. Reject input_text when
request_file, request_json, or input_file is provided, while preserving the
existing source selection and default empty-text behavior when no other source
is supplied.

In `@python/src/nemo_fabric/runtime.py`:
- Around line 385-411: Update _call_blocking to submit func through the event
loop’s bounded executor using asyncio.to_thread() or run_in_executor instead of
creating a daemon Thread and polling a concurrent.futures.Future. Preserve the
existing cancellation-drain behavior by shielding the executor await during
cleanup, consuming the worker result or exception, and re-raising the original
CancelledError.

In `@python/src/nemo_fabric/types.py`:
- Around line 632-652: Update _ResolvedFabricConfig.from_mapping to explicitly
reject a legacy "profiles" key before constructing the config, raising the
established FabricConfigError rather than placing it in extra_fields. Preserve
existing handling for supported fields and unrelated extension keys.
🪄 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: 8888ad26-0c1f-43da-8d14-619fa6c0eff8

📥 Commits

Reviewing files that changed from the base of the PR and between 77b2b6c and 8835c37.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (161)
  • CLI.md
  • Cargo.toml
  • README.md
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/relay_gateway.py
  • adapters/common/src/nemo_fabric_adapters/common/utils.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • crates/fabric-cli/Cargo.toml
  • crates/fabric-cli/src/main.rs
  • crates/fabric-core/Cargo.toml
  • crates/fabric-core/examples/generate-schemas.rs
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/doctor.rs
  • crates/fabric-core/src/error.rs
  • crates/fabric-core/src/lib.rs
  • crates/fabric-core/src/runtime.rs
  • crates/fabric-core/src/schema.rs
  • crates/fabric-python/src/lib.rs
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
  • 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-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-effectiveconfig.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-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/enum-errorstage.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runrequest.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runresult.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdx
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py
  • python/pyproject.toml
  • python/src/nemo_fabric/__init__.py
  • python/src/nemo_fabric/_bundled/adapters/claude/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/adapters/codex/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/adapters/deepagents/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/adapters/hermes/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/repo/calculator.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/skills/code-review.md
  • python/src/nemo_fabric/_config_sources.py
  • python/src/nemo_fabric/_native.pyi
  • python/src/nemo_fabric/cli.py
  • python/src/nemo_fabric/client.py
  • python/src/nemo_fabric/errors.py
  • python/src/nemo_fabric/factories.py
  • python/src/nemo_fabric/models.py
  • python/src/nemo_fabric/presets.py
  • python/src/nemo_fabric/runtime.py
  • python/src/nemo_fabric/types.py
  • schemas/SCHEMA.md
  • schemas/adapter-descriptor.schema.json
  • schemas/adapter-invocation.schema.json
  • schemas/agent.schema.json
  • schemas/effective-config.schema.json
  • schemas/error-info.schema.json
  • schemas/profile.schema.json
  • schemas/run-plan.schema.json
  • schemas/run-request.schema.json
  • schemas/run-result.schema.json
  • tests/_utils/configs.py
  • tests/_utils/utils.py
  • tests/adapters/test_adapaters_common_utils.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/conftest.py
  • tests/e2e/test_cli.py
  • tests/e2e/test_harbor_swebench_task.py
  • tests/e2e/test_hermes_config_mapping.py
  • tests/e2e/test_hermes_e2e.py
  • tests/e2e/test_local_env_e2e.py
  • tests/e2e/test_swebench_style.py
  • tests/fixtures/file-config-agent/agent.yaml
  • tests/fixtures/file-config-agent/profiles/codex.yaml
  • tests/fixtures/file-config-agent/profiles/deepagents.yaml
  • tests/fixtures/file-config-agent/profiles/env-local.yaml
  • tests/fixtures/file-config-agent/profiles/env-opensandbox.yaml
  • tests/fixtures/file-config-agent/profiles/hermes.yaml
  • tests/fixtures/file-config-agent/profiles/mcp-github.yaml
  • tests/fixtures/file-config-agent/profiles/native-otel.yaml
  • tests/fixtures/file-config-agent/profiles/relay-openinference.yaml
  • tests/fixtures/file-config-agent/profiles/relay-otel.yaml
  • tests/fixtures/file-config-agent/profiles/relay.yaml
  • tests/fixtures/hermes-shim-agent/agent.yaml
  • tests/fixtures/hermes-shim-agent/profiles/env-local.yaml
  • tests/fixtures/hermes-shim-agent/profiles/harbor-swebench-django-13741.yaml
  • tests/fixtures/hermes-shim-agent/profiles/mcp-github.yaml
  • tests/fixtures/hermes-shim-agent/profiles/swebench-shim.yaml
  • tests/integrations/test_harbor_runner.py
  • tests/integrations/test_harbor_telemetry.py
  • tests/python/test_code_review_example.py
  • tests/python/test_harbor_integration.py
  • tests/python/test_native_sdk.py
  • tests/python/test_runtime.py
  • tests/python/test_sdk_concurrency.py
  • tests/python/test_sdk_contract.py
  • tests/python/test_sdk_runtimes.py
  • tests/python/test_typed_config.py
💤 Files with no reviewable changes (43)
  • Cargo.toml
  • tests/fixtures/file-config-agent/profiles/native-otel.yaml
  • tests/fixtures/hermes-shim-agent/agent.yaml
  • tests/fixtures/file-config-agent/agent.yaml
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-with-profiles.mdx
  • tests/fixtures/file-config-agent/profiles/deepagents.yaml
  • crates/fabric-core/Cargo.toml
  • tests/fixtures/hermes-shim-agent/profiles/env-local.yaml
  • tests/fixtures/file-config-agent/profiles/relay-otel.yaml
  • schemas/profile.schema.json
  • tests/fixtures/file-config-agent/profiles/relay-openinference.yaml
  • tests/fixtures/hermes-shim-agent/profiles/mcp-github.yaml
  • tests/fixtures/file-config-agent/profiles/mcp-github.yaml
  • tests/fixtures/hermes-shim-agent/profiles/harbor-swebench-django-13741.yaml
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan.mdx
  • tests/fixtures/hermes-shim-agent/profiles/swebench-shim.yaml
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-profileregistryconfig.mdx
  • tests/fixtures/file-config-agent/profiles/hermes.yaml
  • crates/fabric-cli/Cargo.toml
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-fabricdocument.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-effective-config.mdx
  • tests/conftest.py
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-profileconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-validate-agent-directory.mdx
  • tests/fixtures/file-config-agent/profiles/relay.yaml
  • 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-with-profiles.mdx
  • schemas/agent.schema.json
  • tests/python/test_harbor_integration.py
  • python/src/nemo_fabric/_config_sources.py
  • crates/fabric-cli/src/main.rs
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/index.mdx
  • python/src/nemo_fabric/init.py
  • tests/integrations/test_harbor_runner.py
  • python/src/nemo_fabric/models.py
  • tests/integrations/test_harbor_telemetry.py
  • python/src/nemo_fabric/_native.pyi
  • tests/fixtures/file-config-agent/profiles/env-local.yaml
  • tests/fixtures/file-config-agent/profiles/codex.yaml
  • tests/fixtures/file-config-agent/profiles/env-opensandbox.yaml
  • crates/fabric-core/src/error.rs

Comment thread adapters/common/src/nemo_fabric_adapters/common/relay_gateway.py
Comment thread crates/fabric-core/src/config.rs Outdated
Comment thread crates/fabric-core/src/doctor.rs
Comment thread crates/fabric-python/src/lib.rs
Comment thread docs/reference/api/python-library-reference/nemo_fabric.client.md Outdated
Comment thread README.md Outdated
Comment thread schemas/SCHEMA.md Outdated
Comment thread tests/e2e/test_cli.py Outdated
Comment thread tests/e2e/test_cli.py Outdated
Comment thread tests/e2e/test_cli.py Outdated
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.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

Caution

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

⚠️ Outside diff range comments (1)
python/src/nemo_fabric/runtime.py (1)

385-411: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Avoid millisecond polling for worker completion.

Each native call wakes the event loop about 1,000 times per second. Use a thread-safe completion signal or shielded future while preserving the current cancellation-waits-for-cleanup semantics and cancellation tests.

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

In `@python/src/nemo_fabric/runtime.py` around lines 385 - 411, Update
_call_blocking to replace the 1 ms asyncio.sleep polling with a thread-safe
completion signal or shielded future that notifies the event loop when run
finishes. Preserve the existing behavior where cancellation waits for the worker
to complete, consumes any worker exception, and then re-raises the original
CancelledError; keep cancellation-test expectations intact.

Source: Linters/SAST tools

🤖 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 `@crates/fabric-core/src/config.rs`:
- Around line 1024-1049: Make RunPlan use one authoritative configuration and
path context by removing duplicated agent_name, base_dir, and config state or
validating them against effective_config during construction and
deserialization. Update resolve_run_plan_from_effective_config and the
deserialization/runtime boundary around the referenced RunPlan handling so
runtime paths and adapter payloads always derive from the same values. Preserve
runtime lifecycle behavior and the existing public contract.

In `@examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py`:
- Line 5: Restore the mandatory copyright and Apache-2.0 SPDX header in the
Python source file, placing it after the shebang and before the module
docstring. Preserve the existing shebang and docstring unchanged.

In `@python/src/nemo_fabric/cli.py`:
- Line 151: Update the exit-code logic in the run command to return a nonzero
code when RunResult.status is either "fail" or "failed", while preserving the
zero exit code for all other statuses.

In `@python/src/nemo_fabric/types.py`:
- Line 948: Update the deserialization logic around the base_dir field in the
relevant type conversion method to require base_dir explicitly instead of
defaulting to the current directory. Preserve Path conversion for provided
values, raise the established validation error when the field is missing, and
add a regression test confirming Python SDK behavior matches the native
extension.

In `@schemas/adapter-invocation.schema.json`:
- Around line 220-238: Update the Rust documentation for the enclosing
effective_config field to describe resolved typed configuration with explicit
base_dir rather than “Merged agent config and provenance.” Regenerate the schema
snapshot so the effective_config description matches the updated source
documentation and its agent_name, base_dir, and config properties.

---

Outside diff comments:
In `@python/src/nemo_fabric/runtime.py`:
- Around line 385-411: Update _call_blocking to replace the 1 ms asyncio.sleep
polling with a thread-safe completion signal or shielded future that notifies
the event loop when run finishes. Preserve the existing behavior where
cancellation waits for the worker to complete, consumes any worker exception,
and then re-raises the original CancelledError; keep cancellation-test
expectations intact.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: d7b26d39-a3e9-4bfb-9157-2d49c56a2888

📥 Commits

Reviewing files that changed from the base of the PR and between 8835c37 and 2553b44.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (162)
  • ATTRIBUTIONS-Rust.md
  • CLI.md
  • Cargo.toml
  • README.md
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • adapters/common/src/nemo_fabric_adapters/common/relay_gateway.py
  • adapters/common/src/nemo_fabric_adapters/common/utils.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • adapters/hermes/src/nemo_fabric_adapters/hermes/adapter.py
  • crates/fabric-cli/Cargo.toml
  • crates/fabric-cli/src/main.rs
  • crates/fabric-core/Cargo.toml
  • crates/fabric-core/examples/generate-schemas.rs
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/doctor.rs
  • crates/fabric-core/src/error.rs
  • crates/fabric-core/src/lib.rs
  • crates/fabric-core/src/runtime.rs
  • crates/fabric-core/src/schema.rs
  • crates/fabric-python/src/lib.rs
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.errors.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
  • 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-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-effectiveconfig.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-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/enum-errorstage.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runrequest.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runresult.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdx
  • examples/harbor/calculator/task/environment/fabric/adapters/scripted/run.py
  • python/pyproject.toml
  • python/src/nemo_fabric/__init__.py
  • python/src/nemo_fabric/_bundled/adapters/claude/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/adapters/codex/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/adapters/deepagents/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/adapters/hermes/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/repo/calculator.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/skills/code-review.md
  • python/src/nemo_fabric/_config_sources.py
  • python/src/nemo_fabric/_native.pyi
  • python/src/nemo_fabric/cli.py
  • python/src/nemo_fabric/client.py
  • python/src/nemo_fabric/errors.py
  • python/src/nemo_fabric/factories.py
  • python/src/nemo_fabric/models.py
  • python/src/nemo_fabric/presets.py
  • python/src/nemo_fabric/runtime.py
  • python/src/nemo_fabric/types.py
  • schemas/SCHEMA.md
  • schemas/adapter-descriptor.schema.json
  • schemas/adapter-invocation.schema.json
  • schemas/agent.schema.json
  • schemas/effective-config.schema.json
  • schemas/error-info.schema.json
  • schemas/profile.schema.json
  • schemas/run-plan.schema.json
  • schemas/run-request.schema.json
  • schemas/run-result.schema.json
  • tests/_utils/configs.py
  • tests/_utils/utils.py
  • tests/adapters/test_adapaters_common_utils.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/conftest.py
  • tests/e2e/test_cli.py
  • tests/e2e/test_harbor_swebench_task.py
  • tests/e2e/test_hermes_config_mapping.py
  • tests/e2e/test_hermes_e2e.py
  • tests/e2e/test_local_env_e2e.py
  • tests/e2e/test_swebench_style.py
  • tests/fixtures/file-config-agent/agent.yaml
  • tests/fixtures/file-config-agent/profiles/codex.yaml
  • tests/fixtures/file-config-agent/profiles/deepagents.yaml
  • tests/fixtures/file-config-agent/profiles/env-local.yaml
  • tests/fixtures/file-config-agent/profiles/env-opensandbox.yaml
  • tests/fixtures/file-config-agent/profiles/hermes.yaml
  • tests/fixtures/file-config-agent/profiles/mcp-github.yaml
  • tests/fixtures/file-config-agent/profiles/native-otel.yaml
  • tests/fixtures/file-config-agent/profiles/relay-openinference.yaml
  • tests/fixtures/file-config-agent/profiles/relay-otel.yaml
  • tests/fixtures/file-config-agent/profiles/relay.yaml
  • tests/fixtures/hermes-shim-agent/agent.yaml
  • tests/fixtures/hermes-shim-agent/profiles/env-local.yaml
  • tests/fixtures/hermes-shim-agent/profiles/harbor-swebench-django-13741.yaml
  • tests/fixtures/hermes-shim-agent/profiles/mcp-github.yaml
  • tests/fixtures/hermes-shim-agent/profiles/swebench-shim.yaml
  • tests/integrations/test_harbor_runner.py
  • tests/integrations/test_harbor_telemetry.py
  • tests/python/test_code_review_example.py
  • tests/python/test_harbor_integration.py
  • tests/python/test_native_sdk.py
  • tests/python/test_runtime.py
  • tests/python/test_sdk_concurrency.py
  • tests/python/test_sdk_contract.py
  • tests/python/test_sdk_runtimes.py
  • tests/python/test_typed_config.py
💤 Files with no reviewable changes (43)
  • 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.mdx
  • tests/fixtures/file-config-agent/profiles/native-otel.yaml
  • tests/fixtures/file-config-agent/profiles/relay.yaml
  • tests/fixtures/file-config-agent/profiles/codex.yaml
  • crates/fabric-cli/Cargo.toml
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-profileconfig.mdx
  • tests/fixtures/file-config-agent/profiles/hermes.yaml
  • tests/fixtures/hermes-shim-agent/profiles/harbor-swebench-django-13741.yaml
  • tests/fixtures/file-config-agent/profiles/relay-openinference.yaml
  • tests/fixtures/file-config-agent/profiles/mcp-github.yaml
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-fabric-document.mdx
  • tests/fixtures/file-config-agent/profiles/env-local.yaml
  • tests/integrations/test_harbor_telemetry.py
  • tests/fixtures/file-config-agent/profiles/relay-otel.yaml
  • tests/conftest.py
  • tests/fixtures/hermes-shim-agent/profiles/swebench-shim.yaml
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-fabricdocument.mdx
  • tests/fixtures/hermes-shim-agent/agent.yaml
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-with-profiles.mdx
  • tests/fixtures/file-config-agent/agent.yaml
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-profileregistryconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-validate-agent-directory.mdx
  • tests/fixtures/hermes-shim-agent/profiles/mcp-github.yaml
  • tests/fixtures/hermes-shim-agent/profiles/env-local.yaml
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-effective-config-with-profiles.mdx
  • crates/fabric-cli/src/main.rs
  • schemas/agent.schema.json
  • tests/fixtures/file-config-agent/profiles/env-opensandbox.yaml
  • tests/integrations/test_harbor_runner.py
  • python/src/nemo_fabric/_config_sources.py
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • tests/fixtures/file-config-agent/profiles/deepagents.yaml
  • Cargo.toml
  • schemas/profile.schema.json
  • tests/python/test_harbor_integration.py
  • crates/fabric-core/Cargo.toml
  • python/src/nemo_fabric/init.py
  • python/src/nemo_fabric/models.py
  • docs/reference/api/rust-library-reference/nemo-fabric-core/index.mdx
  • crates/fabric-core/src/error.rs
  • python/src/nemo_fabric/_native.pyi
  • ATTRIBUTIONS-Rust.md

Comment thread crates/fabric-core/src/config.rs Outdated
Comment thread python/src/nemo_fabric/cli.py Outdated
Comment thread python/src/nemo_fabric/types.py Outdated
Comment thread schemas/adapter-invocation.schema.json Outdated
@AnuradhaKaruppiah AnuradhaKaruppiah changed the title FABRIC-71: experiment with typed SDK-backed CLI Experiment with typed SDK-backed CLI Jul 17, 2026
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
@AnuradhaKaruppiah AnuradhaKaruppiah changed the title Experiment with typed SDK-backed CLI Make nemo-fabric a typed SDK-backed experimentation CLI Jul 17, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

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

Inline comments:
In `@docs/getting-started/overview.mdx`:
- Line 138: Rename the “Core workflow” heading to “Core Workflow” in the
documentation while preserving the existing heading level and surrounding
content.

In `@docs/sdk/python.mdx`:
- Around line 17-19: Update the configuration description in the documentation
paragraph to use “can use ordinary Python functions” instead of “may use
ordinary Python functions,” preserving the surrounding wording.

In `@python/src/nemo_fabric/_bundled/examples/code_review_agent/README.md`:
- Line 6: Update the README heading “Editable code-review example” to title
case, capitalizing the relevant words while preserving the heading’s meaning.

In `@README.md`:
- Around line 51-53: Update the README description of the nemo-fabric CLI to
explicitly identify it as experimental, while retaining that it supports
developer experiments and diagnostics; state that the Python SDK remains the
stable integration contract.
🪄 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: 05854a00-be7b-4161-8564-168b927c9ba2

📥 Commits

Reviewing files that changed from the base of the PR and between 2553b44 and cf654ad.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (17)
  • CLI.md
  • README.md
  • adapters/hermes/README.md
  • docs/getting-started/overview.mdx
  • docs/sdk/python.mdx
  • pypi.md
  • pyproject.toml
  • python/src/nemo_fabric/_bundled/adapters/scripted/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/adapters/scripted/run.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/README.md
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/config.py
  • python/src/nemo_fabric/cli.py
  • python/src/nemo_fabric/presets.py
  • tests/e2e/test_cli.py
📜 Review details
🧰 Additional context used
📓 Path-based instructions (36)
**/*.{json,jsonc}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • python/src/nemo_fabric/_bundled/adapters/scripted/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/fabric-adapter.json
**/*

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

  • python/src/nemo_fabric/_bundled/adapters/scripted/fabric-adapter.json
  • pyproject.toml
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/README.md
  • adapters/hermes/README.md
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/config.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.py
  • CLI.md
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/adapters/scripted/run.py
  • pypi.md
  • docs/getting-started/overview.mdx
  • docs/sdk/python.mdx
  • python/src/nemo_fabric/presets.py
  • tests/e2e/test_cli.py
  • README.md
  • python/src/nemo_fabric/cli.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:

  • python/src/nemo_fabric/_bundled/adapters/scripted/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/config.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/adapters/scripted/run.py
  • python/src/nemo_fabric/presets.py
  • tests/e2e/test_cli.py
  • python/src/nemo_fabric/cli.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/_bundled/adapters/scripted/fabric-adapter.json
  • pyproject.toml
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/README.md
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/config.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/adapters/scripted/run.py
  • python/src/nemo_fabric/presets.py
  • python/src/nemo_fabric/cli.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/_bundled/adapters/scripted/fabric-adapter.json
  • pyproject.toml
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/README.md
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/config.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/adapters/scripted/run.py
  • python/src/nemo_fabric/presets.py
  • python/src/nemo_fabric/cli.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/_bundled/adapters/scripted/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/README.md
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/config.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/adapters/scripted/run.py
  • python/src/nemo_fabric/presets.py
  • python/src/nemo_fabric/cli.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:

  • pyproject.toml
**/*.{toml,yaml,yml,sh,bash}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

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

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

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

Files:

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

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

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

Files:

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

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

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

Files:

  • pyproject.toml
**/pyproject.toml

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

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

Files:

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

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

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

Files:

  • pyproject.toml
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/config.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.py
  • python/src/nemo_fabric/_bundled/adapters/scripted/run.py
  • python/src/nemo_fabric/presets.py
  • tests/e2e/test_cli.py
  • python/src/nemo_fabric/cli.py
**/*.{md,mdx,html}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • python/src/nemo_fabric/_bundled/examples/code_review_agent/README.md
  • adapters/hermes/README.md
  • CLI.md
  • pypi.md
  • docs/getting-started/overview.mdx
  • docs/sdk/python.mdx
  • README.md
**/README.md

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • python/src/nemo_fabric/_bundled/examples/code_review_agent/README.md
  • adapters/hermes/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:

  • python/src/nemo_fabric/_bundled/examples/code_review_agent/README.md
  • adapters/hermes/README.md
  • CLI.md
  • pypi.md
  • docs/getting-started/overview.mdx
  • docs/sdk/python.mdx
  • README.md
**/*.{html,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • python/src/nemo_fabric/_bundled/examples/code_review_agent/README.md
  • adapters/hermes/README.md
  • CLI.md
  • pypi.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:

  • python/src/nemo_fabric/_bundled/examples/code_review_agent/README.md
  • adapters/hermes/README.md
  • CLI.md
  • pypi.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:

  • python/src/nemo_fabric/_bundled/examples/code_review_agent/README.md
  • adapters/hermes/README.md
  • CLI.md
  • pypi.md
  • docs/getting-started/overview.mdx
  • docs/sdk/python.mdx
  • 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:

  • python/src/nemo_fabric/_bundled/examples/code_review_agent/README.md
  • adapters/hermes/README.md
  • CLI.md
  • pypi.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/hermes/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:

  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/config.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.py
  • python/src/nemo_fabric/_bundled/adapters/scripted/run.py
  • python/src/nemo_fabric/presets.py
  • tests/e2e/test_cli.py
  • python/src/nemo_fabric/cli.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/_bundled/examples/code_review_agent/adapters/scripted/run.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/config.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.py
  • python/src/nemo_fabric/_bundled/adapters/scripted/run.py
  • python/src/nemo_fabric/presets.py
  • tests/e2e/test_cli.py
  • python/src/nemo_fabric/cli.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/_bundled/examples/code_review_agent/adapters/scripted/run.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/config.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.py
  • python/src/nemo_fabric/_bundled/adapters/scripted/run.py
  • python/src/nemo_fabric/presets.py
  • tests/e2e/test_cli.py
  • python/src/nemo_fabric/cli.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/getting-started/overview.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/getting-started/overview.mdx
  • 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/getting-started/overview.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/getting-started/overview.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/getting-started/overview.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/getting-started/overview.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/getting-started/overview.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/getting-started/overview.mdx
  • docs/sdk/python.mdx
  • 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_cli.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_cli.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,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
🧠 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:

  • python/src/nemo_fabric/_bundled/adapters/scripted/fabric-adapter.json
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/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/_bundled/examples/code_review_agent/adapters/scripted/run.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/config.py
  • python/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.py
  • python/src/nemo_fabric/_bundled/adapters/scripted/run.py
  • python/src/nemo_fabric/presets.py
  • python/src/nemo_fabric/cli.py
🧬 Code graph analysis (3)
python/src/nemo_fabric/_bundled/examples/code_review_agent/config.py (1)
crates/fabric-core/src/runtime.rs (2)
  • adapter_id (1192-1197)
  • harness (1210-1215)
python/src/nemo_fabric/presets.py (1)
crates/fabric-core/src/runtime.rs (2)
  • adapter_id (1192-1197)
  • harness (1210-1215)
python/src/nemo_fabric/cli.py (1)
crates/fabric-python/src/lib.rs (1)
  • _native (127-137)
🪛 ast-grep (0.44.1)
python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.py

[info] 12-12: use jsonify instead of json.dumps for JSON output
Context: json.dumps({"response": request.get("input"), "request_id": request["request_id"]})
Note: [CWE-116] Improper Encoding or Escaping of Output.

(use-jsonify)

python/src/nemo_fabric/_bundled/adapters/scripted/run.py

[info] 13-18: use jsonify instead of json.dumps for JSON output
Context: json.dumps(
{
"response": request.get("input"),
"request_id": request["request_id"],
}
)
Note: [CWE-116] Improper Encoding or Escaping of Output.

(use-jsonify)

🪛 Ruff (0.15.21)
tests/e2e/test_cli.py

[warning] 163-163: Dynamically typed expressions (typing.Any) are disallowed in *args

(ANN401)


[warning] 167-167: Dynamically typed expressions (typing.Any) are disallowed in *args

(ANN401)


[warning] 175-175: Dynamically typed expressions (typing.Any) are disallowed in *args

(ANN401)


[warning] 179-179: Dynamically typed expressions (typing.Any) are disallowed in *args

(ANN401)


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

(S603)

python/src/nemo_fabric/cli.py

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

(TRY003)


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

(TRY003)


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

(TRY003)


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

(TRY003)


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

(TRY003)

🔇 Additional comments (22)
CLI.md (1)

6-114: LGTM!

python/src/nemo_fabric/cli.py (4)

58-70: Normalize preset and example factory failures.

These factory calls still bypass load_factory()’s exception normalization, so unexpected builder exceptions escape as tracebacks.


170-183: Return nonzero for failed runs.

RunResult.status == "failed" still returns success because only "fail" is checked.


185-204: Avoid blocking the active event loop.

input() still blocks while the runtime async context is open.


4-12: LGTM!

Also applies to: 89-157, 160-168, 207-275, 277-294

tests/e2e/test_cli.py (3)

18-18: Remove test return annotations.

These -> None annotations still violate the repository’s Pytest convention.

Also applies to: 41-41, 52-52, 62-62, 147-147


163-179: Use object for variadic helper arguments.

The helpers only stringify and forward these values, so Any remains unnecessarily broad.


23-160: LGTM!

Also applies to: 180-193

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

33-61: LGTM!

Also applies to: 73-73, 92-106, 168-216

README.md (1)

22-27: LGTM!

Also applies to: 55-71, 107-107, 160-204

adapters/hermes/README.md (1)

56-59: LGTM!

docs/getting-started/overview.mdx (2)

23-62: LGTM!

Also applies to: 134-143


23-25: 📐 Maintainability & Code Quality

Run just docs and commit any generated output. The repo’s docs target also runs fern check, so these .mdx changes should include the generated docs artifacts.

docs/sdk/python.mdx (1)

156-156: LGTM!

Also applies to: 442-473

pypi.md (1)

15-26: LGTM!

Also applies to: 61-72

pyproject.toml (1)

27-29: 🩺 Stability & Availability

Verify that the runtime dependency is resolvable.

The public lookup for nemo-fabric-runtime version 0.1.0 returned 404. If this package is not supplied by a configured private index or workspace artifact, installing the CLI will fail before execution. Verify the package source and update the dependency lockfile consistently.

Based on the PR objective that this is an installable experimental CLI. As per coding guidelines, package metadata and dependency resolution must stay synchronized across manifests and lockfiles. ()

Source: Coding guidelines

python/src/nemo_fabric/_bundled/adapters/scripted/fabric-adapter.json (1)

1-11: LGTM!

python/src/nemo_fabric/_bundled/adapters/scripted/run.py (1)

1-20: LGTM!

python/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.py (1)

1-8: LGTM!

python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/fabric-adapter.json (1)

1-11: LGTM!

python/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.py (1)

1-13: LGTM!

python/src/nemo_fabric/_bundled/examples/code_review_agent/config.py (1)

13-29: LGTM!

Comment thread docs/about-nemo-fabric/overview.mdx Outdated
Comment thread docs/sdk/python.mdx Outdated
Comment thread python/src/nemo_fabric/_bundled/examples/code_review_agent/README.md Outdated
Comment thread README.md Outdated
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>

# Conflicts:
#	README.md
@AnuradhaKaruppiah AnuradhaKaruppiah changed the title Make nemo-fabric a typed SDK-backed experimentation CLI feat: make nemo-fabric a typed SDK-backed experimentation CLI Jul 17, 2026

@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 (3)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (1)

502-519: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Guard the DeepAgents integration imports too. A partial nemo_relay install or older release without nemo_relay.integrations.deepagents will still surface a generic ImportError/ModuleNotFoundError here instead of the Relay-specific install hint. Wrap these imports in the same dependency check or catch that import path and re-raise the actionable message.

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

In `@adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py` around
lines 502 - 519, Update the telemetry setup around the lazy nemo_relay imports
in the DeepAgents integration to catch missing or incomplete nemo_relay
installations, including absent nemo_relay.integrations.deepagents modules, and
re-raise the existing actionable Relay installation RuntimeError instead of
exposing a raw ImportError or ModuleNotFoundError. Preserve the current
import-time dependency neutrality and successful import path.
skills/nemo-fabric-integrate/SKILL.md (1)

129-151: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Make the lifecycle example runnable or label it as a fragment.

The text calls this a “complete, runnable program,” but Lines 139-151 use config and base without defining them; the preceding to_fabric_config(job) function is never called. Either construct and pass those values or change the description and show the required setup separately.

As per coding guidelines, documentation examples must remain aligned with current repository behavior.

🤖 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 `@skills/nemo-fabric-integrate/SKILL.md` around lines 129 - 151, Update the
lifecycle example around main to be genuinely runnable by defining the required
config and base values, using the existing to_fabric_config(job) conversion
where appropriate, and ensuring both Fabric calls receive those defined values.
Preserve the one-shot and multi-turn examples while keeping them aligned with
current repository behavior.

Source: Coding guidelines

tests/adapters/test_deepagents.py (1)

176-185: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add the annotations required by Ruff to the new test helpers.

Ruff reports ANN202, ANN203, ANN204, ANN002, and ANN003 for these helpers. Add explicit parameter and return annotations, including -> None for the callback handler initializer, so the changed test file satisfies the repository’s annotation policy.

Also applies to: 404-407

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

In `@tests/adapters/test_deepagents.py` around lines 176 - 185, Add the required
type annotations to the test helpers scope_ctx and
NemoRelayDeepAgentsCallbackHandler.__init__, including annotations for all
named, positional, and keyword parameters and explicit return annotations; use
-> None for the initializer and the appropriate context-manager return
annotation for scope_ctx. Apply the same annotation updates to the corresponding
helpers around the additional referenced location.

Source: Linters/SAST tools

🤖 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/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py`:
- Around line 502-519: Update the telemetry setup around the lazy nemo_relay
imports in the DeepAgents integration to catch missing or incomplete nemo_relay
installations, including absent nemo_relay.integrations.deepagents modules, and
re-raise the existing actionable Relay installation RuntimeError instead of
exposing a raw ImportError or ModuleNotFoundError. Preserve the current
import-time dependency neutrality and successful import path.

In `@skills/nemo-fabric-integrate/SKILL.md`:
- Around line 129-151: Update the lifecycle example around main to be genuinely
runnable by defining the required config and base values, using the existing
to_fabric_config(job) conversion where appropriate, and ensuring both Fabric
calls receive those defined values. Preserve the one-shot and multi-turn
examples while keeping them aligned with current repository behavior.

In `@tests/adapters/test_deepagents.py`:
- Around line 176-185: Add the required type annotations to the test helpers
scope_ctx and NemoRelayDeepAgentsCallbackHandler.__init__, including annotations
for all named, positional, and keyword parameters and explicit return
annotations; use -> None for the initializer and the appropriate context-manager
return annotation for scope_ctx. Apply the same annotation updates to the
corresponding helpers around the additional referenced location.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 55e327e9-57cd-452f-8332-104e2538c81f

📥 Commits

Reviewing files that changed from the base of the PR and between cf654ad and 5fe0f1d.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (7)
  • CONTRIBUTING.md
  • README.md
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • docs/getting-started/install.mdx
  • pyproject.toml
  • skills/nemo-fabric-integrate/SKILL.md
  • tests/adapters/test_deepagents.py
📜 Review details
🧰 Additional context used
📓 Path-based instructions (35)
**/*

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

**/*: 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 Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to) with the required content.
Only check contribution-confirmation boxes when they are true; if either confirmation cannot be made, stop before opening the pull request and surface...

Files:

  • pyproject.toml
  • CONTRIBUTING.md
  • docs/getting-started/install.mdx
  • tests/adapters/test_deepagents.py
  • skills/nemo-fabric-integrate/SKILL.md
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • README.md
{Cargo.toml,pyproject.toml,python/pyproject.toml,python/src/nemo_fabric/**}

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

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

Files:

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

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

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

Files:

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

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

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

Files:

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

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

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

Files:

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

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

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

Files:

  • pyproject.toml
**/pyproject.toml

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

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

Files:

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

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

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

Files:

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

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

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

Files:

  • pyproject.toml
  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
**/*.{toml,yaml,yml,sh}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

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

  • CONTRIBUTING.md
  • skills/nemo-fabric-integrate/SKILL.md
  • README.md
**/*.{md,mdx}

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

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

  • CONTRIBUTING.md
  • docs/getting-started/install.mdx
  • skills/nemo-fabric-integrate/SKILL.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:

  • CONTRIBUTING.md
  • docs/getting-started/install.mdx
  • skills/nemo-fabric-integrate/SKILL.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:

  • CONTRIBUTING.md
  • skills/nemo-fabric-integrate/SKILL.md
  • README.md
**/*.{html,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • CONTRIBUTING.md
  • skills/nemo-fabric-integrate/SKILL.md
  • README.md
{README.md,docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

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

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

Files:

  • docs/getting-started/install.mdx
  • README.md
{docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

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

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

Files:

  • docs/getting-started/install.mdx
**/*.mdx

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

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

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

Files:

  • docs/getting-started/install.mdx
docs/**/*.{md,mdx,yml}

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

Run just docs when the documentation site changes.

Files:

  • docs/getting-started/install.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/getting-started/install.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/getting-started/install.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/getting-started/install.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/getting-started/install.mdx
  • 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_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/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_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/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/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
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

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

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Use snake_case for Rust and Python functions and variables; use PascalCase for Rust types and Python classes.

Files:

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

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • tests/adapters/test_deepagents.py
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/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_deepagents.py
**/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
{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/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
{README.md,docs/index.yml}

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

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

Files:

  • README.md
README.md

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

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

Files:

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

Timestamp: 2026-07-17T16:50:48.367Z
Learning: Run tests for every language surface affected by a change; changes touching the Rust core or public schemas must run both Rust and Python test suites.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-17T16:50:48.367Z
Learning: Update corresponding documentation in the same branch when public behavior, adapters, examples, or workspace structure changes.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-17T16:50:48.367Z
Learning: For documentation-site changes, run `just docs` to regenerate Python and Rust API references and validate Fern configuration.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

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

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

Timestamp: 2026-07-17T16:50:48.367Z
Learning: Before submitting a pull request, identify an issue, run relevant tests, verify affected packages compile, update documentation, and rebase on the latest `main`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-17T16:50:48.367Z
Learning: All pull requests require at least one approving review, must address review feedback without force-pushing during review, and must pass CI before merging.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-17T16:50:48.367Z
Learning: Use commit messages in the form `type: short description`, with an allowed type such as `feat`, `fix`, `docs`, `test`, `refactor`, `chore`, or `perf`; keep the first line under 72 characters.
📚 Learning: 2026-07-09T22:28:51.689Z
Learnt from: AjayThorve
Repo: NVIDIA/NeMo-Fabric PR: 43
File: adapters/claude-sdk/src/nemo_fabric_adapters/claude_sdk/adapter.py:164-168
Timestamp: 2026-07-09T22:28:51.689Z
Learning: In the NeMo-Fabric adapters, treat path values used in Fabric adapter configuration (including logic like `_resolve_path` in adapter.py) as config-root-relative. Do not apply `Path.expanduser()` (or otherwise apply `~`/home or shell-style expansion), because it will make the resolved paths normalize inconsistently across adapters. Also, do not rely on or add any resolution behavior that uses `harness.settings.cwd` as an override point for these adapter paths—`harness.settings.cwd` is explicitly unsupported in this adapter context.

Applied to files:

  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
🧬 Code graph analysis (1)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (2)
adapters/common/src/nemo_fabric_adapters/common/utils.py (1)
  • relay_api_plugin_config (269-326)
tests/adapters/test_deepagents.py (1)
  • add_nemo_relay_integration (163-167)
🪛 Ruff (0.15.21)
tests/adapters/test_deepagents.py

[warning] 177-177: Missing return type annotation for private function scope_ctx

(ANN202)


[warning] 177-177: Missing type annotation for **_

(ANN003)


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

Add return type annotation: None

(ANN204)


[warning] 184-184: Missing type annotation for *_args

(ANN002)


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

(ANN003)


[warning] 404-404: Missing return type annotation for private function fake_find_spec

(ANN202)


[warning] 404-404: Missing type annotation for *args

(ANN002)


[warning] 404-404: Missing type annotation for **kwargs

(ANN003)

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

[warning] 510-513: Abstract raise to an inner function

(TRY301)


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

(TRY003)

🔇 Additional comments (12)
adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py (2)

228-228: LGTM!

Also applies to: 312-322


521-534: LGTM!

Also applies to: 572-610

README.md (3)

49-53: Identify the CLI as experimental.

The section still calls nemo-fabric a “maintained developer interface” without explicitly stating that it is an experimental surface. The prior review requested this same correction; state that the Python SDK is the stable application-facing contract.


107-113: 🎯 Functional Correctness

Use one canonical Hermes adapter extra name.

This command uses nemo-fabric[hermes], while CONTRIBUTING.md and docs/getting-started/install.mdx document nemo-fabric[adapters-hermes]. Verify the name declared in pyproject.toml and make all installation instructions consistent; otherwise this quick start can fail with an unknown-extra error.

As per path instructions, documentation commands must be verified against current packaging metadata.

Source: Path instructions


22-47: LGTM!

Also applies to: 55-71, 75-105, 115-143, 160-191, 201-206

pyproject.toml (2)

82-84: 🩺 Stability & Availability

Verify nemo-relay 0.6 compatibility before widening the resolver.

This range automatically admits a future 0.6 release, while the new tests stub ScopeType, scope, and the Deep Agents callback API. Verify those symbols and signatures against every admitted version, or cap this at <0.6 until 0.6 is covered; otherwise telemetry-enabled runs can break after dependency resolution changes.


27-29: LGTM!

Also applies to: 97-99

CONTRIBUTING.md (1)

23-23: LGTM!

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

60-60: LGTM!

tests/adapters/test_deepagents.py (2)

173-201: 🩺 Stability & Availability

Verify the real nemo-relay API, not only the stub.

These tests can pass even if the declared Relay dependency does not expose ScopeType.Agent, scope.scope, or the Deep Agents callback with these signatures. Add an environment-level smoke check or run one path with the real optional dependency before relying on these assertions.


127-149: LGTM!

Also applies to: 299-334, 337-391, 394-403, 409-427, 429-458, 461-467

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

1-7: LGTM!

Also applies to: 9-128, 154-271

Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>

# Conflicts:
#	docs/about-nemo-fabric/overview.mdx
#	docs/getting-started/install.mdx
#	docs/sdk/python.mdx

@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 (2)
docs/about-nemo-fabric/overview.mdx (1)

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

Use title case for the heading.

Rename the heading to ## How NeMo Fabric Fits.

As per coding guidelines, technical-documentation headings use title case.

🤖 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 `@docs/about-nemo-fabric/overview.mdx` at line 39, Update the “How NeMo Fabric
fits” heading to title case as “How NeMo Fabric Fits,” preserving the existing
heading level and wording.

Source: Coding guidelines

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

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

Hyphenate “NVIDIA-hosted.”

Use the compound modifier NVIDIA-hosted model.

Proposed wording
-The following code example uses an NVIDIA hosted model, and requires an NVIDIA API key defined with the `NVIDIA_API_KEY`
+The following code example uses an NVIDIA-hosted model and requires an NVIDIA API key defined with the `NVIDIA_API_KEY`
🤖 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 `@docs/getting-started/quickstart.mdx` at line 23, Update the wording in the
NVIDIA API key quickstart description to hyphenate the compound modifier as
“NVIDIA-hosted model,” without changing the rest of the sentence.

Sources: Coding guidelines, Linters/SAST tools

🤖 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 `@docs/about-nemo-fabric/overview.mdx`:
- Line 39: Update the “How NeMo Fabric fits” heading to title case as “How NeMo
Fabric Fits,” preserving the existing heading level and wording.

In `@docs/getting-started/quickstart.mdx`:
- Line 23: Update the wording in the NVIDIA API key quickstart description to
hyphenate the compound modifier as “NVIDIA-hosted model,” without changing the
rest of the sentence.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: a2bde9b7-f5cf-49b1-8a1d-afea601b91d8

📥 Commits

Reviewing files that changed from the base of the PR and between 5fe0f1d and d785f4b.

📒 Files selected for processing (7)
  • .agents/skills/review-doc-style/SKILL.md
  • README.md
  • docs/about-nemo-fabric/overview.mdx
  • docs/getting-started/install.mdx
  • docs/getting-started/quickstart.mdx
  • docs/sdk/python.mdx
  • skills/nemo-fabric-integrate/SKILL.md
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
  • GitHub Check: Pre-commit
🧰 Additional context used
📓 Path-based instructions (17)
{README.md,docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

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

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

Files:

  • docs/getting-started/quickstart.mdx
  • docs/getting-started/install.mdx
  • docs/about-nemo-fabric/overview.mdx
  • README.md
  • 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/getting-started/quickstart.mdx
  • docs/getting-started/install.mdx
  • docs/about-nemo-fabric/overview.mdx
  • docs/sdk/python.mdx
**/*.mdx

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

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

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

Files:

  • docs/getting-started/quickstart.mdx
  • docs/getting-started/install.mdx
  • docs/about-nemo-fabric/overview.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/getting-started/quickstart.mdx
  • docs/getting-started/install.mdx
  • docs/about-nemo-fabric/overview.mdx
  • docs/sdk/python.mdx
**/*

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

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

**/*: 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 Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to) with the required content.
Only check contribution-confirmation boxes when they are true; if either confirmation cannot be made, stop before opening the pull request and surface...

Files:

  • docs/getting-started/quickstart.mdx
  • docs/getting-started/install.mdx
  • skills/nemo-fabric-integrate/SKILL.md
  • docs/about-nemo-fabric/overview.mdx
  • README.md
  • 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/getting-started/quickstart.mdx
  • docs/getting-started/install.mdx
  • docs/about-nemo-fabric/overview.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/getting-started/quickstart.mdx
  • docs/getting-started/install.mdx
  • docs/about-nemo-fabric/overview.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/getting-started/quickstart.mdx
  • docs/getting-started/install.mdx
  • skills/nemo-fabric-integrate/SKILL.md
  • docs/about-nemo-fabric/overview.mdx
  • 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/getting-started/quickstart.mdx
  • docs/getting-started/install.mdx
  • docs/about-nemo-fabric/overview.mdx
  • docs/sdk/python.mdx
**/*.{md,mdx}

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

**/*.{md,mdx}: Use the full product name NVIDIA NeMo Fabric on first usage, typically in the title or H1; use NeMo Fabric thereafter. Use fabric alone only for the CLI tool and surround it with backticks.
Capitalize NVIDIA correctly in public-facing documentation.
Format commands, code elements, expressions, file names, paths, and filenames as inline code where needed.
Use title case for headings in technical documentation.
Use descriptive anchor text instead of raw URLs or generic link text such as here.
Introduce code blocks, tables, and lists with complete lead-in sentences.
Prefer active voice, present tense, short sentences, and plain English.
Write procedures as imperative, parallel, easy-to-scan steps, splitting long sequences into smaller tasks.
Prefer after over once when expressing temporal sequence, and use can rather than may when describing possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
Ensure examples, procedures, commands, paths, package names, APIs, and support claims match 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.

Changes affecting public behavior, adapters, examples, or workspace structure must update the corresponding documentation, including relevant SDK/API references and adapter or example READMEs.

Files:

  • docs/getting-started/quickstart.mdx
  • docs/getting-started/install.mdx
  • skills/nemo-fabric-integrate/SKILL.md
  • docs/about-nemo-fabric/overview.mdx
  • README.md
  • docs/sdk/python.mdx
**/*.{rs,py,md,mdx,toml,yml,yaml,sh,bash}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • docs/getting-started/quickstart.mdx
  • docs/getting-started/install.mdx
  • skills/nemo-fabric-integrate/SKILL.md
  • docs/about-nemo-fabric/overview.mdx
  • README.md
  • 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/getting-started/quickstart.mdx
  • docs/getting-started/install.mdx
  • docs/about-nemo-fabric/overview.mdx
  • README.md
  • docs/sdk/python.mdx
**/*.{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/SKILL.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:

  • skills/nemo-fabric-integrate/SKILL.md
  • README.md
**/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
{README.md,docs/index.yml}

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

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

Files:

  • README.md
README.md

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

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

Files:

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

Timestamp: 2026-07-17T16:58:17.510Z
Learning: During documentation reviews, report findings in severity order with file references, line references, the current problem, its conflict with repository or style guidance, and a concrete rewrite or direction.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-17T16:58:17.510Z
Learning: Prioritize factual accuracy over copy polish and keep documentation aligned with current repository behavior, layout, entry points, and terminology.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

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

Timestamp: 2026-07-17T16:58:24.317Z
Learning: All contributors must sign off commits with `git commit -s`; commits without DCO sign-off are not accepted.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

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

Timestamp: 2026-07-17T16:58:24.317Z
Learning: Pull requests require at least one approving review, passing CI, and completion of the pull request template.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-17T16:58:24.317Z
Learning: Address review feedback with additional commits and do not force-push during review.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-17T16:58:24.317Z
Learning: Commit messages must use `type: short description`, use one of the documented types, and keep the first line under 72 characters.
🪛 LanguageTool
docs/getting-started/quickstart.mdx

[grammar] ~23-~23: Use a hyphen to join words.
Context: ...he following code example uses an NVIDIA hosted model, and requires an NVIDIA API...

(QB_NEW_EN_HYPHEN)

🔇 Additional comments (15)
.agents/skills/review-doc-style/SKILL.md (1)

40-40: LGTM!

README.md (6)

51-53: Still identify the CLI as experimental.

The wording still presents the CLI as a maintained interface without stating its experimental boundary. This repeats the existing review finding; state that the CLI is experimental and that the Python SDK is the stable application contract.


107-113: Use one adapter installation identifier across all documentation.

This command uses nemo-fabric[hermes], while docs/getting-started/install.mdx documents nemo-fabric[adapters-hermes] and the local-checkout example names nemo-fabric-adapters-hermes. Resolve these names against the built wheel metadata and make every installation path use the same valid package or extra. Based on the adjacent installation instructions, the public installation contract is inconsistent.


22-47: LGTM!


55-71: LGTM!


160-191: LGTM!


203-208: LGTM!

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

10-17: Use the canonical adapter installation identifier.

This repeats the installation inconsistency: this guide uses nemo-fabric[hermes], while docs/getting-started/install.mdx documents nemo-fabric[adapters-hermes]. Make the quickstart match the package metadata and the canonical installation guide.


1-8: LGTM!

Also applies to: 19-20, 26-64, 66-71

docs/sdk/python.mdx (2)

13-17: Use “can” for possibility.

Change “may use ordinary Python functions” to “can use ordinary Python functions.” This repeats the existing review finding.


2-11: LGTM!

Also applies to: 76-77, 117-121, 153-154, 195-198, 242-248, 277-287, 308-310, 335-342, 380-395, 397-411, 428-430, 439-442, 455-471

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

21-23: LGTM!

Also applies to: 44-60, 120-121

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

8-35: LGTM!

Also applies to: 55-87


37-52: 🎯 Functional Correctness

No change needed. pyproject.toml defines both the adapters-* extras and the shorter extras like hermes, so the install commands are valid as written.

			> Likely an incorrect or invalid review comment.
skills/nemo-fabric-integrate/SKILL.md (1)

253-270: LGTM!

Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
@AnuradhaKaruppiah

Copy link
Copy Markdown
Collaborator Author

@CodeRabbit pause reviews

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

@AnuradhaKaruppiah: Pausing automatic reviews for this PR.

✅ Action performed

Reviews paused.

Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
@AnuradhaKaruppiah AnuradhaKaruppiah changed the title feat: make nemo-fabric a typed SDK-backed experimentation CLI feat: make nemo-fabric a typed experimentation CLI Jul 19, 2026
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
@AnuradhaKaruppiah
AnuradhaKaruppiah requested a review from a team as a code owner July 19, 2026 20:09
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
@AnuradhaKaruppiah
AnuradhaKaruppiah requested a review from a team as a code owner July 20, 2026 18:20

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

Caution

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

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

109-115: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Align the install command with the package extra
nemo-fabric[adapters-hermes] only installs the Hermes adapter extra; it does not install Hermes Agent. Either switch this to nemo-fabric[hermes] or drop Hermes Agent from the heading so the instructions match.

🤖 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 109 - 115, Update the README installation example so
the package extra matches the stated installation scope: use the “hermes” extra
to install Hermes Agent and its adapter, or revise the heading to omit Hermes
Agent if retaining “adapters-hermes.”

Source: Path instructions

docs/sdk/python.mdx (1)

194-197: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Remove the deleted resolve(...) API.

Fabric.resolve was removed from the API inventory, but this guidance still tells callers to use it with base_dir. List only supported methods.

Proposed fix
-If a config contains relative paths, pass a `base_dir` to `resolve(...)`,
-`plan(...)`, `doctor(...)`, `run(...)`, or `start_runtime(...)`. The base
+If a config contains relative paths, pass a `base_dir` to `plan(...)`,
+`doctor(...)`, `run(...)`, or `start_runtime(...)`. The base
🤖 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 `@docs/sdk/python.mdx` around lines 194 - 197, Update the relative-path
guidance to remove the deleted Fabric.resolve(...) API, leaving only the
supported plan(...), doctor(...), run(...), and start_runtime(...) methods that
accept base_dir.
ATTRIBUTIONS-Rust.md (1)

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

Fix the reported Markdown lint violations.

The changed attribution blocks still trigger MD022, MD031, and MD040: headings and fenced blocks need surrounding blank lines, and fences need a language such as text. Fix the generator or consistently format these sections.

As per coding guidelines, changed Markdown should pass repository checks; static analysis reports these exact warnings.

Also applies to: 222-226, 432-436, 642-646, 852-856, 3025-3029

🤖 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 `@ATTRIBUTIONS-Rust.md` around lines 12 - 16, Fix the attribution block
formatting in the generator or all affected sections so headings and fenced code
blocks have surrounding blank lines, and every fence specifies a language such
as text. Apply the same formatting consistently to the blocks represented by the
anstyle attribution and the other reported occurrences, ensuring Markdown lint
checks pass.

Sources: Coding guidelines, Linters/SAST tools

🤖 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/README.md`:
- Around line 52-56: Update the Codex README’s Relay documentation to explicitly
state whether the nvidia provider is supported with Relay; if supported,
document its api_key_env credential and configured NVIDIA Responses base-URL
behavior, and if unsupported, clearly identify the built-in openai provider
requirement so users cannot select an invalid telemetry configuration.

In `@adapters/codex/src/nemo_fabric_adapters/codex/adapter.py`:
- Around line 344-347: Keep validate_payload side-effect free by removing
nvidia-home directory creation from child_environment. Create the CODEX_HOME
directory lazily in invoke_codex_sdk or the corresponding SDK setup path, after
thread_config credential validation succeeds, while preserving the existing
NVIDIA CODEX_HOME value.

In `@adapters/common/src/nemo_fabric_adapters/common/utils.py`:
- Around line 61-62: Update base_dir to reject payloads with a missing or empty
base_dir instead of returning ".". Validate that the supplied value is an
explicit absolute path, and raise the established input or validation error for
invalid adapter payloads while preserving valid paths unchanged.

In `@crates/fabric-cli/README.md`:
- Around line 6-9: Update the README’s opening heading or first product
reference to use the full name “NVIDIA NeMo Fabric,” and format the FabricConfig
reference with Markdown inline-code syntax. Preserve the surrounding
description.

In `@crates/fabric-cli/src/presets.rs`:
- Line 23: Update NVIDIA preset configuration by changing
NVIDIA_FRONTIER_BASE_URL to the documented integrate.api.nvidia.com host and
replacing all Nemotron model references with nvidia/nemotron-3-nano-30b-a3b.
Preserve the existing preset structure and update only the affected host and
model ID values.

In `@crates/fabric-cli/src/scaffold.rs`:
- Around line 146-160: Update python_models and rust_models to preserve
model.settings, including base_url, and model.temperature when generating
scaffold configuration. Ensure these values are passed through to render_python
and render_rust for NVIDIA-hosted presets and temperature overrides; reuse the
existing rust_settings helper for Rust output and the corresponding Python
settings representation. Extend the relevant scaffold tests to assert these
rendered values.

In `@crates/fabric-cli/templates/rust/Cargo.toml.tmpl`:
- Around line 9-11: The Cargo.toml template hardcodes nemo-fabric-core at 0.1.0
instead of using the workspace version source of truth. Update the template
generation around the dependencies section to substitute the current
[workspace.package].version for nemo-fabric-core, ensuring generated scaffolds
track releases whenever the workspace version changes.

In `@docs/reference/api/python-library-reference/nemo_fabric.client.md`:
- Line 20: Update the lifecycle API description to limit the typed, read-only
mapping claim to doctor(), plan(), and run() results, while explicitly excluding
start_runtime(), which returns an active Runtime handle.

In
`@docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitykind.mdx`:
- Line 5: Regenerate this API reference page rather than editing the position
value directly: update the source ordering that determines CapabilityKind’s
position, then run just docs to recreate the generated output under
docs/reference/api/.

In
`@docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdx`:
- Line 5: Revert the manual position change in the generated
enum-capabilitytarget API reference, update the ordering in its source
definition, and run just docs to regenerate the page and position value.

In `@docs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdx`:
- Line 5: Revert the manual position edit in the generated API reference page
and update the upstream source or documentation generator that produces it
instead. Regenerate the reference output using the established `just docs`
command, ensuring the resulting page reflects the intended change without
directly modifying files under `docs/reference/api/`.

In `@skills/nemo-fabric-integrate/references/config-mapping.md`:
- Around line 95-97: Update the documentation guidance around
FabricConfig.to_mapping() to explicitly require redacting credentials, headers,
metadata, and other sensitive or user-provided fields before logging or emitting
the mapping. Preserve the existing private-boundary guidance and clarify that
unredacted mappings must not be recommended for logs.

---

Outside diff comments:
In `@ATTRIBUTIONS-Rust.md`:
- Around line 12-16: Fix the attribution block formatting in the generator or
all affected sections so headings and fenced code blocks have surrounding blank
lines, and every fence specifies a language such as text. Apply the same
formatting consistently to the blocks represented by the anstyle attribution and
the other reported occurrences, ensuring Markdown lint checks pass.

In `@docs/sdk/python.mdx`:
- Around line 194-197: Update the relative-path guidance to remove the deleted
Fabric.resolve(...) API, leaving only the supported plan(...), doctor(...),
run(...), and start_runtime(...) methods that accept base_dir.

In `@README.md`:
- Around line 109-115: Update the README installation example so the package
extra matches the stated installation scope: use the “hermes” extra to install
Hermes Agent and its adapter, or revise the heading to omit Hermes Agent if
retaining “adapters-hermes.”
🪄 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: d7769ff8-08b1-4074-9536-13aa9e322d5e

📥 Commits

Reviewing files that changed from the base of the PR and between 5fe0f1d and 7a3aa0d.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (144)
  • .agents/skills/review-doc-style/SKILL.md
  • ATTRIBUTIONS-Rust.md
  • CONTRIBUTING.md
  • Cargo.toml
  • README.md
  • TODO.md
  • adapters/claude/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/src/nemo_fabric_adapters/common/utils.py
  • adapters/deepagents/README.md
  • adapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
  • crates/fabric-cli/Cargo.toml
  • crates/fabric-cli/README.md
  • crates/fabric-cli/assets/adapters/scripted/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/scripted/run.py
  • crates/fabric-cli/assets/examples/code-review/repo/calculator.py
  • crates/fabric-cli/assets/examples/code-review/skills/code-review.md
  • crates/fabric-cli/src/app.rs
  • crates/fabric-cli/src/assets.rs
  • crates/fabric-cli/src/examples.rs
  • crates/fabric-cli/src/lib.rs
  • crates/fabric-cli/src/main.rs
  • crates/fabric-cli/src/presets.rs
  • crates/fabric-cli/src/scaffold.rs
  • crates/fabric-cli/templates/README.md.tmpl
  • crates/fabric-cli/templates/python/main.py.tmpl
  • crates/fabric-cli/templates/python/pyproject.toml.tmpl
  • crates/fabric-cli/templates/rust/Cargo.toml.tmpl
  • crates/fabric-cli/templates/rust/main.rs.tmpl
  • crates/fabric-core/README.md
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/doctor.rs
  • crates/fabric-core/src/error.rs
  • crates/fabric-core/src/lib.rs
  • crates/fabric-core/src/runtime.rs
  • crates/fabric-core/src/schema.rs
  • crates/fabric-python/src/lib.rs
  • docs/about-nemo-fabric/overview.mdx
  • docs/experimentation/cli.mdx
  • docs/getting-started/install.mdx
  • docs/getting-started/quickstart.mdx
  • docs/index.yml
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/reference/api/python-library-reference/nemo_fabric.types.md
  • 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-environmentownership.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/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-resolve-effective-config-from-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/index.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-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-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/runtime/struct-adapterinvocation.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdx
  • docs/sdk/python.mdx
  • examples/code_review_agent/README.md
  • examples/notebooks/01_quickstart.ipynb
  • examples/notebooks/02_variations.ipynb
  • pypi.md
  • python/src/nemo_fabric/__init__.py
  • python/src/nemo_fabric/_native.pyi
  • python/src/nemo_fabric/client.py
  • python/src/nemo_fabric/types.py
  • schemas/SCHEMA.md
  • schemas/adapter-invocation.schema.json
  • schemas/agent.schema.json
  • schemas/effective-config.schema.json
  • schemas/run-plan.schema.json
  • skills/nemo-fabric-integrate/SKILL.md
  • skills/nemo-fabric-integrate/references/config-mapping.md
  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • tests/_utils/utils.py
  • tests/adapters/test_adapaters_common_utils.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/docs/test_python_api_docs.py
  • tests/e2e/test_cli.py
  • tests/e2e/test_harbor_swebench_task.py
  • tests/e2e/test_local_env_e2e.py
  • tests/e2e/test_swebench_style.py
  • tests/fixtures/file-config-agent/skills/code-review/README.md
  • tests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.py
  • tests/integrations/test_harbor_runner.py
  • tests/python/test_code_review_example.py
  • tests/python/test_native_sdk.py
  • tests/python/test_runtime.py
  • tests/python/test_sdk_contract.py
  • tests/python/test_sdk_runtimes.py
💤 Files with no reviewable changes (11)
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-effective-config.mdx
  • skills/nemo-fabric-integrate/references/sdk-api-inventory.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-effectiveconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-effective-config-from-config.mdx
  • schemas/effective-config.schema.json
  • python/src/nemo_fabric/init.py
  • docs/reference/api/python-library-reference/index.md
  • tests/e2e/test_cli.py
  • docs/reference/api/rust-library-reference/nemo-fabric-core/index.mdx
  • python/src/nemo_fabric/_native.pyi
  • tests/_utils/utils.py
👮 Files not reviewed due to content moderation or server errors (11)
  • crates/fabric-core/src/doctor.rs
  • crates/fabric-python/src/lib.rs
  • tests/adapters/test_adapaters_common_utils.py
  • tests/adapters/test_deepagents.py
  • tests/adapters/test_hermes_adapter.py
  • tests/docs/test_python_api_docs.py
  • tests/e2e/test_harbor_swebench_task.py
  • tests/e2e/test_local_env_e2e.py
  • tests/e2e/test_swebench_style.py
  • tests/python/test_native_sdk.py
  • tests/python/test_runtime.py

Comment thread adapters/codex/README.md Outdated
Comment thread adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
Comment thread adapters/common/src/nemo_fabric_adapters/common/utils.py Outdated
Comment thread crates/fabric-cli/README.md Outdated
Comment thread crates/fabric-cli/src/presets.rs Outdated
Comment thread docs/reference/api/python-library-reference/nemo_fabric.client.md Outdated
Comment thread skills/nemo-fabric-integrate/references/config-mapping.md

@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

@dagardner-nv

Copy link
Copy Markdown
Collaborator

/ok to test 2baf671

@github-actions

Copy link
Copy Markdown

@yczhang-nv yczhang-nv left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Overall the PR looks solid, and the breaking changes are well-tested. I pulled the branch and did some quick testing and posted the findings in the comments. Happy to verify again once those are fixed!

Comment thread crates/fabric-cli/src/scaffold.rs
Comment thread crates/fabric-cli/src/presets.rs Outdated
Comment thread crates/fabric-cli/src/app.rs Outdated
Comment thread adapters/claude/src/nemo_fabric_adapters/claude/adapter.py Outdated
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.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/src/nemo_fabric_adapters/codex/adapter.py`:
- Around line 817-820: Update invoke_codex_sdk around the CODEX_HOME setup so
the blocking Path(client_config.env["CODEX_HOME"]).mkdir operation runs via
await asyncio.to_thread(...). Preserve the existing NVIDIA-only condition and
directory creation arguments before constructing AsyncCodex.

In `@crates/fabric-cli/assets/adapters/claude/fabric-adapter.json`:
- Around line 10-11: Update the config.accepts declaration in the Claude adapter
manifest to remove the nested "tools.blocked" entry, leaving only the top-level
"tools" capability and the other existing top-level capabilities. Keep the
manifest aligned with the capability sections consumed by
resolve_capability_plan.

In `@crates/fabric-cli/assets/adapters/deepagents/fabric-adapter.json`:
- Line 12: Update the accepts array in the deepagents adapter manifest to remove
the nested "tools.blocked" entry, leaving only top-level capabilities consumed
by resolve_capability_plan, including "tools".

In `@crates/fabric-cli/assets/adapters/hermes/fabric-adapter.json`:
- Around line 16-23: Remove the nested "tools.blocked" entry from the
config.accepts list in the Hermes fabric adapter manifest, leaving only
top-level capability sections consumed by resolve_capability_plan, including
"tools".

In `@docs/sdk/python.mdx`:
- Around line 194-195: Update the Fabric.run API inventory row to expose the
base_dir parameter, matching the relative-path guidance and the corresponding
plan and doctor entries; indicate that base_dir is optional if that is the API
contract.
🪄 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: 46174750-0443-4a1e-b180-2e33b27bcac7

📥 Commits

Reviewing files that changed from the base of the PR and between 7a3aa0d and 8353ace.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (27)
  • ATTRIBUTIONS-Rust.md
  • README.md
  • adapters/claude/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/src/nemo_fabric_adapters/common/utils.py
  • crates/fabric-cli/README.md
  • 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/src/app.rs
  • crates/fabric-cli/src/presets.rs
  • crates/fabric-cli/src/scaffold.rs
  • crates/fabric-cli/templates/rust/Cargo.toml.tmpl
  • docs/about-nemo-fabric/overview.mdx
  • docs/experimentation/cli.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • docs/sdk/python.mdx
  • pyproject.toml
  • python/src/nemo_fabric/client.py
  • scripts/licensing/attributions_lockfile_md.py
  • skills/nemo-fabric-integrate/references/config-mapping.md
  • tests/adapters/test_adapaters_common_utils.py
  • tests/adapters/test_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
  • GitHub Check: Pre-commit
🧰 Additional context used
📓 Path-based instructions (37)
**/*

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

**/*: 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 Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to) with the required content.
Only check contribution-confirmation boxes when they are true; if either confirmation cannot be made, stop before opening the pull request and surface...

Files:

  • pyproject.toml
  • crates/fabric-cli/assets/adapters/codex/fabric-adapter.json
  • crates/fabric-cli/README.md
  • crates/fabric-cli/assets/adapters/deepagents/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/hermes/fabric-adapter.json
  • crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
  • crates/fabric-cli/templates/rust/Cargo.toml.tmpl
  • skills/nemo-fabric-integrate/references/config-mapping.md
  • docs/about-nemo-fabric/overview.mdx
  • docs/experimentation/cli.mdx
  • adapters/claude/README.md
  • README.md
  • adapters/common/src/nemo_fabric_adapters/common/utils.py
  • crates/fabric-cli/src/presets.rs
  • tests/adapters/test_claude_adapter.py
  • adapters/codex/README.md
  • scripts/licensing/attributions_lockfile_md.py
  • crates/fabric-cli/src/app.rs
  • docs/sdk/python.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • crates/fabric-cli/src/scaffold.rs
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_adapaters_common_utils.py
  • python/src/nemo_fabric/client.py
  • ATTRIBUTIONS-Rust.md
{Cargo.toml,pyproject.toml,python/pyproject.toml,python/src/nemo_fabric/**}

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

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

Files:

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

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

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

Files:

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

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

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

Files:

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

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

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

Files:

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

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

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

Files:

  • pyproject.toml
**/pyproject.toml

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

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

Files:

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

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

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

Files:

  • pyproject.toml
  • crates/fabric-cli/src/presets.rs
  • crates/fabric-cli/src/app.rs
  • crates/fabric-cli/src/scaffold.rs
**/*.{rs,py,pyi,toml}

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

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

Files:

  • pyproject.toml
  • adapters/common/src/nemo_fabric_adapters/common/utils.py
  • crates/fabric-cli/src/presets.rs
  • tests/adapters/test_claude_adapter.py
  • scripts/licensing/attributions_lockfile_md.py
  • crates/fabric-cli/src/app.rs
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • crates/fabric-cli/src/scaffold.rs
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_adapaters_common_utils.py
  • python/src/nemo_fabric/client.py
**/*.{toml,yaml,yml,sh,bash}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

All TOML, YAML, and shell files must include the specified SPDX license header using line-comment syntax.

Files:

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

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

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

Files:

  • 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/claude/fabric-adapter.json
  • adapters/common/src/nemo_fabric_adapters/common/utils.py
  • crates/fabric-cli/src/presets.rs
  • tests/adapters/test_claude_adapter.py
  • scripts/licensing/attributions_lockfile_md.py
  • crates/fabric-cli/src/app.rs
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • crates/fabric-cli/src/scaffold.rs
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_adapaters_common_utils.py
  • python/src/nemo_fabric/client.py
**/*.{rs,py,pyi,json}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • 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/claude/fabric-adapter.json
  • adapters/common/src/nemo_fabric_adapters/common/utils.py
  • crates/fabric-cli/src/presets.rs
  • tests/adapters/test_claude_adapter.py
  • scripts/licensing/attributions_lockfile_md.py
  • crates/fabric-cli/src/app.rs
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • crates/fabric-cli/src/scaffold.rs
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_adapaters_common_utils.py
  • python/src/nemo_fabric/client.py
**/*.{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:

  • crates/fabric-cli/README.md
  • skills/nemo-fabric-integrate/references/config-mapping.md
  • adapters/claude/README.md
  • README.md
  • adapters/codex/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • ATTRIBUTIONS-Rust.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:

  • crates/fabric-cli/README.md
  • skills/nemo-fabric-integrate/references/config-mapping.md
  • docs/about-nemo-fabric/overview.mdx
  • docs/experimentation/cli.mdx
  • adapters/claude/README.md
  • README.md
  • adapters/codex/README.md
  • docs/sdk/python.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • ATTRIBUTIONS-Rust.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:

  • crates/fabric-cli/README.md
  • skills/nemo-fabric-integrate/references/config-mapping.md
  • adapters/claude/README.md
  • README.md
  • adapters/codex/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • ATTRIBUTIONS-Rust.md
**/*.{md,mdx}

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

**/*.{md,mdx}: Use the full product name NVIDIA NeMo Fabric on its first usage, typically in the title or H1. Later uses may use NeMo Fabric. Use fabric alone only for the CLI tool and enclose it in backticks.
Ensure commands, package names, APIs, file paths, filenames, code elements, and expressions are formatted as inline code where appropriate.
Use title case for technical-documentation headings, introduce code blocks, tables, and lists with complete lead-in sentences, and use descriptive link text instead of raw URLs or generic labels such as here.
Write procedures as short, imperative, parallel steps; prefer active voice, present tense, short sentences, and plain English. Prefer after over once, and use can for possibility rather than permission.
Keep documentation terminology consistent, avoid ambiguous numeric and ordinal dates, capitalize NVIDIA correctly, and do not force trademark symbols in learning-oriented documentation unless the source document requires them.
Ensure examples, commands, paths, package names, APIs, bindings, workflows, and support claims match 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.
When performing a documentation review, report actionable findings in severity order under Must fix, Should fix, and Nice to have; include the file path, line reference, current problem, rationale, and a concrete rewrite or direction.

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

Files:

  • crates/fabric-cli/README.md
  • skills/nemo-fabric-integrate/references/config-mapping.md
  • docs/about-nemo-fabric/overview.mdx
  • docs/experimentation/cli.mdx
  • adapters/claude/README.md
  • README.md
  • adapters/codex/README.md
  • docs/sdk/python.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • ATTRIBUTIONS-Rust.md
**/*.{html,htm,md}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • crates/fabric-cli/README.md
  • skills/nemo-fabric-integrate/references/config-mapping.md
  • adapters/claude/README.md
  • README.md
  • adapters/codex/README.md
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
  • ATTRIBUTIONS-Rust.md
{README.md,docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

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

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

Files:

  • docs/about-nemo-fabric/overview.mdx
  • docs/experimentation/cli.mdx
  • README.md
  • docs/sdk/python.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.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/about-nemo-fabric/overview.mdx
  • docs/experimentation/cli.mdx
  • docs/sdk/python.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
**/*.mdx

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

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

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

All MDX files must include the specified SPDX license header using a JSX comment.

Files:

  • docs/about-nemo-fabric/overview.mdx
  • docs/experimentation/cli.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/experimentation/cli.mdx
  • docs/sdk/python.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
{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/experimentation/cli.mdx
  • docs/sdk/python.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
{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/experimentation/cli.mdx
  • docs/sdk/python.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.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/about-nemo-fabric/overview.mdx
  • docs/experimentation/cli.mdx
  • docs/sdk/python.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
docs/**/*.{md,mdx}

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

For Python API reference changes, update source docstrings under python/src/nemo_fabric/ or scripts/generate_api_docs.sh; for Rust API reference changes, update documentation comments under crates/fabric-core/ or scripts/docs/generate_rust_library_reference.py.

Files:

  • docs/about-nemo-fabric/overview.mdx
  • docs/experimentation/cli.mdx
  • docs/sdk/python.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.md
{docs/**,README.md,AGENTS.md}

⚙️ CodeRabbit configuration file

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

Files:

  • docs/about-nemo-fabric/overview.mdx
  • docs/experimentation/cli.mdx
  • README.md
  • docs/sdk/python.mdx
  • docs/reference/api/python-library-reference/nemo_fabric.client.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/claude/README.md
  • adapters/common/src/nemo_fabric_adapters/common/utils.py
  • adapters/codex/README.md
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
{README.md,docs/index.yml}

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

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

Files:

  • README.md
README.md

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

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

Files:

  • README.md
**/*.{py,pyi}

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

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

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

Files:

  • adapters/common/src/nemo_fabric_adapters/common/utils.py
  • tests/adapters/test_claude_adapter.py
  • scripts/licensing/attributions_lockfile_md.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_adapaters_common_utils.py
  • python/src/nemo_fabric/client.py
**/*.{rs,py,pyi}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.{rs,py,pyi}: Use snake_case for 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.
All Rust and Python source files must include the specified SPDX copyright and Apache-2.0 license headers.

Files:

  • adapters/common/src/nemo_fabric_adapters/common/utils.py
  • crates/fabric-cli/src/presets.rs
  • tests/adapters/test_claude_adapter.py
  • scripts/licensing/attributions_lockfile_md.py
  • crates/fabric-cli/src/app.rs
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • crates/fabric-cli/src/scaffold.rs
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_adapaters_common_utils.py
  • python/src/nemo_fabric/client.py
**/*.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-cli/src/presets.rs
  • crates/fabric-cli/src/app.rs
  • crates/fabric-cli/src/scaffold.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_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_adapaters_common_utils.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_claude_adapter.py
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_adapaters_common_utils.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
  • tests/adapters/test_codex_adapter.py
  • tests/adapters/test_adapaters_common_utils.py
docs/reference/api/**

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

Treat files under docs/reference/api/ as generated output and do not modify them directly. Update Python source docstrings, Rust documentation comments, or the relevant generator instead; run just docs afterward.

Files:

  • docs/reference/api/python-library-reference/nemo_fabric.client.md
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
🧠 Learnings (4)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-20T19:55:08.636Z
Learning: Prioritize factual accuracy over copy polish, keep changes scoped, surface assumptions, and define focused validation before editing.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-20T19:55:08.636Z
Learning: Use `assets/nvidia-style-guide.md` first and open only the focused supporting style document needed for the issue under review.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

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

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

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

Timestamp: 2026-07-20T19:55:16.186Z
Learning: All pull requests require at least one approving review, and CI must pass before merging.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-20T19:55:16.186Z
Learning: During review, address feedback with additional commits and do not force-push.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-20T19:55:16.186Z
Learning: Use commit messages in the form `type: short description`, with an allowed type such as `feat`, `fix`, `docs`, `test`, `refactor`, `chore`, or `perf`; keep the first line under 72 characters.
📚 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:

  • 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/claude/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/codex/src/nemo_fabric_adapters/codex/adapter.py
  • adapters/claude/src/nemo_fabric_adapters/claude/adapter.py
📚 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
🧬 Code graph analysis (6)
adapters/common/src/nemo_fabric_adapters/common/utils.py (8)
adapters/codex/src/nemo_fabric_adapters/codex/adapter.py (1)
  • base_dir (181-181)
adapters/claude/src/nemo_fabric_adapters/claude/adapter.py (1)
  • base_dir (221-221)
python/src/nemo_fabric/client.py (1)
  • base_dir (62-62)
tests/adapters/test_codex_adapter.py (1)
  • base_dir (218-218)
tests/e2e/test_hermes_config_mapping.py (1)
  • payload (52-83)
tests/adapters/test_adapaters_common_utils.py (1)
  • base_dir (174-174)
crates/fabric-cli/src/app.rs (1)
  • base_dir (153-153)
crates/fabric-cli/src/presets.rs (1)
  • base_dir (98-98)
tests/adapters/test_claude_adapter.py (1)
adapters/claude/src/nemo_fabric_adapters/claude/adapter.py (2)
  • build_options (494-561)
  • AdapterConfigError (128-129)
adapters/codex/src/nemo_fabric_adapters/codex/adapter.py (1)
tests/e2e/test_hermes_config_mapping.py (1)
  • payload (52-83)
crates/fabric-cli/src/scaffold.rs (1)
crates/fabric-cli/src/presets.rs (4)
  • config (232-279)
  • model (281-297)
  • config (68-70)
  • find (109-111)
tests/adapters/test_codex_adapter.py (1)
adapters/codex/src/nemo_fabric_adapters/codex/adapter.py (1)
  • state_dir (366-367)
tests/adapters/test_adapaters_common_utils.py (2)
crates/fabric-cli/src/app.rs (1)
  • base_dir (153-158)
crates/fabric-cli/src/presets.rs (1)
  • base_dir (98-100)
🪛 Ruff (0.15.21)
adapters/common/src/nemo_fabric_adapters/common/utils.py

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

(TRY003)


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

(TRY003)

adapters/codex/src/nemo_fabric_adapters/codex/adapter.py

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

(ASYNC240)

🔇 Additional comments (30)
adapters/common/src/nemo_fabric_adapters/common/utils.py (1)

61-67: LGTM!

Also applies to: 238-238

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

216-253: LGTM!

Also applies to: 835-835

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

248-284: LGTM!

crates/fabric-cli/src/app.rs (1)

161-180: LGTM!

Also applies to: 329-448

crates/fabric-cli/src/presets.rs (1)

18-23: LGTM!

Also applies to: 112-147, 160-225, 299-388

crates/fabric-cli/src/scaffold.rs (1)

85-112: LGTM!

Also applies to: 148-167, 227-245, 269-327

crates/fabric-cli/templates/rust/Cargo.toml.tmpl (1)

1-11: LGTM!

adapters/codex/README.md (2)

52-58: Clarify whether the NVIDIA provider works with Relay.

This paragraph documents models.default.provider = nvidia, while the Relay section says Relay keeps Codex on the reserved openai provider. State explicitly whether NVIDIA plus Relay is supported; if not, say so next to this provider guidance.


68-68: LGTM!

Also applies to: 87-89, 106-107, 165-167

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

1-24: LGTM!

crates/fabric-cli/README.md (1)

6-9: LGTM!

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

1-11: LGTM!

Also applies to: 13-24

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

1-15: LGTM!

Also applies to: 24-36

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

1-9: LGTM!

Also applies to: 12-21

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

3-3: LGTM!

Also applies to: 19-24, 40-45, 58-64, 88-88, 121-122, 124-135, 136-148

docs/sdk/python.mdx (1)

15-16: LGTM!

Also applies to: 22-22, 99-99, 153-153, 206-207, 402-402, 438-439, 455-468

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

20-22: LGTM!

Also applies to: 36-37, 49-50, 71-96, 106-107, 121-122, 146-147, 160-161

pyproject.toml (2)

27-29: 🗄️ Data Integrity & Integration

Verify the hard runtime pin across release surfaces.

nemo-fabric-runtime == 0.1.0 makes installation depend on one exact distribution version. Confirm that this version is available for all supported platforms and that python/pyproject.toml, uv.lock, and wheel metadata resolve the same version. As per coding guidelines, package metadata and dependency resolution must remain consistent across the workspace and lockfiles.

Source: Coding guidelines


114-114: LGTM!

python/src/nemo_fabric/client.py (2)

43-45: 🎯 Functional Correctness

Verify relative base_dir handling at the adapter boundary.

The public API accepts any str | PathLike, but _base_dir_arg() only applies os.fspath; adapters/common/src/nemo_fabric_adapters/common/utils.py rejects non-absolute values. If the Rust core does not canonicalize this before serializing the plan, relative paths can fail in adapters or remain dependent on the process working directory. Resolve or validate the path in the SDK, or document an absolute-only contract and add an end-to-end regression test. As per path instructions, SDK changes must preserve typed API consistency and parity with the native extension and adapters.

Also applies to: 61-61, 259-273

Source: Path instructions


46-54: LGTM!

Also applies to: 57-60, 63-82, 96-119, 137-179, 181-245

scripts/licensing/attributions_lockfile_md.py (1)

30-30: LGTM!

Also applies to: 366-379, 415-419, 901-901

skills/nemo-fabric-integrate/references/config-mapping.md (1)

71-74: LGTM!

Also applies to: 95-99

tests/adapters/test_adapaters_common_utils.py (1)

143-155: LGTM!

Also applies to: 164-186, 307-311

tests/adapters/test_claude_adapter.py (1)

84-108: LGTM!

Also applies to: 332-336, 354-357, 373-454, 920-924

tests/adapters/test_codex_adapter.py (1)

23-44: LGTM!

Also applies to: 147-153, 194-200, 208-219, 294-375, 487-493, 534-540, 599-607, 617-623, 659-663, 683-689

README.md (1)

22-32: LGTM!

Also applies to: 49-74, 109-109, 162-175, 191-193, 205-206

adapters/claude/README.md (1)

38-44: LGTM!

Also applies to: 84-86

docs/experimentation/cli.mdx (1)

1-7: LGTM!

Also applies to: 8-17, 19-61, 62-140, 141-166, 167-234

ATTRIBUTIONS-Rust.md (1)

12-19: LGTM!

Also applies to: 225-232, 438-445, 652-658, 865-871, 1077-1084, 1161-1168, 1373-1380, 1458-1464, 1542-1548, 1573-1580, 1785-1792, 1870-1876, 1954-1960, 2038-2044, 2122-2128, 2206-2212, 2290-2296, 2374-2380, 2458-2464, 2542-2548, 2626-2632, 2658-2664, 2690-2696, 2774-2780, 2858-2864, 2942-2948, 3026-3032, 3110-3116, 3144-3150, 3227-3457, 3459-3465, 3543-3549, 3627-3633, 3711-3717, 3760-3767

Comment thread crates/fabric-cli/assets/adapters/claude/fabric-adapter.json
Comment thread crates/fabric-cli/assets/adapters/deepagents/fabric-adapter.json
Comment thread crates/fabric-cli/assets/adapters/hermes/fabric-adapter.json
Comment thread docs/sdk/python.mdx
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.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/codex/src/nemo_fabric_adapters/codex/adapter.py`:
- Around line 817-824: Update invoke_codex_sdk so the CODEX_HOME directory
creation and AsyncCodex initialization execute inside the existing handled try
block, or ensure mkdir OSError is caught there, allowing filesystem failures to
flow through sdk_failure(...) instead of surfacing as generic adapter errors.
🪄 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: 7420a400-7069-4444-b4a9-255069f5eea4

📥 Commits

Reviewing files that changed from the base of the PR and between 8353ace and 787b602.

📒 Files selected for processing (3)
  • TODO.md
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • docs/sdk/python.mdx
📜 Review details
🧰 Additional context used
📓 Path-based instructions (20)
**/*.{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:

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

**/*: 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 Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to) with the required content.
Only check contribution-confirmation boxes when they are true; if either confirmation cannot be made, stop before opening the pull request and surface...

Files:

  • TODO.md
  • docs/sdk/python.mdx
  • adapters/codex/src/nemo_fabric_adapters/codex/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:

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

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

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

**/*.{md,mdx}: Keep documentation factually aligned with current NeMo Fabric behavior, repository layout, entry points, commands, package names, APIs, bindings, support claims, and file paths.
Use NVIDIA NeMo Fabric on the first product-name usage, typically in the title or H1, and NeMo Fabric thereafter. Use fabric alone only for the CLI tool, enclosed in backticks.
Update relevant entry-point documentation when public behavior changes, including README.md, docs/index.yml, package or crate READMEs, and applicable adapter or integration READMEs.
Capitalize NVIDIA correctly and keep user-facing naming consistent with current repository terminology.
Format commands, code elements, expressions, file names, paths, and filenames as inline code where needed.
Use title case 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; avoid vague wording that obscures the action.
Keep terminology consistent for the same concept throughout a document.
Write procedures as concise, imperative, parallel steps and split long sequences into smaller tasks.
Use after instead of once when expressing temporal sequence, and use can rather than may when describing possibility instead of permission.
Use unambiguous date formats and avoid ordinal dates in body text.
For learning-oriented documentation, do not force trademark symbols unless the source document explicitly requires them.

Update relevant documentation when public behavior, adapters, examples, or workspace structure changes; keep README and API/reference documentation current.

Files:

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

Files:

  • TODO.md
  • docs/sdk/python.mdx
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
{README.md,docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

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

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

Files:

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

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

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

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

Files:

  • docs/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
{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
**/*.{rs,py,pyi,json,yaml,yml}

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

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

Files:

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

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

  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
**/*.{rs,py}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.{rs,py}: Use snake_case for functions and variables; use PascalCase for Rust types and Python classes.
When adding functionality, include tests in the corresponding Rust crate or relevant area under tests/.

Files:

  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
{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/src/nemo_fabric_adapters/codex/adapter.py
🧠 Learnings (2)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-20T20:20:52.290Z
Learning: When reviewing documentation, examples, or public-facing text, lead with actionable findings categorized as `Must fix`, `Should fix`, and, when requested, `Nice to have`; include file path, line reference, current problem, rationale, and a concrete rewrite or direction.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-20T20:20:52.290Z
Learning: Prioritize factual accuracy over copy polish, and report incorrect or stale commands, APIs, paths, package names, support claims, failed examples, and missing entry-point updates before stylistic issues.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-20T20:20:52.290Z
Learning: Use the checklist and focused style-support documents selectively: start with `assets/nvidia-style-guide.md`, then open only the relevant technical-docs, language-mechanics, or brand-terminology guidance.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-20T20:20:52.290Z
Learning: Use `karpathy-guidelines` alongside this guidance for implementation or review work; keep changes scoped, surface assumptions, and define focused validation before editing.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

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

Timestamp: 2026-07-20T20:20:59.013Z
Learning: Versioned release tags must use raw Rust-compatible SemVer without a leading `v`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-20T20:20:59.013Z
Learning: All contributors must sign off commits with `git commit -s`; unsigned commits are not accepted.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

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

Timestamp: 2026-07-20T20:20:59.013Z
Learning: All pull requests require at least one approving review, and CI must pass before merging.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

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

Applied to files:

  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
🔇 Additional comments (3)
TODO.md (1)

12-38: LGTM!

Also applies to: 75-90

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

180-183: LGTM!

Also applies to: 199-253, 344-346, 362-362, 522-522, 571-571, 611-611, 839-839

docs/sdk/python.mdx (1)

15-16: LGTM!

Also applies to: 99-99, 153-153, 194-195, 207-209, 402-402, 438-439, 455-468

Comment thread adapters/codex/src/nemo_fabric_adapters/codex/adapter.py Outdated
Comment thread crates/fabric-cli/src/app.rs Outdated
Comment thread crates/fabric-cli/templates/python/pyproject.toml.tmpl
Comment thread crates/fabric-cli/templates/rust/Cargo.toml.tmpl Outdated

@AjayThorve AjayThorve 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, pending resolutions of comments posted

@yczhang-nv yczhang-nv left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Tested again and verified fixes are valid. Approved!

Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.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/codex/README.md (1)

106-107: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Should fix: Preserve the migration warning for removed CLI settings.

The tests still reject legacy codex_command and codex_args settings, but this replacement only explains where valid model and workspace settings belong. Add a concise migration note so upgraded configurations do not fail without an explanation.

Suggested wording
 Set model selection through `models` and the working directory through
 `environment.workspace`.
+Legacy CLI-only settings such as `codex_command` and `codex_args` are rejected;
+remove them when migrating to the normalized configuration.
🤖 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/codex/README.md` around lines 106 - 107, Update the migration
guidance in the README near the model and workspace settings to explicitly warn
that the removed codex_command and codex_args CLI settings are no longer
supported. Add a concise explanation directing users to the current
configuration fields so legacy configurations have a clear migration path.

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 `@crates/fabric-cli/src/scaffold.rs`:
- Around line 114-125: The rust_core_dependency function currently embeds the
local workspace path whenever fabric-core exists, coupling generated manifests
to the checkout. Change the default scaffold dependency to use the registry
package/version, and expose the workspace path only through an explicit
contributor-only mode. Add an E2E assertion that generated manifests contain no
path = entry in the default mode.

---

Outside diff comments:
In `@adapters/codex/README.md`:
- Around line 106-107: Update the migration guidance in the README near the
model and workspace settings to explicitly warn that the removed codex_command
and codex_args CLI settings are no longer supported. Add a concise explanation
directing users to the current configuration fields so legacy configurations
have a clear migration path.
🪄 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: b5b9cc18-65f9-4147-b585-50bb93cf7104

📥 Commits

Reviewing files that changed from the base of the PR and between 787b602 and d213097.

📒 Files selected for processing (9)
  • adapters/codex/README.md
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • crates/fabric-cli/src/app.rs
  • crates/fabric-cli/src/scaffold.rs
  • crates/fabric-cli/templates/python/pyproject.toml.tmpl
  • crates/fabric-cli/templates/rust/Cargo.toml.tmpl
  • docs/integrations/codex.mdx
  • tests/adapters/test_codex_adapter.py
  • tests/e2e/test_cli_scaffold.py
📜 Review details
⏰ Context from checks skipped due to timeout. (3)
  • GitHub Check: Pre-commit
  • GitHub Check: Test (Python 3.11, x86_64)
  • GitHub Check: Test (Python 3.12, x86_64)
🧰 Additional context used
📓 Path-based instructions (27)
**/*

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

**/*: 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 Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to) with the required content.
Only check contribution-confirmation boxes when they are true; if either confirmation cannot be made, stop before opening the pull request and surface...

Files:

  • crates/fabric-cli/templates/python/pyproject.toml.tmpl
  • tests/e2e/test_cli_scaffold.py
  • docs/integrations/codex.mdx
  • crates/fabric-cli/templates/rust/Cargo.toml.tmpl
  • crates/fabric-cli/src/app.rs
  • adapters/codex/README.md
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • tests/adapters/test_codex_adapter.py
  • crates/fabric-cli/src/scaffold.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/e2e/test_cli_scaffold.py
  • crates/fabric-cli/src/app.rs
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • tests/adapters/test_codex_adapter.py
  • crates/fabric-cli/src/scaffold.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/e2e/test_cli_scaffold.py
  • tests/adapters/test_codex_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/e2e/test_cli_scaffold.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • tests/adapters/test_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/e2e/test_cli_scaffold.py
  • crates/fabric-cli/src/app.rs
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • tests/adapters/test_codex_adapter.py
  • crates/fabric-cli/src/scaffold.rs
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.py: Use type annotations for public Python APIs and follow the existing Python SDK, adapter, example, and test style.
Keep native Python binding declarations synchronized with their Rust implementations.
Python source files must include the specified SPDX copyright and Apache-2.0 license header using Python comment syntax.

Files:

  • tests/e2e/test_cli_scaffold.py
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • tests/adapters/test_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 the relevant language test suite for every affected language surface; changes to the Rust core or public schemas require running both Rust and Python suites.
When adding functionality, include tests in the corresponding Rust crate or in the relevant tests/ area.

Files:

  • tests/e2e/test_cli_scaffold.py
  • crates/fabric-cli/src/app.rs
  • adapters/codex/src/nemo_fabric_adapters/codex/adapter.py
  • tests/adapters/test_codex_adapter.py
  • crates/fabric-cli/src/scaffold.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/e2e/test_cli_scaffold.py
  • tests/adapters/test_codex_adapter.py
{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/codex.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/codex.mdx
**/*.mdx

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

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

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

Files:

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

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

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

Files:

  • docs/integrations/codex.mdx
**/*.{md,mdx}

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

**/*.{md,mdx}: Use the full product name NVIDIA NeMo Fabric on its first usage, typically in the title or H1, and use NeMo Fabric thereafter. Use fabric alone only for the CLI tool and surround it with backticks.
Ensure commands, package names, APIs, code elements, file names, and paths are formatted as inline code where appropriate.
Technical-documentation headings should use title case consistently.
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; avoid vague wording and unnecessarily passive constructions.
Keep terminology consistent for the same concept throughout each document.
Write procedures as concise, parallel, imperative steps, splitting long sequences into smaller tasks.
Use after instead of once when referring to temporal order, and use can instead of may when expressing possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
Learning-oriented documentation should not force trademark symbols unless the source document explicitly requires them.
Examples and procedures must use current commands, paths, package names, APIs, bindings, workflows, and repository terminology; code blocks must match the current implementation and be introduced by complete sentences.
For documentation reviews, report findings in severity order under Must fix, Should fix, and Nice to have; include a file path, line reference, current problem, rationale, and concrete rewrite or direction. If no issues exist, state that explicitly and mention residual validation risk.

Update relevant documentation when public behavior, adapters, examples, or workspace structure changes; for docs site changes, run just docs.

Files:

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

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

**/*.rs: Format Rust code with cargo fmt --all, verify formatting with cargo fmt --all -- --check, and run cargo check --workspace --locked for compilation validation.
Rust source files must include the specified SPDX copyright and Apache-2.0 license header using Rust comment syntax.

Files:

  • crates/fabric-cli/src/app.rs
  • crates/fabric-cli/src/scaffold.rs
**/*.{rs,toml}

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

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

Files:

  • crates/fabric-cli/src/app.rs
  • crates/fabric-cli/src/scaffold.rs
**/*.{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/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/README.md
**/README.md

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

Review affected package, crate, adapter, and integration README files when public behavior or entry points change.

Files:

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

📄 CodeRabbit inference engine (CONTRIBUTING.md)

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

Files:

  • adapters/codex/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/README.md
  • adapters/codex/src/nemo_fabric_adapters/codex/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_codex_adapter.py
🧠 Learnings (2)
📓 Common learnings
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

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

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

Timestamp: 2026-07-20T21:05:24.511Z
Learning: Before submitting a pull request, identify an issue, run relevant tests, verify affected packages compile, update documentation, and rebase on the latest `main`.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-20T21:05:24.511Z
Learning: Pull requests must include an overview, reviewer starting point, related issue, testing information, and breaking-change notes where applicable.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-20T21:05:24.511Z
Learning: Every pull request requires at least one approving review, passing CI, and no force-pushing during review.
Learnt from: CR
Repo: NVIDIA/NeMo-Fabric

Timestamp: 2026-07-20T21:05:24.511Z
Learning: Commit messages must use `type: short description`, use one of the documented types, keep the first line under 72 characters, and put additional context in the body.
📚 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/codex/src/nemo_fabric_adapters/codex/adapter.py
🧬 Code graph analysis (3)
crates/fabric-cli/src/app.rs (1)
crates/fabric-core/src/runtime.rs (3)
  • RunStatus (121-128)
  • run_plan (352-363)
  • text (68-75)
adapters/codex/src/nemo_fabric_adapters/codex/adapter.py (3)
crates/fabric-cli/src/presets.rs (1)
  • codex (191-215)
adapters/common/src/nemo_fabric_adapters/common/utils.py (1)
  • relay_enabled (156-157)
tests/adapters/test_codex_adapter.py (1)
  • close (116-117)
tests/adapters/test_codex_adapter.py (2)
crates/fabric-cli/src/presets.rs (1)
  • model (281-297)
adapters/codex/src/nemo_fabric_adapters/codex/adapter.py (1)
  • run (967-977)
🪛 ast-grep (0.44.1)
tests/e2e/test_cli_scaffold.py

[error] 14-33: Command coming from incoming request
Context: subprocess.run(
[
"cargo",
"run",
"--quiet",
"-p",
"nemo-fabric-cli",
"--",
"example",
"init",
"code-review",
str(destination),
"--language",
language,
],
cwd=ROOT,
check=True,
capture_output=True,
text=True,
)
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(subprocess-from-request)


[error] 40-45: Command coming from incoming request
Context: subprocess.run(
["uv", "venv", "--seed", "--python", sys.executable, str(venv)],
check=True,
capture_output=True,
text=True,
)
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(subprocess-from-request)


[error] 51-58: Command coming from incoming request
Context: subprocess.run(
[str(python), "-m", "pip", "install", "-e", "."],
cwd=destination,
env=environment,
check=True,
capture_output=True,
text=True,
)
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(subprocess-from-request)


[error] 67-79: Command coming from incoming request
Context: subprocess.run(
[
"cargo",
"build",
"--offline",
"--manifest-path",
str(destination / "Cargo.toml"),
],
env=environment,
check=True,
capture_output=True,
text=True,
)
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(subprocess-from-request)


[error] 85-104: Command coming from incoming request
Context: subprocess.run(
[
"cargo",
"run",
"--quiet",
"-p",
"nemo-fabric-cli",
"--",
"run",
"--preset",
"hermes",
"--input",
"Say hello",
],
cwd=ROOT,
env=environment,
check=False,
capture_output=True,
text=True,
)
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(subprocess-from-request)

🪛 Ruff (0.15.21)
tests/e2e/test_cli_scaffold.py

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

(S603)


[error] 16-29: Starting a process with a partial executable path

(S607)


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

(S603)


[error] 42-42: Starting a process with a partial executable path

(S607)


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

(S603)


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

(S603)


[error] 69-75: Starting a process with a partial executable path

(S607)


[error] 87-99: Starting a process with a partial executable path

(S607)

adapters/codex/src/nemo_fabric_adapters/codex/adapter.py

[warning] 884-884: Do not catch blind exception: Exception

(BLE001)

tests/adapters/test_codex_adapter.py

[warning] 353-353: Missing return type annotation for private function fail_to_create_home

Add return type annotation: Never

(ANN202)


[warning] 353-353: Missing type annotation for *_args

(ANN002)


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

(ANN003)


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

(TRY003)

🔇 Additional comments (13)
docs/integrations/codex.mdx (2)

78-81: LGTM!


78-81: 📐 Maintainability & Code Quality

Run the documentation build before handoff.

The provider and Relay statement is consistent with the adapter README and tests, but the required just docs check is not verifiable from the supplied context.

Source: Coding guidelines

adapters/codex/README.md (1)

52-59: LGTM!

Also applies to: 68-69, 87-89, 138-144, 172-174

tests/adapters/test_codex_adapter.py (3)

353-354: 📐 Maintainability & Code Quality

Confirm the Ruff gate for the injected failure callback.

Ruff reports ANN202, ANN002, ANN003, and TRY003 on this test-only callback. Confirm whether test scaffolding is exempt; otherwise add the required annotations and follow the repository’s approved exception-message pattern.

Source: Linters/SAST tools


23-44: LGTM!

Also applies to: 147-153, 194-200, 208-219, 295-352, 355-400, 480-504, 540-540, 587-588, 654-656, 670-673, 712-713, 736-738


23-44: 📐 Maintainability & Code Quality

Run the focused adapter tests and Python suite.

These changes update the payload contract and add provider/Relay error-path coverage. Run the focused tests under tests/adapters, followed by just test-python.

Also applies to: 480-504

Sources: Coding guidelines, Path instructions

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

676-683: LGTM!

Also applies to: 826-887


654-685: 📐 Maintainability & Code Quality

Run the Codex adapter validation. Focus on tests/adapters/test_codex_adapter.py, then run just test-python in an environment where uv and just are available.

crates/fabric-cli/src/app.rs (1)

9-9: LGTM!

Also applies to: 253-268, 346-351

crates/fabric-cli/templates/python/pyproject.toml.tmpl (1)

4-15: LGTM!

crates/fabric-cli/templates/rust/Cargo.toml.tmpl (1)

10-10: LGTM!

tests/e2e/test_cli_scaffold.py (2)

14-59: LGTM!

Also applies to: 83-108


14-108: 📐 Maintainability & Code Quality

Run the focused E2E test: uv run pytest -k "test_cli_scaffold"

Comment thread crates/fabric-cli/src/scaffold.rs Outdated
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
@AnuradhaKaruppiah

Copy link
Copy Markdown
Collaborator Author

/merge

@rapids-bot
rapids-bot Bot merged commit 11c8c0e into NVIDIA:main Jul 20, 2026
16 checks passed

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

LGTM from a documentation style review — no changes needed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants