feat: make nemo-fabric a typed experimentation CLI - #82
Conversation
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughFabric replaces profile-backed configuration with complete typed ChangesTyped configuration and runtime contracts
Experimentation CLI
Migration and supporting contracts
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
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 winTreat
input_textas mutually exclusive too.Providing
input_textwith 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 liftReject conflicting duplicated plan state.
RunPlanstores both top-levelconfig/base_dirandeffective_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 winReject the removed
profilesfield instead of preserving it as an extension.Because
profilesis no longer in_fields, Line 652 places legacy profile input intoextra_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 winUse 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()orrun_in_executorand 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
⛔ Files ignored due to path filters (2)
Cargo.lockis excluded by!**/*.lockuv.lockis excluded by!**/*.lock
📒 Files selected for processing (161)
CLI.mdCargo.tomlREADME.mdadapters/claude/src/nemo_fabric_adapters/claude/adapter.pyadapters/codex/src/nemo_fabric_adapters/codex/adapter.pyadapters/common/src/nemo_fabric_adapters/common/relay_gateway.pyadapters/common/src/nemo_fabric_adapters/common/utils.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-cli/Cargo.tomlcrates/fabric-cli/src/main.rscrates/fabric-core/Cargo.tomlcrates/fabric-core/examples/generate-schemas.rscrates/fabric-core/src/config.rscrates/fabric-core/src/doctor.rscrates/fabric-core/src/error.rscrates/fabric-core/src/lib.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/schema.rscrates/fabric-python/src/lib.rsdocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitykind.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-fabricdocument.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatifstorageconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofendpointfieldnamepolicy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofendpointtransport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofmode.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayotlptransport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayunsupportedbehavior.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-resolutionstrategy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-telemetryprovider.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-adapter-descriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-fabric-document.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-effective-config-from-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-effective-config-with-profiles.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-effective-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-effective-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-with-profiles.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-validate-agent-directory.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-effectiveconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-harnessconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-metadataconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-modelconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-profileconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-profileregistryconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatifconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofendpointconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relaycomponentconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfigpolicy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayobservabilityconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayotlpconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvedadapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimecapabilities.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimeconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-skillconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryproviderconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/enum-doctorstatus.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/fn-doctor-plan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorcheck.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorreport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/fn-version.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/enum-errorstage.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runrequest.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runresult.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdxexamples/harbor/calculator/task/environment/fabric/adapters/scripted/run.pypython/pyproject.tomlpython/src/nemo_fabric/__init__.pypython/src/nemo_fabric/_bundled/adapters/claude/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/adapters/codex/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/adapters/deepagents/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/adapters/hermes/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/examples/code_review_agent/repo/calculator.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/skills/code-review.mdpython/src/nemo_fabric/_config_sources.pypython/src/nemo_fabric/_native.pyipython/src/nemo_fabric/cli.pypython/src/nemo_fabric/client.pypython/src/nemo_fabric/errors.pypython/src/nemo_fabric/factories.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/presets.pypython/src/nemo_fabric/runtime.pypython/src/nemo_fabric/types.pyschemas/SCHEMA.mdschemas/adapter-descriptor.schema.jsonschemas/adapter-invocation.schema.jsonschemas/agent.schema.jsonschemas/effective-config.schema.jsonschemas/error-info.schema.jsonschemas/profile.schema.jsonschemas/run-plan.schema.jsonschemas/run-request.schema.jsonschemas/run-result.schema.jsontests/_utils/configs.pytests/_utils/utils.pytests/adapters/test_adapaters_common_utils.pytests/adapters/test_claude_adapter.pytests/adapters/test_codex_adapter.pytests/adapters/test_deepagents.pytests/adapters/test_hermes_adapter.pytests/conftest.pytests/e2e/test_cli.pytests/e2e/test_harbor_swebench_task.pytests/e2e/test_hermes_config_mapping.pytests/e2e/test_hermes_e2e.pytests/e2e/test_local_env_e2e.pytests/e2e/test_swebench_style.pytests/fixtures/file-config-agent/agent.yamltests/fixtures/file-config-agent/profiles/codex.yamltests/fixtures/file-config-agent/profiles/deepagents.yamltests/fixtures/file-config-agent/profiles/env-local.yamltests/fixtures/file-config-agent/profiles/env-opensandbox.yamltests/fixtures/file-config-agent/profiles/hermes.yamltests/fixtures/file-config-agent/profiles/mcp-github.yamltests/fixtures/file-config-agent/profiles/native-otel.yamltests/fixtures/file-config-agent/profiles/relay-openinference.yamltests/fixtures/file-config-agent/profiles/relay-otel.yamltests/fixtures/file-config-agent/profiles/relay.yamltests/fixtures/hermes-shim-agent/agent.yamltests/fixtures/hermes-shim-agent/profiles/env-local.yamltests/fixtures/hermes-shim-agent/profiles/harbor-swebench-django-13741.yamltests/fixtures/hermes-shim-agent/profiles/mcp-github.yamltests/fixtures/hermes-shim-agent/profiles/swebench-shim.yamltests/integrations/test_harbor_runner.pytests/integrations/test_harbor_telemetry.pytests/python/test_code_review_example.pytests/python/test_harbor_integration.pytests/python/test_native_sdk.pytests/python/test_runtime.pytests/python/test_sdk_concurrency.pytests/python/test_sdk_contract.pytests/python/test_sdk_runtimes.pytests/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
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
8835c37 to
2553b44
Compare
There was a problem hiding this comment.
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 winAvoid 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
⛔ Files ignored due to path filters (2)
Cargo.lockis excluded by!**/*.lockuv.lockis excluded by!**/*.lock
📒 Files selected for processing (162)
ATTRIBUTIONS-Rust.mdCLI.mdCargo.tomlREADME.mdadapters/claude/src/nemo_fabric_adapters/claude/adapter.pyadapters/codex/src/nemo_fabric_adapters/codex/adapter.pyadapters/common/src/nemo_fabric_adapters/common/relay_gateway.pyadapters/common/src/nemo_fabric_adapters/common/utils.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyadapters/hermes/src/nemo_fabric_adapters/hermes/adapter.pycrates/fabric-cli/Cargo.tomlcrates/fabric-cli/src/main.rscrates/fabric-core/Cargo.tomlcrates/fabric-core/examples/generate-schemas.rscrates/fabric-core/src/config.rscrates/fabric-core/src/doctor.rscrates/fabric-core/src/error.rscrates/fabric-core/src/lib.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/schema.rscrates/fabric-python/src/lib.rsdocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.errors.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitykind.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-fabricdocument.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatifstorageconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofendpointfieldnamepolicy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofendpointtransport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofmode.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayotlptransport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayunsupportedbehavior.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-resolutionstrategy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-telemetryprovider.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-adapter-descriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-fabric-document.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-effective-config-from-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-effective-config-with-profiles.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-effective-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-effective-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-with-profiles.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-validate-agent-directory.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-effectiveconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-harnessconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-metadataconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-modelconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-profileconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-profileregistryconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatifconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofendpointconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relaycomponentconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfigpolicy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayobservabilityconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayotlpconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvedadapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimecapabilities.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimeconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-skillconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryproviderconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/enum-doctorstatus.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/fn-doctor-plan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorcheck.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorreport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/fn-version.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/enum-errorstage.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runrequest.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runresult.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdxexamples/harbor/calculator/task/environment/fabric/adapters/scripted/run.pypython/pyproject.tomlpython/src/nemo_fabric/__init__.pypython/src/nemo_fabric/_bundled/adapters/claude/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/adapters/codex/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/adapters/deepagents/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/adapters/hermes/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/examples/code_review_agent/repo/calculator.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/skills/code-review.mdpython/src/nemo_fabric/_config_sources.pypython/src/nemo_fabric/_native.pyipython/src/nemo_fabric/cli.pypython/src/nemo_fabric/client.pypython/src/nemo_fabric/errors.pypython/src/nemo_fabric/factories.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/presets.pypython/src/nemo_fabric/runtime.pypython/src/nemo_fabric/types.pyschemas/SCHEMA.mdschemas/adapter-descriptor.schema.jsonschemas/adapter-invocation.schema.jsonschemas/agent.schema.jsonschemas/effective-config.schema.jsonschemas/error-info.schema.jsonschemas/profile.schema.jsonschemas/run-plan.schema.jsonschemas/run-request.schema.jsonschemas/run-result.schema.jsontests/_utils/configs.pytests/_utils/utils.pytests/adapters/test_adapaters_common_utils.pytests/adapters/test_claude_adapter.pytests/adapters/test_codex_adapter.pytests/adapters/test_deepagents.pytests/adapters/test_hermes_adapter.pytests/conftest.pytests/e2e/test_cli.pytests/e2e/test_harbor_swebench_task.pytests/e2e/test_hermes_config_mapping.pytests/e2e/test_hermes_e2e.pytests/e2e/test_local_env_e2e.pytests/e2e/test_swebench_style.pytests/fixtures/file-config-agent/agent.yamltests/fixtures/file-config-agent/profiles/codex.yamltests/fixtures/file-config-agent/profiles/deepagents.yamltests/fixtures/file-config-agent/profiles/env-local.yamltests/fixtures/file-config-agent/profiles/env-opensandbox.yamltests/fixtures/file-config-agent/profiles/hermes.yamltests/fixtures/file-config-agent/profiles/mcp-github.yamltests/fixtures/file-config-agent/profiles/native-otel.yamltests/fixtures/file-config-agent/profiles/relay-openinference.yamltests/fixtures/file-config-agent/profiles/relay-otel.yamltests/fixtures/file-config-agent/profiles/relay.yamltests/fixtures/hermes-shim-agent/agent.yamltests/fixtures/hermes-shim-agent/profiles/env-local.yamltests/fixtures/hermes-shim-agent/profiles/harbor-swebench-django-13741.yamltests/fixtures/hermes-shim-agent/profiles/mcp-github.yamltests/fixtures/hermes-shim-agent/profiles/swebench-shim.yamltests/integrations/test_harbor_runner.pytests/integrations/test_harbor_telemetry.pytests/python/test_code_review_example.pytests/python/test_harbor_integration.pytests/python/test_native_sdk.pytests/python/test_runtime.pytests/python/test_sdk_concurrency.pytests/python/test_sdk_contract.pytests/python/test_sdk_runtimes.pytests/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
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
There was a problem hiding this comment.
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
⛔ Files ignored due to path filters (1)
uv.lockis excluded by!**/*.lock
📒 Files selected for processing (17)
CLI.mdREADME.mdadapters/hermes/README.mddocs/getting-started/overview.mdxdocs/sdk/python.mdxpypi.mdpyproject.tomlpython/src/nemo_fabric/_bundled/adapters/scripted/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/adapters/scripted/run.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/README.mdpython/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/config.pypython/src/nemo_fabric/cli.pypython/src/nemo_fabric/presets.pytests/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.jsonpython/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 leadingv, such as0.1.0or0.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 undervalidate-changebefore 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. Usefixonly 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.jsonpyproject.tomlpython/src/nemo_fabric/_bundled/examples/code_review_agent/README.mdadapters/hermes/README.mdpython/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/config.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.pyCLI.mdpython/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/adapters/scripted/run.pypypi.mddocs/getting-started/overview.mdxdocs/sdk/python.mdxpython/src/nemo_fabric/presets.pytests/e2e/test_cli.pyREADME.mdpython/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.jsonpython/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/config.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/adapters/scripted/run.pypython/src/nemo_fabric/presets.pytests/e2e/test_cli.pypython/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.jsonpyproject.tomlpython/src/nemo_fabric/_bundled/examples/code_review_agent/README.mdpython/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/config.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/adapters/scripted/run.pypython/src/nemo_fabric/presets.pypython/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._nativeextension.
Files:
python/src/nemo_fabric/_bundled/adapters/scripted/fabric-adapter.jsonpyproject.tomlpython/src/nemo_fabric/_bundled/examples/code_review_agent/README.mdpython/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/config.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/adapters/scripted/run.pypython/src/nemo_fabric/presets.pypython/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.jsonpython/src/nemo_fabric/_bundled/examples/code_review_agent/README.mdpython/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/config.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/fabric-adapter.jsonpython/src/nemo_fabric/_bundled/adapters/scripted/run.pypython/src/nemo_fabric/presets.pypython/src/nemo_fabric/cli.py
**/*.{rs,toml}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
**/*.{rs,toml}: Rust code must be formatted withcargo fmt --all; formatting can be checked withcargo fmt --all -- --check, and Rust workspaces must compile withcargo 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 -- --checkandjust 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-pythonto 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-pythonandcargo check -p fabric-python --locked.
Files:
pyproject.tomlpython/src/nemo_fabric/_bundled/examples/code_review_agent/adapters/scripted/run.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/config.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.pypython/src/nemo_fabric/_bundled/adapters/scripted/run.pypython/src/nemo_fabric/presets.pytests/e2e/test_cli.pypython/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.mdadapters/hermes/README.mdCLI.mdpypi.mddocs/getting-started/overview.mdxdocs/sdk/python.mdxREADME.md
**/README.md
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update an adapter or example
README.mdwhen that adapter or example surface changes.
Files:
python/src/nemo_fabric/_bundled/examples/code_review_agent/README.mdadapters/hermes/README.mdREADME.md
**/*.{md,mdx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
For docs site changes, run
just docsto 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, includingREADME.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.
CapitalizeNVIDIAcorrectly 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 ashere.
Write procedures as short, imperative, parallel, easy-to-scan steps; prefer active voice, present tense, plain English, and concise sentences.
Useafterinstead ofoncewhen expressing temporal sequence, and usecaninstead ofmaywhen describing possibility rather than permission.
Use unambiguous date formats and avoid ordinal dates in body text.
When reviewing documentation, report findings in severity order underMust fix,Should fix, andNice to have, with file paths, line references, explanations, and concrete rewrites or directions.
Files:
python/src/nemo_fabric/_bundled/examples/code_review_agent/README.mdadapters/hermes/README.mdCLI.mdpypi.mddocs/getting-started/overview.mdxdocs/sdk/python.mdxREADME.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.mdadapters/hermes/README.mdCLI.mdpypi.mdREADME.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.mdadapters/hermes/README.mdCLI.mdpypi.mdREADME.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 spellNVIDIAin all caps; do not useNvidia,nvidia, orNV.
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 ashereorread 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.
Usecanfor possibility and reservemayfor permission.
Useafterfor temporal relationships instead ofonce, and preferrefer tooverseewhen 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.mdadapters/hermes/README.mdCLI.mdpypi.mddocs/getting-started/overview.mdxdocs/sdk/python.mdxREADME.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.
Usecanfor possibility and reservemayfor permission; useafterfor temporal order; userefer tofor cross-references; prefer short direct sentences and specific verbs; avoid unnecessarypleasein 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: usefor exampleorsuch asinstead ofe.g.,and so oninstead ofetc.,that isinstead ofi.e.,compared toinstead ofvs., andby,through, orusinginstead ofvia. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Usethatwithout commas for essential clauses, andwhichwith commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such asJune 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space beforea.m.orp.m.; useETandPTfor needed time zones; avoid24/7; and preferfrom 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.mdadapters/hermes/README.mdCLI.mdpypi.mdREADME.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.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/config.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.pypython/src/nemo_fabric/_bundled/adapters/scripted/run.pypython/src/nemo_fabric/presets.pytests/e2e/test_cli.pypython/src/nemo_fabric/cli.py
**/*.{rs,py}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
**/*.{rs,py}: Usesnake_casefor Rust and Python functions and variables; usePascalCasefor 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.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/config.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.pypython/src/nemo_fabric/_bundled/adapters/scripted/run.pypython/src/nemo_fabric/presets.pytests/e2e/test_cli.pypython/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.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/config.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.pypython/src/nemo_fabric/_bundled/adapters/scripted/run.pypython/src/nemo_fabric/presets.pytests/e2e/test_cli.pypython/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.mdxdocs/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.mdxdocs/sdk/python.mdxREADME.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.mdxdocs/sdk/python.mdx
docs/**/*.{md,mdx,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Run
just docswhen the documentation site changes.
Files:
docs/getting-started/overview.mdxdocs/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.mdxdocs/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.mdxdocs/sdk/python.mdx
docs/**/*
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For documentation or examples changes, run
just docswhen practical and verify documented commands against the current repository.
Files:
docs/getting-started/overview.mdxdocs/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.mdxdocs/sdk/python.mdxREADME.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.asyncioto tests; async tests are automatically detected by the async runner.
Do not add-> Nonereturn annotations to test functions.
When mocking a class, useunittest.mock.MagicMockorAsyncMock, supplyingspecwhen necessary; do not define a new mock class.
Prefix mocked class names withmock, notfake.
Prefer pytest fixtures over helper methods.
Define shared fixtures inconftest.pyrather than repeating them across test files.
Define fixtures using@pytest.fixture(name="<fixture_name>"[, scope="<scope>"])and a<fixture_name>_fixturefunction; specifyscopeonly when it is notfunction.
Preferpytest.mark.parametrizeover separate tests for different input types.
Use@pytest.mark.usefixtureswhen a fixture is needed but its return value is unused.
Useos.environto modify environment variables in tests; do not usemonkeypatch.setenv, because the autouserestore_environ_fixtureintests/conftest.pyrestores 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 withuv run pytest -k "<pattern>"and all tests withuv 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.mdmust reflect the current workspace, supported adapters, and top-level documentation.Update
README.mdwhen 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.mdordocs/index.ymlwhen 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.jsonpython/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.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/config.pypython/src/nemo_fabric/_bundled/examples/code_review_agent/__init__.pypython/src/nemo_fabric/_bundled/adapters/scripted/run.pypython/src/nemo_fabric/presets.pypython/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
-> Noneannotations still violate the repository’s Pytest convention.Also applies to: 41-41, 52-52, 62-62, 147-147
163-179: Useobjectfor variadic helper arguments.The helpers only stringify and forward these values, so
Anyremains 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 QualityRun
just docsand commit any generated output. The repo’sdocstarget also runsfern check, so these.mdxchanges 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 & AvailabilityVerify that the runtime dependency is resolvable.
The public lookup for
nemo-fabric-runtimeversion0.1.0returned 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!
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com> # Conflicts: # README.md
There was a problem hiding this comment.
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 winGuard the DeepAgents integration imports too. A partial
nemo_relayinstall or older release withoutnemo_relay.integrations.deepagentswill still surface a genericImportError/ModuleNotFoundErrorhere 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 winMake the lifecycle example runnable or label it as a fragment.
The text calls this a “complete, runnable program,” but Lines 139-151 use
configandbasewithout defining them; the precedingto_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 winAdd the annotations required by Ruff to the new test helpers.
Ruff reports
ANN202,ANN203,ANN204,ANN002, andANN003for these helpers. Add explicit parameter and return annotations, including-> Nonefor 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
⛔ Files ignored due to path filters (1)
uv.lockis excluded by!**/*.lock
📒 Files selected for processing (7)
CONTRIBUTING.mdREADME.mdadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pydocs/getting-started/install.mdxpyproject.tomlskills/nemo-fabric-integrate/SKILL.mdtests/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 undervalidate-changebefore 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. Usefixonly 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.tomlCONTRIBUTING.mddocs/getting-started/install.mdxtests/adapters/test_deepagents.pyskills/nemo-fabric-integrate/SKILL.mdadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pyREADME.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._nativeextension.
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-pythonto 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 -- --checkandjust 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-pythonandcargo check -p fabric-python --locked.
Files:
pyproject.tomltests/adapters/test_deepagents.pyadapters/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.mdskills/nemo-fabric-integrate/SKILL.mdREADME.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, includingREADME.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.
CapitalizeNVIDIAcorrectly 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 ashere.
Write procedures as short, imperative, parallel, easy-to-scan steps; prefer active voice, present tense, plain English, and concise sentences.
Useafterinstead ofoncewhen expressing temporal sequence, and usecaninstead ofmaywhen describing possibility rather than permission.
Use unambiguous date formats and avoid ordinal dates in body text.
When reviewing documentation, report findings in severity order underMust fix,Should fix, andNice to have, with file paths, line references, explanations, and concrete rewrites or directions.
Files:
CONTRIBUTING.mddocs/getting-started/install.mdxskills/nemo-fabric-integrate/SKILL.mdREADME.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 spellNVIDIAin all caps; do not useNvidia,nvidia, orNV.
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 ashereorread 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.
Usecanfor possibility and reservemayfor permission.
Useafterfor temporal relationships instead ofonce, and preferrefer tooverseewhen 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.mddocs/getting-started/install.mdxskills/nemo-fabric-integrate/SKILL.mdREADME.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.
Usecanfor possibility and reservemayfor permission; useafterfor temporal order; userefer tofor cross-references; prefer short direct sentences and specific verbs; avoid unnecessarypleasein 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: usefor exampleorsuch asinstead ofe.g.,and so oninstead ofetc.,that isinstead ofi.e.,compared toinstead ofvs., andby,through, orusinginstead ofvia. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Usethatwithout commas for essential clauses, andwhichwith commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such asJune 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space beforea.m.orp.m.; useETandPTfor needed time zones; avoid24/7; and preferfrom 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.mdskills/nemo-fabric-integrate/SKILL.mdREADME.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.mdskills/nemo-fabric-integrate/SKILL.mdREADME.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.mdxREADME.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 docswhen 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 docswhen 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.mdxREADME.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.pyadapters/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.asyncioto tests; async tests are automatically detected by the async runner.
Do not add-> Nonereturn annotations to test functions.
When mocking a class, useunittest.mock.MagicMockorAsyncMock, supplyingspecwhen necessary; do not define a new mock class.
Prefix mocked class names withmock, notfake.
Prefer pytest fixtures over helper methods.
Define shared fixtures inconftest.pyrather than repeating them across test files.
Define fixtures using@pytest.fixture(name="<fixture_name>"[, scope="<scope>"])and a<fixture_name>_fixturefunction; specifyscopeonly when it is notfunction.
Preferpytest.mark.parametrizeover separate tests for different input types.
Use@pytest.mark.usefixtureswhen a fixture is needed but its return value is unused.
Useos.environto modify environment variables in tests; do not usemonkeypatch.setenv, because the autouserestore_environ_fixtureintests/conftest.pyrestores 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 withuv run pytest -k "<pattern>"and all tests withuv 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.pyadapters/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 byjust 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.pyadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.py
**/*.{rs,py}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Use
snake_casefor Rust and Python functions and variables; usePascalCasefor Rust types and Python classes.
Files:
tests/adapters/test_deepagents.pyadapters/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.pyadapters/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.mdordocs/index.ymlwhen documentation entry points or example reading paths change.
Files:
README.md
README.md
📄 CodeRabbit inference engine (.agents/skills/small-fix/SKILL.md)
Update
README.mdwhen 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-fabrica “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 CorrectnessUse one canonical Hermes adapter extra name.
This command uses
nemo-fabric[hermes], whileCONTRIBUTING.mdanddocs/getting-started/install.mdxdocumentnemo-fabric[adapters-hermes]. Verify the name declared inpyproject.tomland 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 & AvailabilityVerify
nemo-relay0.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.6until 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 & AvailabilityVerify the real
nemo-relayAPI, 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
There was a problem hiding this comment.
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 winUse 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 winHyphenate “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
📒 Files selected for processing (7)
.agents/skills/review-doc-style/SKILL.mdREADME.mddocs/about-nemo-fabric/overview.mdxdocs/getting-started/install.mdxdocs/getting-started/quickstart.mdxdocs/sdk/python.mdxskills/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.mdxdocs/getting-started/install.mdxdocs/about-nemo-fabric/overview.mdxREADME.mddocs/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.mdxdocs/getting-started/install.mdxdocs/about-nemo-fabric/overview.mdxdocs/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.mdxdocs/getting-started/install.mdxdocs/about-nemo-fabric/overview.mdxdocs/sdk/python.mdx
docs/**/*.{md,mdx,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Run
just docswhen the documentation site changes.
Files:
docs/getting-started/quickstart.mdxdocs/getting-started/install.mdxdocs/about-nemo-fabric/overview.mdxdocs/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 undervalidate-changebefore 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. Usefixonly 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.mdxdocs/getting-started/install.mdxskills/nemo-fabric-integrate/SKILL.mddocs/about-nemo-fabric/overview.mdxREADME.mddocs/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.mdxdocs/getting-started/install.mdxdocs/about-nemo-fabric/overview.mdxdocs/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.mdxdocs/getting-started/install.mdxdocs/about-nemo-fabric/overview.mdxdocs/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 spellNVIDIAin all caps; do not useNvidia,nvidia, orNV.
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 ashereorread 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.
Usecanfor possibility and reservemayfor permission.
Useafterfor temporal relationships instead ofonce, and preferrefer tooverseewhen 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.mdxdocs/getting-started/install.mdxskills/nemo-fabric-integrate/SKILL.mddocs/about-nemo-fabric/overview.mdxREADME.mddocs/sdk/python.mdx
docs/**/*
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For documentation or examples changes, run
just docswhen practical and verify documented commands against the current repository.
Files:
docs/getting-started/quickstart.mdxdocs/getting-started/install.mdxdocs/about-nemo-fabric/overview.mdxdocs/sdk/python.mdx
**/*.{md,mdx}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
**/*.{md,mdx}: Use the full product nameNVIDIA NeMo Fabricon first usage, typically in the title or H1; useNeMo Fabricthereafter. Usefabricalone only for the CLI tool and surround it with backticks.
CapitalizeNVIDIAcorrectly 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 ashere.
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.
Preferafteroveroncewhen expressing temporal sequence, and usecanrather thanmaywhen 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, includingREADME.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.mdxdocs/getting-started/install.mdxskills/nemo-fabric-integrate/SKILL.mddocs/about-nemo-fabric/overview.mdxREADME.mddocs/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.mdxdocs/getting-started/install.mdxskills/nemo-fabric-integrate/SKILL.mddocs/about-nemo-fabric/overview.mdxREADME.mddocs/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.mdxdocs/getting-started/install.mdxdocs/about-nemo-fabric/overview.mdxREADME.mddocs/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.mdREADME.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.
Usecanfor possibility and reservemayfor permission; useafterfor temporal order; userefer tofor cross-references; prefer short direct sentences and specific verbs; avoid unnecessarypleasein 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: usefor exampleorsuch asinstead ofe.g.,and so oninstead ofetc.,that isinstead ofi.e.,compared toinstead ofvs., andby,through, orusinginstead ofvia. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Usethatwithout commas for essential clauses, andwhichwith commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such asJune 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space beforea.m.orp.m.; useETandPTfor needed time zones; avoid24/7; and preferfrom 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.mdREADME.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.mdordocs/index.ymlwhen documentation entry points or example reading paths change.
Files:
README.md
README.md
📄 CodeRabbit inference engine (.agents/skills/small-fix/SKILL.md)
Update
README.mdwhen 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], whiledocs/getting-started/install.mdxdocumentsnemo-fabric[adapters-hermes]and the local-checkout example namesnemo-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], whiledocs/getting-started/install.mdxdocumentsnemo-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 CorrectnessNo change needed.
pyproject.tomldefines both theadapters-*extras and the shorter extras likehermes, 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>
|
@CodeRabbit pause reviews |
|
✅ Action performedReviews paused. |
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
7acfd7c to
564c536
Compare
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>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
There was a problem hiding this comment.
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 winAlign 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 tonemo-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 winRemove the deleted
resolve(...)API.
Fabric.resolvewas removed from the API inventory, but this guidance still tells callers to use it withbase_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 winFix 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
⛔ Files ignored due to path filters (1)
Cargo.lockis excluded by!**/*.lock
📒 Files selected for processing (144)
.agents/skills/review-doc-style/SKILL.mdATTRIBUTIONS-Rust.mdCONTRIBUTING.mdCargo.tomlREADME.mdTODO.mdadapters/claude/README.mdadapters/claude/src/nemo_fabric_adapters/claude/adapter.pyadapters/codex/README.mdadapters/codex/src/nemo_fabric_adapters/codex/adapter.pyadapters/common/src/nemo_fabric_adapters/common/utils.pyadapters/deepagents/README.mdadapters/deepagents/src/nemo_fabric_adapters/deepagents/adapter.pycrates/fabric-cli/Cargo.tomlcrates/fabric-cli/README.mdcrates/fabric-cli/assets/adapters/scripted/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/scripted/run.pycrates/fabric-cli/assets/examples/code-review/repo/calculator.pycrates/fabric-cli/assets/examples/code-review/skills/code-review.mdcrates/fabric-cli/src/app.rscrates/fabric-cli/src/assets.rscrates/fabric-cli/src/examples.rscrates/fabric-cli/src/lib.rscrates/fabric-cli/src/main.rscrates/fabric-cli/src/presets.rscrates/fabric-cli/src/scaffold.rscrates/fabric-cli/templates/README.md.tmplcrates/fabric-cli/templates/python/main.py.tmplcrates/fabric-cli/templates/python/pyproject.toml.tmplcrates/fabric-cli/templates/rust/Cargo.toml.tmplcrates/fabric-cli/templates/rust/main.rs.tmplcrates/fabric-core/README.mdcrates/fabric-core/src/config.rscrates/fabric-core/src/doctor.rscrates/fabric-core/src/error.rscrates/fabric-core/src/lib.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/schema.rscrates/fabric-python/src/lib.rsdocs/about-nemo-fabric/overview.mdxdocs/experimentation/cli.mdxdocs/getting-started/install.mdxdocs/getting-started/quickstart.mdxdocs/index.ymldocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/reference/api/python-library-reference/nemo_fabric.types.mddocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitykind.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatifstorageconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofendpointfieldnamepolicy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofendpointtransport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofmode.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayotlptransport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayunsupportedbehavior.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-resolutionstrategy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-telemetryprovider.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-adapter-descriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-effective-config-from-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-effective-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-effectiveconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-harnessconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-metadataconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-modelconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatifconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofendpointconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relaycomponentconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfigpolicy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayobservabilityconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayotlpconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvedadapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimecapabilities.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimeconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-skillconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryproviderconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/enum-doctorstatus.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/fn-doctor-plan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorcheck.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorreport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/fn-version.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-adapterinvocation.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdxdocs/sdk/python.mdxexamples/code_review_agent/README.mdexamples/notebooks/01_quickstart.ipynbexamples/notebooks/02_variations.ipynbpypi.mdpython/src/nemo_fabric/__init__.pypython/src/nemo_fabric/_native.pyipython/src/nemo_fabric/client.pypython/src/nemo_fabric/types.pyschemas/SCHEMA.mdschemas/adapter-invocation.schema.jsonschemas/agent.schema.jsonschemas/effective-config.schema.jsonschemas/run-plan.schema.jsonskills/nemo-fabric-integrate/SKILL.mdskills/nemo-fabric-integrate/references/config-mapping.mdskills/nemo-fabric-integrate/references/sdk-api-inventory.mdtests/_utils/utils.pytests/adapters/test_adapaters_common_utils.pytests/adapters/test_claude_adapter.pytests/adapters/test_codex_adapter.pytests/adapters/test_deepagents.pytests/adapters/test_hermes_adapter.pytests/docs/test_python_api_docs.pytests/e2e/test_cli.pytests/e2e/test_harbor_swebench_task.pytests/e2e/test_local_env_e2e.pytests/e2e/test_swebench_style.pytests/fixtures/file-config-agent/skills/code-review/README.mdtests/fixtures/hermes-shim-agent/adapters/hermes-shim/src/nemo_fabric_test_adapters/hermes_shim/adapter.pytests/integrations/test_harbor_runner.pytests/python/test_code_review_example.pytests/python/test_native_sdk.pytests/python/test_runtime.pytests/python/test_sdk_contract.pytests/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
Salonijain27
left a comment
There was a problem hiding this comment.
Approved from a dependency point of view
|
/ok to test 2baf671 |
|
Fern docs preview: https://nvidia-preview-pull-request-82.docs.buildwithfern.com/nemo/fabric |
yczhang-nv
left a comment
There was a problem hiding this comment.
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!
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
There was a problem hiding this comment.
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
⛔ Files ignored due to path filters (1)
uv.lockis excluded by!**/*.lock
📒 Files selected for processing (27)
ATTRIBUTIONS-Rust.mdREADME.mdadapters/claude/README.mdadapters/claude/src/nemo_fabric_adapters/claude/adapter.pyadapters/codex/README.mdadapters/codex/src/nemo_fabric_adapters/codex/adapter.pyadapters/common/src/nemo_fabric_adapters/common/utils.pycrates/fabric-cli/README.mdcrates/fabric-cli/assets/adapters/claude/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/codex/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/deepagents/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/hermes/fabric-adapter.jsoncrates/fabric-cli/src/app.rscrates/fabric-cli/src/presets.rscrates/fabric-cli/src/scaffold.rscrates/fabric-cli/templates/rust/Cargo.toml.tmpldocs/about-nemo-fabric/overview.mdxdocs/experimentation/cli.mdxdocs/reference/api/python-library-reference/nemo_fabric.client.mddocs/sdk/python.mdxpyproject.tomlpython/src/nemo_fabric/client.pyscripts/licensing/attributions_lockfile_md.pyskills/nemo-fabric-integrate/references/config-mapping.mdtests/adapters/test_adapaters_common_utils.pytests/adapters/test_claude_adapter.pytests/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 undervalidate-changebefore 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. Usefixonly 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.tomlcrates/fabric-cli/assets/adapters/codex/fabric-adapter.jsoncrates/fabric-cli/README.mdcrates/fabric-cli/assets/adapters/deepagents/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/hermes/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/claude/fabric-adapter.jsoncrates/fabric-cli/templates/rust/Cargo.toml.tmplskills/nemo-fabric-integrate/references/config-mapping.mddocs/about-nemo-fabric/overview.mdxdocs/experimentation/cli.mdxadapters/claude/README.mdREADME.mdadapters/common/src/nemo_fabric_adapters/common/utils.pycrates/fabric-cli/src/presets.rstests/adapters/test_claude_adapter.pyadapters/codex/README.mdscripts/licensing/attributions_lockfile_md.pycrates/fabric-cli/src/app.rsdocs/sdk/python.mdxdocs/reference/api/python-library-reference/nemo_fabric.client.mdadapters/codex/src/nemo_fabric_adapters/codex/adapter.pycrates/fabric-cli/src/scaffold.rsadapters/claude/src/nemo_fabric_adapters/claude/adapter.pytests/adapters/test_codex_adapter.pytests/adapters/test_adapaters_common_utils.pypython/src/nemo_fabric/client.pyATTRIBUTIONS-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.tomlpython/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._nativeextension.
Files:
pyproject.tomlpython/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-pythonto 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 -- --checkandjust test-rust.
Files:
pyproject.tomlcrates/fabric-cli/src/presets.rscrates/fabric-cli/src/app.rscrates/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-pythonandcargo check -p fabric-python --locked.
Files:
pyproject.tomladapters/common/src/nemo_fabric_adapters/common/utils.pycrates/fabric-cli/src/presets.rstests/adapters/test_claude_adapter.pyscripts/licensing/attributions_lockfile_md.pycrates/fabric-cli/src/app.rsadapters/codex/src/nemo_fabric_adapters/codex/adapter.pycrates/fabric-cli/src/scaffold.rsadapters/claude/src/nemo_fabric_adapters/claude/adapter.pytests/adapters/test_codex_adapter.pytests/adapters/test_adapaters_common_utils.pypython/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.jsoncrates/fabric-cli/assets/adapters/deepagents/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/hermes/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/claude/fabric-adapter.jsonadapters/common/src/nemo_fabric_adapters/common/utils.pycrates/fabric-cli/src/presets.rstests/adapters/test_claude_adapter.pyscripts/licensing/attributions_lockfile_md.pycrates/fabric-cli/src/app.rsadapters/codex/src/nemo_fabric_adapters/codex/adapter.pycrates/fabric-cli/src/scaffold.rsadapters/claude/src/nemo_fabric_adapters/claude/adapter.pytests/adapters/test_codex_adapter.pytests/adapters/test_adapaters_common_utils.pypython/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.jsoncrates/fabric-cli/assets/adapters/deepagents/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/hermes/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/claude/fabric-adapter.jsonadapters/common/src/nemo_fabric_adapters/common/utils.pycrates/fabric-cli/src/presets.rstests/adapters/test_claude_adapter.pyscripts/licensing/attributions_lockfile_md.pycrates/fabric-cli/src/app.rsadapters/codex/src/nemo_fabric_adapters/codex/adapter.pycrates/fabric-cli/src/scaffold.rsadapters/claude/src/nemo_fabric_adapters/claude/adapter.pytests/adapters/test_codex_adapter.pytests/adapters/test_adapaters_common_utils.pypython/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.mdskills/nemo-fabric-integrate/references/config-mapping.mdadapters/claude/README.mdREADME.mdadapters/codex/README.mddocs/reference/api/python-library-reference/nemo_fabric.client.mdATTRIBUTIONS-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 spellNVIDIAin all caps; do not useNvidia,nvidia, orNV.
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 ashereorread 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.
Usecanfor possibility and reservemayfor permission.
Useafterfor temporal relationships instead ofonce, and preferrefer tooverseewhen 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.mdskills/nemo-fabric-integrate/references/config-mapping.mddocs/about-nemo-fabric/overview.mdxdocs/experimentation/cli.mdxadapters/claude/README.mdREADME.mdadapters/codex/README.mddocs/sdk/python.mdxdocs/reference/api/python-library-reference/nemo_fabric.client.mdATTRIBUTIONS-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.
Usecanfor possibility and reservemayfor permission; useafterfor temporal order; userefer tofor cross-references; prefer short direct sentences and specific verbs; avoid unnecessarypleasein 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: usefor exampleorsuch asinstead ofe.g.,and so oninstead ofetc.,that isinstead ofi.e.,compared toinstead ofvs., andby,through, orusinginstead ofvia. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Usethatwithout commas for essential clauses, andwhichwith commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such asJune 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space beforea.m.orp.m.; useETandPTfor needed time zones; avoid24/7; and preferfrom 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.mdskills/nemo-fabric-integrate/references/config-mapping.mdadapters/claude/README.mdREADME.mdadapters/codex/README.mddocs/reference/api/python-library-reference/nemo_fabric.client.mdATTRIBUTIONS-Rust.md
**/*.{md,mdx}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
**/*.{md,mdx}: Use the full product nameNVIDIA NeMo Fabricon its first usage, typically in the title or H1. Later uses may useNeMo Fabric. Usefabricalone 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 ashere.
Write procedures as short, imperative, parallel steps; prefer active voice, present tense, short sentences, and plain English. Preferafteroveronce, and usecanfor possibility rather than permission.
Keep documentation terminology consistent, avoid ambiguous numeric and ordinal dates, capitalizeNVIDIAcorrectly, 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, includingREADME.md,docs/index.yml, package or crate READMEs, and adapter or integration READMEs.
When performing a documentation review, report actionable findings in severity order underMust fix,Should fix, andNice to have; include the file path, line reference, current problem, rationale, and a concrete rewrite or direction.For documentation site changes, run
just docsto regenerate Python and Rust API references and validate Fern configuration.
Files:
crates/fabric-cli/README.mdskills/nemo-fabric-integrate/references/config-mapping.mddocs/about-nemo-fabric/overview.mdxdocs/experimentation/cli.mdxadapters/claude/README.mdREADME.mdadapters/codex/README.mddocs/sdk/python.mdxdocs/reference/api/python-library-reference/nemo_fabric.client.mdATTRIBUTIONS-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.mdskills/nemo-fabric-integrate/references/config-mapping.mdadapters/claude/README.mdREADME.mdadapters/codex/README.mddocs/reference/api/python-library-reference/nemo_fabric.client.mdATTRIBUTIONS-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.mdxdocs/experimentation/cli.mdxREADME.mddocs/sdk/python.mdxdocs/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.mdxdocs/experimentation/cli.mdxdocs/sdk/python.mdxdocs/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.mdxdocs/experimentation/cli.mdxdocs/sdk/python.mdx
docs/**/*.{md,mdx,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Run
just docswhen the documentation site changes.
Files:
docs/about-nemo-fabric/overview.mdxdocs/experimentation/cli.mdxdocs/sdk/python.mdxdocs/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.mdxdocs/experimentation/cli.mdxdocs/sdk/python.mdxdocs/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.mdxdocs/experimentation/cli.mdxdocs/sdk/python.mdxdocs/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 docswhen practical and verify documented commands against the current repository.
Files:
docs/about-nemo-fabric/overview.mdxdocs/experimentation/cli.mdxdocs/sdk/python.mdxdocs/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/orscripts/generate_api_docs.sh; for Rust API reference changes, update documentation comments undercrates/fabric-core/orscripts/docs/generate_rust_library_reference.py.
Files:
docs/about-nemo-fabric/overview.mdxdocs/experimentation/cli.mdxdocs/sdk/python.mdxdocs/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.mdxdocs/experimentation/cli.mdxREADME.mddocs/sdk/python.mdxdocs/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.mdadapters/common/src/nemo_fabric_adapters/common/utils.pyadapters/codex/README.mdadapters/codex/src/nemo_fabric_adapters/codex/adapter.pyadapters/claude/src/nemo_fabric_adapters/claude/adapter.py
{README.md,docs/index.yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Update
README.mdordocs/index.ymlwhen documentation entry points or example reading paths change.
Files:
README.md
README.md
📄 CodeRabbit inference engine (.agents/skills/small-fix/SKILL.md)
Update
README.mdwhen 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.pytests/adapters/test_claude_adapter.pyscripts/licensing/attributions_lockfile_md.pyadapters/codex/src/nemo_fabric_adapters/codex/adapter.pyadapters/claude/src/nemo_fabric_adapters/claude/adapter.pytests/adapters/test_codex_adapter.pytests/adapters/test_adapaters_common_utils.pypython/src/nemo_fabric/client.py
**/*.{rs,py,pyi}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
**/*.{rs,py,pyi}: Usesnake_casefor functions and variables; usePascalCasefor 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.pycrates/fabric-cli/src/presets.rstests/adapters/test_claude_adapter.pyscripts/licensing/attributions_lockfile_md.pycrates/fabric-cli/src/app.rsadapters/codex/src/nemo_fabric_adapters/codex/adapter.pycrates/fabric-cli/src/scaffold.rsadapters/claude/src/nemo_fabric_adapters/claude/adapter.pytests/adapters/test_codex_adapter.pytests/adapters/test_adapaters_common_utils.pypython/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-rustandcargo fmt --all -- --check.Run
cargo check --workspace --lockedafter version changes.
Files:
crates/fabric-cli/src/presets.rscrates/fabric-cli/src/app.rscrates/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.asyncioto tests; async tests are automatically detected by the async runner.
Do not add-> Nonereturn annotations to test functions.
When mocking a class, useunittest.mock.MagicMockorAsyncMock, supplyingspecwhen necessary; do not define a new mock class.
Prefix mocked class names withmock, notfake.
Prefer pytest fixtures over helper methods.
Define shared fixtures inconftest.pyrather than repeating them across test files.
Define fixtures using@pytest.fixture(name="<fixture_name>"[, scope="<scope>"])and a<fixture_name>_fixturefunction; specifyscopeonly when it is notfunction.
Preferpytest.mark.parametrizeover separate tests for different input types.
Use@pytest.mark.usefixtureswhen a fixture is needed but its return value is unused.
Useos.environto modify environment variables in tests; do not usemonkeypatch.setenv, because the autouserestore_environ_fixtureintests/conftest.pyrestores 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 withuv run pytest -k "<pattern>"and all tests withuv run pytest.
Files:
tests/adapters/test_claude_adapter.pytests/adapters/test_codex_adapter.pytests/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 byjust test-python.
Files:
tests/adapters/test_claude_adapter.pytests/adapters/test_codex_adapter.pytests/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.pytests/adapters/test_codex_adapter.pytests/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; runjust docsafterward.
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.jsoncrates/fabric-cli/assets/adapters/deepagents/fabric-adapter.jsoncrates/fabric-cli/assets/adapters/hermes/fabric-adapter.jsoncrates/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.pyadapters/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 reservedopenaiprovider. 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 & IntegrationVerify the hard runtime pin across release surfaces.
nemo-fabric-runtime == 0.1.0makes installation depend on one exact distribution version. Confirm that this version is available for all supported platforms and thatpython/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 CorrectnessVerify relative
base_dirhandling at the adapter boundary.The public API accepts any
str | PathLike, but_base_dir_arg()only appliesos.fspath;adapters/common/src/nemo_fabric_adapters/common/utils.pyrejects 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
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
There was a problem hiding this comment.
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
📒 Files selected for processing (3)
TODO.mdadapters/codex/src/nemo_fabric_adapters/codex/adapter.pydocs/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 undervalidate-changebefore 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. Usefixonly 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.mddocs/sdk/python.mdxadapters/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 spellNVIDIAin all caps; do not useNvidia,nvidia, orNV.
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 ashereorread 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.
Usecanfor possibility and reservemayfor permission.
Useafterfor temporal relationships instead ofonce, and preferrefer tooverseewhen 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.mddocs/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.
Usecanfor possibility and reservemayfor permission; useafterfor temporal order; userefer tofor cross-references; prefer short direct sentences and specific verbs; avoid unnecessarypleasein 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: usefor exampleorsuch asinstead ofe.g.,and so oninstead ofetc.,that isinstead ofi.e.,compared toinstead ofvs., andby,through, orusinginstead ofvia. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Usethatwithout commas for essential clauses, andwhichwith commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such asJune 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space beforea.m.orp.m.; useETandPTfor needed time zones; avoid24/7; and preferfrom 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.
UseNVIDIA NeMo Fabricon the first product-name usage, typically in the title or H1, andNeMo Fabricthereafter. Usefabricalone only for the CLI tool, enclosed in backticks.
Update relevant entry-point documentation when public behavior changes, includingREADME.md,docs/index.yml, package or crate READMEs, and applicable adapter or integration READMEs.
CapitalizeNVIDIAcorrectly 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 ashere.
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.
Useafterinstead ofoncewhen expressing temporal sequence, and usecanrather thanmaywhen 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.mddocs/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.mddocs/sdk/python.mdxadapters/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 docswhen 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 docswhen 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-pythonandcargo 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}: Usesnake_casefor functions and variables; usePascalCasefor Rust types and Python classes.
When adding functionality, include tests in the corresponding Rust crate or relevant area undertests/.
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
AjayThorve
left a comment
There was a problem hiding this comment.
Approved, pending resolutions of comments posted
yczhang-nv
left a comment
There was a problem hiding this comment.
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>
There was a problem hiding this comment.
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 winShould fix: Preserve the migration warning for removed CLI settings.
The tests still reject legacy
codex_commandandcodex_argssettings, 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
📒 Files selected for processing (9)
adapters/codex/README.mdadapters/codex/src/nemo_fabric_adapters/codex/adapter.pycrates/fabric-cli/src/app.rscrates/fabric-cli/src/scaffold.rscrates/fabric-cli/templates/python/pyproject.toml.tmplcrates/fabric-cli/templates/rust/Cargo.toml.tmpldocs/integrations/codex.mdxtests/adapters/test_codex_adapter.pytests/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 undervalidate-changebefore 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. Usefixonly 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.tmpltests/e2e/test_cli_scaffold.pydocs/integrations/codex.mdxcrates/fabric-cli/templates/rust/Cargo.toml.tmplcrates/fabric-cli/src/app.rsadapters/codex/README.mdadapters/codex/src/nemo_fabric_adapters/codex/adapter.pytests/adapters/test_codex_adapter.pycrates/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.pycrates/fabric-cli/src/app.rsadapters/codex/src/nemo_fabric_adapters/codex/adapter.pytests/adapters/test_codex_adapter.pycrates/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.asyncioto tests; async tests are automatically detected by the async runner.
Do not add-> Nonereturn annotations to test functions.
When mocking a class, useunittest.mock.MagicMockorAsyncMock, supplyingspecwhen necessary; do not define a new mock class.
Prefix mocked class names withmock, notfake.
Prefer pytest fixtures over helper methods.
Define shared fixtures inconftest.pyrather than repeating them across test files.
Define fixtures using@pytest.fixture(name="<fixture_name>"[, scope="<scope>"])and a<fixture_name>_fixturefunction; specifyscopeonly when it is notfunction.
Preferpytest.mark.parametrizeover separate tests for different input types.
Use@pytest.mark.usefixtureswhen a fixture is needed but its return value is unused.
Useos.environto modify environment variables in tests; do not usemonkeypatch.setenv, because the autouserestore_environ_fixtureintests/conftest.pyrestores 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 withuv run pytest -k "<pattern>"and all tests withuv run pytest.
Files:
tests/e2e/test_cli_scaffold.pytests/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.pyadapters/codex/src/nemo_fabric_adapters/codex/adapter.pytests/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-pythonandcargo check -p fabric-python --locked.
Files:
tests/e2e/test_cli_scaffold.pycrates/fabric-cli/src/app.rsadapters/codex/src/nemo_fabric_adapters/codex/adapter.pytests/adapters/test_codex_adapter.pycrates/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.pyadapters/codex/src/nemo_fabric_adapters/codex/adapter.pytests/adapters/test_codex_adapter.py
**/*.{rs,py}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
**/*.{rs,py}: Usesnake_casefor Rust and Python functions and variables; usePascalCasefor 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 relevanttests/area.
Files:
tests/e2e/test_cli_scaffold.pycrates/fabric-cli/src/app.rsadapters/codex/src/nemo_fabric_adapters/codex/adapter.pytests/adapters/test_codex_adapter.pycrates/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.pytests/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 docswhen 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 spellNVIDIAin all caps; do not useNvidia,nvidia, orNV.
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 ashereorread 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.
Usecanfor possibility and reservemayfor permission.
Useafterfor temporal relationships instead ofonce, and preferrefer tooverseewhen 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.mdxadapters/codex/README.md
docs/**/*
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For documentation or examples changes, run
just docswhen 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 nameNVIDIA NeMo Fabricon its first usage, typically in the title or H1, and useNeMo Fabricthereafter. Usefabricalone 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 ashere.
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.
Useafterinstead ofoncewhen referring to temporal order, and usecaninstead ofmaywhen 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 underMust fix,Should fix, andNice 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.mdxadapters/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-rustandcargo fmt --all -- --check.Run
cargo check --workspace --lockedafter version changes.
**/*.rs: Format Rust code withcargo fmt --all, verify formatting withcargo fmt --all -- --check, and runcargo check --workspace --lockedfor 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.rscrates/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 -- --checkandjust test-rust.
Files:
crates/fabric-cli/src/app.rscrates/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.
Usecanfor possibility and reservemayfor permission; useafterfor temporal order; userefer tofor cross-references; prefer short direct sentences and specific verbs; avoid unnecessarypleasein 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: usefor exampleorsuch asinstead ofe.g.,and so oninstead ofetc.,that isinstead ofi.e.,compared toinstead ofvs., andby,through, orusinginstead ofvia. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Usethatwithout commas for essential clauses, andwhichwith commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such asJune 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space beforea.m.orp.m.; useETandPTfor needed time zones; avoid24/7; and preferfrom 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.mdadapters/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 byjust 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 QualityRun the documentation build before handoff.
The provider and Relay statement is consistent with the adapter README and tests, but the required
just docscheck 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 QualityConfirm the Ruff gate for the injected failure callback.
Ruff reports
ANN202,ANN002,ANN003, andTRY003on 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 QualityRun 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 byjust 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 QualityRun the Codex adapter validation. Focus on
tests/adapters/test_codex_adapter.py, then runjust test-pythonin an environment whereuvandjustare 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 QualityRun the focused E2E test:
uv run pytest -k "test_cli_scaffold"
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
|
/merge |
lbliii
left a comment
There was a problem hiding this comment.
LGTM from a documentation style review — no changes needed.
Overview
This PR removes agent/profile YAML handling and makes complete typed
FabricConfigvalues the only authoring contract. It restores a small Rust/Clap experimentation CLI with built-in presets, maintained examples, and editable Python or Rust scaffolds.RunPlanis 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
FabricConfigthrough a language API; the CLI is for quick harness probes, maintained examples, planning, and diagnostics.Details
run --presetandrun --example ... --variant ...with complete typed configurations. Presets accept narrow--modeland--temperatureoverrides for quick experiments.https://inference-api.nvidia.com/v1with one public credential contract:NVIDIA_API_KEY.example initfor editable Python and Rust applications. Presets, runnable examples, and both scaffold languages share one catalog and one asset tree.Package Changes
The
nemo-fabricexecutable is distributed by the independentnemo-fabric-cliRust crate. Installingnemo-fabric-runtimeprovides 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:
docs/experimentation/cli.mdxfor the experimentation-only intent, installation boundary, preset catalog, and three supported workflows.crates/fabric-core/src/config.rsfor the typed-only input andRunPlanboundary.crates/fabric-cli/src/{app,presets,examples,scaffold}.rsfor preset reuse, the shared example catalog, NVIDIA-backed presets, and editable scaffolds.adapters/{claude,codex}for request-scoped NVIDIA provider translation.python/pyproject.tomlandcrates/fabric-python/Cargo.tomlfor 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
nemo-fabricexperimentation CLI with preset/example cataloging, preset-based plan/doctor/run, andexample initfor editable Python/Rust scaffolds.base_diras the root for resolving relative paths and for plan/run/diagnostic outputs.base_dir-centric.FabricConfig/base_dirworkflow.