feat: define typed adapter contract and publish authoring docs - #186
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:
WalkthroughThis change adds a versioned adapter contract in Python and Rust. It adds typed ChangesTyped adapter contract
Estimated code review effort: 5 (Critical) | ~120 minutes Sequence Diagram(s)sequenceDiagram
participant FabricRuntime
participant LifecycleHost
participant NatAdapter
FabricRuntime->>LifecycleHost: send AgentConfig start payload
LifecycleHost->>NatAdapter: validate typed configuration
NatAdapter->>NatAdapter: translate workflow, tools, models, and MCP servers
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1⚔️ Resolve merge conflicts 💡
🧪 Generate unit tests (beta)
Comment |
|
Fern docs preview: https://nvidia-preview-pull-request-186.docs.buildwithfern.com/nemo/fabric |
There was a problem hiding this comment.
Actionable comments posted: 23
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
schemas/run-plan.schema.json (1)
2552-2557: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winPreserve compatibility with legacy
RunPlanJSON. The Python binding deserializes plans for runtime operations, but older plans omitagent_configand now fail. Do not use an empty default alone because adapters configured withAdapterConfigInput::AgentConfigconsume this field. Backfill legacy plans or define an explicit migration, update the schema, and add a compatibility test.🤖 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 `@schemas/run-plan.schema.json` around lines 2552 - 2557, Make the RunPlan deserialization path accept legacy JSON that omits agent_config while preserving AdapterConfigInput::AgentConfig values, by backfilling the field or applying an explicit migration before runtime use. Update the RunPlan schema’s required fields accordingly and add a compatibility test covering legacy plans and agent_config consumers.crates/fabric-core/src/config.rs (1)
2452-2460: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick winPreserve legacy
RunPlancompatibility without weakening the schema contract.
RunPlanJSON is deserialized at the native Python boundary and by runtime code. Older payloads withoutagent_configtherefore fail. If backward compatibility is required, add a compatibility fallback and a regression test. Do not add bare#[serde(default)]:schemarswould removeagent_configfrom the generatedrequiredlist, and an emptyAgentConfigmay be invalid for an adapter.🤖 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 2452 - 2460, Preserve deserialization of legacy RunPlan payloads that omit agent_config by adding an explicit compatibility fallback for RunPlan, while keeping agent_config required in the generated schema and validating the fallback as needed for the selected adapter. Add a regression test covering deserialization of a payload without agent_config; do not use bare #[serde(default)].schemas/runtime-context.schema.json (1)
4-180: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winDocument the breaking unknown-field change across all exported runtime schemas.
deny_unknown_fieldschanges previously permissive objects to reject unknown properties. Includeschemas/adapter-invocation.schema.json, which also embeds these strict types. Record the breaking change in the pull request andschemas/SCHEMA.md, and add unknown-field regression 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 `@schemas/runtime-context.schema.json` around lines 4 - 180, Document the breaking unknown-field rejection introduced by deny_unknown_fields across all exported runtime schemas: schemas/runtime-context.schema.json:4-180, schemas/artifact-manifest.schema.json:4-36, schemas/run-result.schema.json:29-50, and schemas/runtime-handle.schema.json:44 and schemas/environment-handle.schema.json:35; also inspect schemas/adapter-invocation.schema.json because it embeds these strict types. Record the breaking change in the pull request and schemas/SCHEMA.md, and add regression tests confirming unknown properties are rejected in each affected schema.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@adapter-contract/pyproject.toml`:
- Around line 27-29: The direct Pydantic dependency in
adapter-contract/pyproject.toml lines 27-29 requires documented selection
rationale. Update adapter-contract/pypi.md lines 8-14 to record the functional
need, viable alternatives considered, why Pydantic is the narrowest fit, and any
unresolved licensing question; make no direct change to pyproject.toml, which is
addressed by the documentation.
- Around line 27-29: The Pydantic dependency floor is too low for field-level
conditional omission. In adapter-contract/pyproject.toml, raise the requirement
to pydantic>=2.12,<3 and regenerate adapter-contract/uv.lock; in
adapter-contract/src/nemo_fabric_adapter_contract/models.py, add a regression
test covering AgentConfig().to_mapping() and asserting empty and absent fields
are omitted.
In `@crates/fabric-core/src/agent_config.rs`:
- Around line 292-298: Update the runtime construction in the agent
configuration projection to emit Some only when the projected max_turns is
present or runtime extensions are non-empty, rather than using
accepts(AdapterConfigField::MaxTurns) alone; preserve the existing projected
values in AgentRuntimeConfig and return None when both are empty.
- Around line 388-392: Update the harness construction in project_agent_config
to emit Some(AgentHarnessConfig) only when harness settings or extensions are
non-empty; otherwise set harness to None. Preserve existing cloning and ensure
configurations with harness settings continue producing the current harness
payload.
In `@crates/fabric-core/src/agent_execution.rs`:
- Around line 123-134: Update AgentRunResult::validate to return a typed,
matchable error instead of &'static str, using a small dedicated error type or
the existing FabricError while preserving the current validation rules. Expand
the associated tests to cover Succeeded with an error and both Cancelled
combinations, in addition to the existing cases, and assert the typed failure
variants.
- Around line 14-121: Validate the deserialized AdapterLifecycleResponse before
adapter_output_status consumes it, routing the normalized result through
AgentRunResult or equivalent runtime validation. Enforce nonblank
AgentRunError.code and message and nonnegative AgentUsage.cost_usd, since
schemars annotations are not applied by Serde. Ensure successful responses still
validate their output before being consumed.
In `@crates/fabric-core/src/config.rs`:
- Around line 1949-1989: Update validate_agent_config_extensions to compile each
available extension schema once and cache the resulting validators by
AdapterExtensionPoint, then pass that cache into validate_extension_block.
Replace per-call schema cloning and jsonschema::validator_for compilation with
validator reuse while preserving the existing fail-closed error when a point is
absent from extension_schemas.
- Around line 1435-1436: Reorder validation so
validate_adapter_config_compatibility runs before validate_tool_definitions in
the relevant config validation flow, allowing unsupported tools.definitions
adapters to return the AdapterCompatibility reason before the schema check fails
closed. Apply the same ordering change in start_runtime, while preserving
validate_agent_config_extensions in its existing relative position unless
required by the surrounding flow.
- Around line 1798-1842: Update validate_tool_definitions to remove or exclude
keys declared in ToolDefinitionConfig.extensions from each serialized definition
before applying resolved.descriptor.tool_definition_schema, while preserving
validation of all non-extension fields. Ensure extension keys remain available
for the existing extension_schemas.tool_definition validation, and add a
regression test covering both the base tool-definition schema and extension
schema paths.
In `@docs/sdk/python.mdx`:
- Around line 256-258: Update the tool-definition guidance to state that the
selected descriptor and adapter must support the definition before use. In
docs/sdk/python.mdx lines 256-258,
skills/integrations/consumer/nemo-fabric-integrate/SKILL.md line 142, and
skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
line 46, apply this prerequisite consistently beside or in the helper guidance
for add_tool_definition(...).
In `@external/nat/fabric-adapter.json`:
- Around line 46-70: The tool_definition_schema currently rejects valid
ToolDefinitionConfig objects containing extensions because additionalProperties
is false. Update validate_tool_definitions or the tool_definition_schema to
permit extensions while preserving the existing separate extension-schema
validation.
In `@python/src/nemo_fabric/models.py`:
- Around line 797-808: Update remove_tool_definition so self.tools is collapsed
to None only when its definitions are empty, enabled is None, blocked is empty,
and model_extra is also empty. Preserve ToolsConfig instances containing
adapter-owned extension fields by adding the model_extra check to the existing
collapse condition.
In `@python/src/nemo_fabric/types.py`:
- Line 567: Remove the quotes from the return annotations on
_ToolDefinitionConfig.from_mapping and the three other functions at the
referenced locations, using the unquoted class/type names consistently with
_ToolsConfig.block and satisfying Ruff UP037.
- Around line 1080-1099: Add a public remove_tool_definition method to
_FabricConfigSnapshot alongside add_tool_definition, using the existing
_ToolsConfig.remove_definition operation and matching FabricConfig’s signature,
return type, and fluent self-return behavior. Preserve the existing
tool-definition removal semantics and method style used by the add/remove MCP
server and skill path pairs.
In `@schemas/adapter-descriptor.schema.json`:
- Around line 273-280: Constrain the keys of Rust’s
AdapterDescriptor.extension_schemas BTreeMap using the established
#[schemars(schema_with = ...)] approach from EnvironmentConfig.env, so generated
schemas reject unknown extension points. Regenerate schemas with the specified
generate-schemas example; update schemas/adapter-descriptor.schema.json:273-280
and confirm schemas/run-plan.schema.json:139-146 changes identically through
regeneration, with snapshot tests covering both copies.
In `@schemas/adapter-invocation.schema.json`:
- Line 171: Update the schema around RuntimeContext and RunRequest to preserve
additive compatibility: either remove strict additional-property rejection from
RuntimeContext, or version fabric.adapter/v1alpha1 before adding fields; if
strict validation is intended, also set RunRequest’s additionalProperties to
false so both top-level and context validation are consistent.
In `@schemas/agent-config.schema.json`:
- Around line 373-380: The southbound payload roots lack a self-describing
contract version. In schemas/agent-config.schema.json:373-380, add
contract_version to the AgentConfig root and populate it from
ADAPTER_CONTRACT_VERSION, then regenerate the snapshot; in
schemas/agent-run-request.schema.json:1-25, add the same contract_version marker
to AgentRunRequest so both payloads expose the negotiated contract version.
- Around line 88-146: Add a projection test covering
capability_plan.native.mcp_servers with one server for each fabric_managed
exposure value, asserting both are handled correctly and fabric-managed servers
are excluded from AgentConfig.mcp.servers. Reuse the existing projection test
setup and verify the resulting server collection rather than changing the
AgentMcpServerConfig schema.
In `@schemas/artifact-manifest.schema.json`:
- Line 4: Resolve the strict-schema mismatch by either documenting the breaking
rejection of unknown fields across the SDK, adapter contract, stored-payload
guidance, and release notes, or by restoring compatible extension fields. In
particular, align Python ArtifactRef metadata and nested
ArtifactManifest/EnvironmentHandle values used by RunResult and RuntimeHandle
with the Rust types and schemas; update the relevant schema definitions and
serialization behavior consistently.
In `@schemas/run-plan.schema.json`:
- Around line 2404-2410: Define one authoritative source for normalized tool
definitions and ensure config.tools.definitions,
capability_plan.tools.definitions, and agent_config.tools.definitions are
derived consistently from it. Update the projection logic around
ToolDefinitionConfig and AgentToolDefinition to preserve identical filtering,
including enabled and blocked cases, then add a test verifying all three
serialized views agree for such a configuration.
In `@schemas/SCHEMA.md`:
- Around line 32-43: The adapter-descriptor documentation must state that
non-empty tools.definitions requires a resolved tool_definition_schema;
otherwise validation rejects the configuration. Add this fail-closed rule
immediately after the existing settings and workflow requirements in the
adapter-descriptor description.
In `@tests/adapter_contract/test_agent_config.py`:
- Around line 111-118: Make both contract tests resolve schema files from the
repository root instead of the process working directory. In
tests/adapter_contract/test_agent_config.py lines 111-118, define ROOT from
__file__ and read the agent-config schema through it; apply the same ROOT-based
resolution to the filename read in
tests/adapter_contract/test_agent_execution.py lines 87-97.
In `@tests/adapter_contract/test_agent_execution.py`:
- Around line 87-97: Replace the manual model/filename loop in
test_agent_execution_models_track_rust_schema_root_fields with
pytest.mark.parametrize, defining each AgentRunRequest, AgentRunResult, and
RuntimeContext schema pair as a separate case. Preserve both existing assertions
and leave the Path lookup unchanged, since its working-directory issue is
covered separately.
---
Outside diff comments:
In `@crates/fabric-core/src/config.rs`:
- Around line 2452-2460: Preserve deserialization of legacy RunPlan payloads
that omit agent_config by adding an explicit compatibility fallback for RunPlan,
while keeping agent_config required in the generated schema and validating the
fallback as needed for the selected adapter. Add a regression test covering
deserialization of a payload without agent_config; do not use bare
#[serde(default)].
In `@schemas/run-plan.schema.json`:
- Around line 2552-2557: Make the RunPlan deserialization path accept legacy
JSON that omits agent_config while preserving AdapterConfigInput::AgentConfig
values, by backfilling the field or applying an explicit migration before
runtime use. Update the RunPlan schema’s required fields accordingly and add a
compatibility test covering legacy plans and agent_config consumers.
In `@schemas/runtime-context.schema.json`:
- Around line 4-180: Document the breaking unknown-field rejection introduced by
deny_unknown_fields across all exported runtime schemas:
schemas/runtime-context.schema.json:4-180,
schemas/artifact-manifest.schema.json:4-36,
schemas/run-result.schema.json:29-50, and schemas/runtime-handle.schema.json:44
and schemas/environment-handle.schema.json:35; also inspect
schemas/adapter-invocation.schema.json because it embeds these strict types.
Record the breaking change in the pull request and schemas/SCHEMA.md, and add
regression tests confirming unknown properties are rejected in each affected
schema.
🪄 Autofix
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: 113466c8-40ab-45f8-a4ef-c5b0d3e51cf1
⛔ Files ignored due to path filters (2)
adapter-contract/uv.lockis excluded by!**/*.lockuv.lockis excluded by!**/*.lock
📒 Files selected for processing (148)
adapter-contract/LICENSEadapter-contract/pypi.mdadapter-contract/pyproject.tomladapter-contract/src/nemo_fabric_adapter_contract/__init__.pyadapter-contract/src/nemo_fabric_adapter_contract/models.pyadapters/common/README.mdadapters/common/src/nemo_fabric_adapters/common/lifecycle.pycrates/fabric-core/src/adapter_contract.rscrates/fabric-core/src/agent_config.rscrates/fabric-core/src/agent_execution.rscrates/fabric-core/src/config.rscrates/fabric-core/src/error.rscrates/fabric-core/src/lib.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/schema.rsdocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/constant-adapter-contract-version.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/enum-adapterextensionpoint.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentharnessconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentinstructionconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentinstructionsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmcpconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmcpserverconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmodelconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentruntimeconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentskillconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agenttooldefinition.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agenttoolsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentworkflowconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentworkflowentrypointconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/enum-agentrunstatus.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentartifact.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentrunerror.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentrunrequest.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentrunresult.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentusage.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfiginput.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdxdocs/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-controllocation.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-instructionmode.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-relayatofmode.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofsinkconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamfieldnamepolicy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamtransport.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-run-plan-from-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterrequirements.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetryprovidersupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetrysupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityroute.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilitytargetplan.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-instructionconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-instructionsconfig.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-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-tooldefinitionconfig.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/config/struct-workflowconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-workflowentrypointconfig.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/schema/enum-schemaname.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdxdocs/sdk/python.mdxexternal/nat/README.mdexternal/nat/examples/calculator.pyexternal/nat/examples/email_phishing.pyexternal/nat/fabric-adapter.jsonexternal/nat/src/nemo_fabric_adapters/nat/adapter.pyjustfilepyproject.tomlpython/src/nemo_fabric/__init__.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pyschemas/SCHEMA.mdschemas/adapter-descriptor.schema.jsonschemas/adapter-invocation.schema.jsonschemas/agent-config.schema.jsonschemas/agent-run-request.schema.jsonschemas/agent-run-result.schema.jsonschemas/agent.schema.jsonschemas/artifact-manifest.schema.jsonschemas/environment-handle.schema.jsonschemas/run-plan.schema.jsonschemas/run-result.schema.jsonschemas/runtime-context.schema.jsonschemas/runtime-handle.schema.jsonskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdskills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.mdtests/adapter_contract/test_agent_config.pytests/adapter_contract/test_agent_execution.pytests/adapters/test_adapter_package_metadata.pytests/adapters/test_adapters_common_lifecycle.pytests/adapters/test_external_nat_adapter.pytests/python/test_sdk_contract.py
There was a problem hiding this comment.
Actionable comments posted: 9
🤖 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/adapter-contract/custom-agents.md`:
- Around line 53-60: Precede every listed block element with a complete-sentence
lead-in: in docs/adapter-contract/custom-agents.md lines 53-60 introduce the
factory-intent YAML, lines 66-78 introduce both TOML and YAML examples, lines
83-96 introduce both Python and YAML examples, and lines 98-105 replace “The
shared adapter:” with a complete sentence; introduce the lifecycle table in
docs/adapter-contract/execution.md lines 13-23, the AgentConfig table in
docs/adapter-contract/normalized-configuration.md lines 30-42, the
resolution-stage list in docs/adapter-contract/registration-and-discovery.md
lines 58-64, and the result-field table and failure-class list in
docs/adapter-contract/results.md lines 13-22 and 33-40.
- Line 115: Replace “may” with “can” for possibility statements at
docs/adapter-contract/custom-agents.md:115 (“may be”),
docs/adapter-contract/execution.md:21 (“may expose”) and :31 (“may make”),
docs/adapter-contract/normalized-configuration.md:99 (“may be present”), and
docs/adapter-contract/results.md:18 (“may be `null`”) and :36 (“may
invalidate”); make no other wording changes.
- Around line 13-17: Update product terminology across all specified
documentation sites: in each document, use “NVIDIA NeMo Fabric” for the first
product mention and “NeMo Fabric” thereafter, replacing standalone prose
references such as “Fabric runtime,” “Fabric-defined,” “Fabric owns,” “Fabric
core,” “Fabric-provided,” “Fabric lifecycle,” and “Fabric-owned.” Apply these
changes in docs/adapter-contract/custom-agents.md (13-17, 44-50, 62-64,
103-108), execution.md (8-20), normalized-configuration.md (8-18, 60-63),
registration-and-discovery.md (33-38), and results.md (8-11, 33-44, 46-57,
70-80); preserve code identifiers such as FabricConfig unchanged.
In `@docs/adapter-contract/execution.md`:
- Around line 15-23: Clarify the lifecycle table’s relationship to the Python
host binding: document that lifecycle.serve passes payload["config"] to start,
carries RuntimeContext and runtime_id in the protocol envelope, and invokes
stop() without a runtime_id argument. Alternatively, explicitly label the table
as an abstract consumer API and add the corresponding host-binding mapping.
In `@docs/adapter-contract/README.md`:
- Around line 16-20: Update the technical-documentation headers to title case:
in docs/adapter-contract/README.md lines 16-20, change the table headers to
“Northbound Consumer Type” and “Southbound Adapter Type”; in skills/README.md
lines 71-73, change “Use it when” to “Use It When”.
- Around line 69-71: Precede every specified list or code block with a complete
lead-in sentence: docs/adapter-contract/README.md lines 69-71 (Continue Reading
list), docs/adapter-contract/adapter-descriptor.md lines 59-61 (JSON example),
docs/adapter-contract/conformance.md lines 13-15 (Required Profile list) and
45-47 (Minimum Test Matrix list), and
skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md lines 27-29
(Establish the Boundary list), 110-112 (lifecycle code block; replace the
existing fragment), and 150-152 (Validate Before Handoff list). Preserve the
existing content while ensuring each introduction is a grammatically complete
sentence.
- Line 6: Use the official product name “NVIDIA NeMo Fabric” at the first
user-facing mention across all affected files: update the H1 in
docs/adapter-contract/README.md (line 6); add it to the H1 or opening paragraph
in docs/adapter-contract/adapter-descriptor.md (line 6) and
docs/adapter-contract/conformance.md (line 6); and update the description and H1
in skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md (lines 3-6)
plus the display name, description, and independent prompt in
skills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yaml (lines
5-7). Preserve the exact capitalization.
In `@docs/adapter-contract/registration-and-discovery.md`:
- Around line 70-81: Update the “Verify Discovery” example to define a minimal
FabricConfig as config and establish project_root before calling Fabric().plan.
Access the returned mapping with plan["adapter_descriptor"]["path"] and
plan["adapter_descriptor"]["descriptor"]["adapter_id"] instead of attribute
chaining.
- Around line 87-88: Rename all eight pages under docs/adapter-contract/ from
.md to .mdx, including docs/adapter-contract/registration-and-discovery.md, then
update every internal adapter-contract link to use the .mdx filenames. Also
change all eight corresponding paths in docs/index.yml (the sibling site at
docs/index.yml lines 28-42) to .mdx; both listed sites require updates.
🪄 Autofix
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: 113466c8-40ab-45f8-a4ef-c5b0d3e51cf1
📒 Files selected for processing (13)
adapter-contract/pypi.mddocs/adapter-contract/README.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/execution.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/results.mddocs/index.ymlskills/README.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mdskills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yaml
📜 Review details
⚠️ CI failures not shown inline (3)
GitHub Actions: Fern Docs / Preview docs: Clarify adapter contract migration path
Conclusion: failure
##[group]Run bail() {
�[36;1mbail() {�[0m
�[36;1m printf '::error::install-action: %s\n' "$*"�[0m
GitHub Actions: Fern Docs / 0_Preview docs.txt: Clarify adapter contract migration path
Conclusion: failure
##[group]Run bail() {
�[36;1mbail() {�[0m
�[36;1m printf '::error::install-action: %s\n' "$*"�[0m
GitHub Actions: Fern Docs / Preview docs: Clarify adapter contract migration path
Conclusion: failure
##[group]Run just docs
�[36;1mjust docs�[0m
shell: /usr/bin/bash -e {0}
env:
UV_PYTHON_INSTALL_DIR: /home/runner/work/_temp/uv-python-dir
UV_CACHE_DIR: /home/runner/work/_temp/setup-uv-cache
CARGO_INCREMENTAL: 0
CARGO_PROFILE_DEV_DEBUG: 0
CARGO_TERM_COLOR: always
RUST_BACKTRACE: short
RUSTFLAGS: -D warnings
CARGO_UNSTABLE_SPARSE_REGISTRY: true
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
FERN_***REDACTED_SECRET_ASSIGNMENT***
##[endgroup]
Using CPython 3.12.3 interpreter at: /usr/bin/python3
Creating virtual environment at: .venv
Resolved 194 packages in 3ms
Building nemo-fabric-adapter-contract @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout/adapter-contract
Building nemo-fabric-adapters-claude @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout/adapters/claude
Building nemo-fabric-adapters-codex @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout/adapters/codex
Building nemo-fabric-adapters-common @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout/adapters/common
Building nemo-fabric-adapters-deepagents @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout/adapters/deepagents
Building nemo-fabric-adapters-hermes @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout/adapters/hermes
Building nemo-fabric-runtime @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout/python
Building nemo-fabric @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout
Downloading pydantic-core (2.0MiB)
Downloading jedi (4.7MiB)
Downloading zstandard (5.3MiB)
Downloading openai (1.1MiB)
Downloading pygments (1.2MiB)
Downloading cryptography (4.3MiB)
Downloading tiktoken (1.1MiB)
Downloading virtualenv (5.3MiB)
Downloading nemo-relay (8.9MiB)
Downloaded tiktoken
Downloaded pydantic-core
Downloaded zstandard
Downloaded virtualenv
Downloaded nemo-relay
Downloaded pygments
Downloaded cryp...
🧰 Additional context used
📓 Path-based instructions (20)
**/*.{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:
skills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yamldocs/index.yml
**/*
📄 CodeRabbit inference engine (.agents/skills/karpathy-guidelines/SKILL.md)
**/*: Before implementing, explicitly state assumptions, surface ambiguity and tradeoffs, present multiple interpretations when relevant, and ask for clarification rather than silently deciding or proceeding when requirements are unclear.
Prefer the minimum code needed to solve the requested problem: avoid speculative features, unnecessary abstractions, unrequested flexibility, and handling of impossible scenarios; simplify overcomplicated solutions.
When editing existing code, make surgical changes only: do not modify unrelated code, comments, formatting, or pre-existing dead code; match the existing style, and remove only unused imports, variables, or functions introduced by your changes.
Define verifiable success criteria for each task, such as writing regression tests for bugs and invalid-input tests for validation, then verify the implementation against those criteria. For multi-step work, state a brief plan with a verification check for each step.
**/*: Always spellNVIDIAin all caps; do not useNvidia,nvidia,nVidia,nVIDIA, orNV.
Usean NVIDIAbefore a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol afterNVIDIAwhen referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names withNVIDIAon first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...
Files:
skills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yamldocs/index.ymldocs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/results.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/adapter-descriptor.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/README.mddocs/adapter-contract/execution.mdadapter-contract/pypi.mdskills/README.md
**/*.{yml,yaml,toml,lock}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For CI or packaging changes, use
maintain-ciormaintain-packaging, then run recipes and checks whose behavior changed.
Files:
skills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yamldocs/index.yml
skills/integrations/harness/**
📄 CodeRabbit inference engine (AGENTS.md)
Future public harness adapter-authoring skills belong under
skills/integrations/harness/; repository-internal adapter maintenance belongs in.agents/skills/.
Files:
skills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yamlskills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
**/*.{toml,yaml,yml,sh,bash}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
TOML, YAML, and shell files must use the specified
#SPDX copyright and Apache-2.0 license headers.
Files:
skills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yamldocs/index.yml
{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/index.ymldocs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/results.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/README.mddocs/adapter-contract/execution.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:
docs/index.yml
{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/index.ymldocs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/results.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/README.mddocs/adapter-contract/execution.md
docs/**/*.{md,mdx,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Run
just docswhen the documentation site changes.Update user-facing Fern documentation, including
docs/index.yml, when public behavior, the package, examples, or supported bindings change.
Files:
docs/index.ymldocs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/results.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/README.mddocs/adapter-contract/execution.md
**/*.{md,mdx,yml,py,rs,sh}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Keep documentation aligned with current NeMo Fabric behavior, repository layout, entry points, commands, package names, APIs, bindings, and support claims.
Files:
docs/index.ymldocs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/results.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/adapter-descriptor.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/README.mddocs/adapter-contract/execution.mdadapter-contract/pypi.mdskills/README.md
{docs/**,README.md,AGENTS.md}
⚙️ CodeRabbit configuration file
{docs/**,README.md,AGENTS.md}: Review documentation for technical accuracy against the current API, command correctness, and consistency with generated schemas.
For links between files under docs/, require paths relative to the source file with the target file's .mdx extension so they work in both Fern builds and repository browsers. Flag Fern site-root links such as NeMo Fabric overview; use the repository-relative equivalent, such as NeMo Fabric overview.
Files:
docs/index.ymldocs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/results.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/README.mddocs/adapter-contract/execution.md
**/*.{md,rst}
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Update documentation and examples in the same branch as the public API change.
Files:
docs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/results.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/adapter-descriptor.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/README.mddocs/adapter-contract/execution.mdadapter-contract/pypi.mdskills/README.md
**/*.{md,mdx,rst}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/assets/nvidia-style-guide.md)
**/*.{md,mdx,rst}: For NeMo Fabric documentation, verify technical claims against the current repository, public API, or documented command before reviewing style.
Always 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/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/results.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/adapter-descriptor.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/README.mddocs/adapter-contract/execution.mdadapter-contract/pypi.mdskills/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:
docs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/results.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/adapter-descriptor.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/README.mddocs/adapter-contract/execution.mdadapter-contract/pypi.mdskills/README.md
**/*.{md,mdx}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
**/*.{md,mdx}: Use the full product nameNVIDIA NeMo Fabricon first use, typically in the title and H1; useNeMo Fabricthereafter. Usefabricalone only for the CLI tool and surround it with backticks.
Treat incorrect or stale commands, package names, paths, APIs, support claims, procedures, examples, terminology, or public behavior documentation as blocking issues.
CapitalizeNVIDIAcorrectly and format code, commands, paths, and filenames as inline code where needed.
Use title case for technical-documentation headings.
Introduce code blocks, tables, and lists with complete lead-in sentences; ensure examples match current APIs and build commands.
Use descriptive anchor text, avoid raw URLs and generic labels such ashere, and use repository-relative.mdxpaths for links withindocs/.
Prefer active voice, present tense, short sentences, plain English, consistent terminology, and imperative, parallel, scannable procedures.
Useafterinstead ofoncewhen expressing temporal sequence, and usecanrather thanmaywhen describing possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
For learning-oriented documentation, do not force trademark symbols unless the source document explicitly requires them.
When reporting documentation-review findings, lead withMust fix,Should fix, andNice to havecategories; include file path, line reference, current problem, rationale, and a concrete rewrite or direction.
Files:
docs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/results.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/adapter-descriptor.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/README.mddocs/adapter-contract/execution.mdadapter-contract/pypi.mdskills/README.md
**/*.md
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update relevant SDK, API reference, adapter, example, integration, and support documentation when the corresponding public surface changes.
Files:
docs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/results.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/adapter-descriptor.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/README.mddocs/adapter-contract/execution.mdadapter-contract/pypi.mdskills/README.md
**/*.{html,md}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
HTML and Markdown files must use the specified SPDX HTML-comment header.
Files:
docs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/results.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/adapter-descriptor.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/README.mddocs/adapter-contract/execution.mdadapter-contract/pypi.mdskills/README.md
{*.md,**/*.md,**/*.mdx,**/*.ipynb}
⚙️ CodeRabbit configuration file
{*.md,**/*.md,**/*.mdx,**/*.ipynb}: Enforce the product name in user-facing prose: use "NVIDIA NeMo Fabric" on first use and "NeMo Fabric" thereafter. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag the lowercasefabricCLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.
Files:
docs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/results.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/adapter-descriptor.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/README.mddocs/adapter-contract/execution.mdadapter-contract/pypi.mdskills/README.md
skills/**/*.md
📄 CodeRabbit inference engine (AGENTS.md)
skills/**/*.md: Consumer skills must depend only on supported public Python SDK contracts and published documentation, and should link to public GitHub documentation and example URLs rather than a docs-site domain so they remain portable when exported.
Keep consumer skills in parity with the SDK guide, model, and type details when the public API changes.
Files:
skills/integrations/harness/nemo-fabric-build-adapter/SKILL.mdskills/README.md
**/SKILL.md
📄 CodeRabbit inference engine (.agents/skills/README.md)
Each maintainer skill file must begin with YAML frontmatter containing at least
nameanddescription.
Files:
skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
⚙️ CodeRabbit configuration file
**/SKILL.md: Do not flag SKILL.md files for missing SPDX headers. Skill entrypoints intentionally start with YAML frontmatter instead.
Verify that every SKILL.md keeps valid YAML frontmatter with at least name and description fields before the Markdown body.
Files:
skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
🪛 LanguageTool
docs/adapter-contract/custom-agents.md
[style] ~115-~115: To form a complete sentence, be sure to include a subject or ‘there’.
Context: ... target framework. workflow.settings may be an explicitly open compatibility obj...
(MISSING_IT_THERE)
🔇 Additional comments (12)
adapter-contract/pypi.md (1)
8-12: LGTM!Also applies to: 24-36
docs/adapter-contract/README.md (2)
8-14: LGTM!Also applies to: 22-68, 79-82
71-77: 🎯 Functional CorrectnessResolve the documentation link-extension conflict.
All three sections use
.mdtargets, while the path instruction requires relative.mdxtargets for documentation underdocs/. The supplied file list uses.md, so verify the repository and Fern source layout before applying a broad replacement.
docs/adapter-contract/README.md#L71-L77: verify the Continue Reading targets.docs/adapter-contract/adapter-descriptor.md#L95-L97: verify the Registration and Discovery and Normalized Configuration targets.docs/adapter-contract/conformance.md#L64-L65: verify the Registration and Discovery and Execution targets.As per path instructions, links between files under
docs/must use relative paths with the target.mdxextension.Source: Path instructions
docs/adapter-contract/adapter-descriptor.md (1)
13-57: LGTM!Also applies to: 62-93
docs/adapter-contract/conformance.md (1)
32-43: LGTM!Also applies to: 48-62
skills/README.md (1)
25-28: LGTM!Also applies to: 38-52
skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md (1)
8-25: LGTM!Also applies to: 38-60, 62-108, 117-149, 153-165
docs/adapter-contract/custom-agents.md (1)
6-11: LGTM!Also applies to: 23-37, 110-114, 116-119
docs/adapter-contract/execution.md (1)
25-30: LGTM!Also applies to: 32-52, 54-69, 71-80, 91-106
docs/adapter-contract/normalized-configuration.md (1)
44-47: LGTM!Also applies to: 49-59, 64-98, 100-100
docs/adapter-contract/registration-and-discovery.md (1)
14-31: LGTM!Also applies to: 40-57, 66-68, 83-85
docs/adapter-contract/results.md (1)
24-31: LGTM!Also applies to: 63-68, 82-85
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 `@crates/fabric-core/src/schema.rs`:
- Around line 105-117: Update the stale schema path reference in the
contribute-adapter skill documentation from
schemas/adapter-descriptor.schema.json to
schemas/adapter-contract/adapter-descriptor.schema.json, matching the
adapter-contract output defined by relative_path.
In `@schemas/adapter-contract/agent-config.schema.json`:
- Around line 209-216: Add explicit maximum constraints matching Rust integer
bounds for AgentRuntimeConfig.max_turns and every AgentUsage token counter in
schemas/adapter-contract/agent-config.schema.json (209-216) and
schemas/adapter-contract/agent-run-result.schema.json (116-141). Apply the same
schemars maximums to corresponding definitions in schemas/run-plan.schema.json
and unbounded relay u32/u64 fields in schemas/agent.schema.json and
schemas/run-plan.schema.json, then regenerate snapshots and add boundary and
overflow schema tests.
In `@schemas/adapter-contract/agent-run-result.schema.json`:
- Around line 158-179: Update the Rust schema-generation logic for
AgentRunResult so a result with AgentRunStatus failed requires a non-null error,
matching the Rust and Pydantic validators. Regenerate the JSON Schema snapshot
and add a regression check rejecting {"status":"failed","output":null}.
- Around line 33-36: Update the AgentArtifact path validation in both the Rust
model and Python adapter-contract model to require a non-empty relative path and
reject any path containing .. components, including absolute paths. Regenerate
the JSON schema from the updated models, and add invalid-path tests covering
/tmp/output, ../output, nested/../output, and the empty string.
🪄 Autofix
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: 0107bd8d-7d30-4016-b959-89db6f07b518
📒 Files selected for processing (18)
crates/fabric-core/src/schema.rsdocs/adapter-contract/README.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/execution.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/results.mddocs/sdk/python.mdxschemas/SCHEMA.mdschemas/adapter-contract/adapter-descriptor.schema.jsonschemas/adapter-contract/agent-config.schema.jsonschemas/adapter-contract/agent-run-request.schema.jsonschemas/adapter-contract/agent-run-result.schema.jsonschemas/adapter-contract/legacy/adapter-invocation.schema.jsonschemas/adapter-contract/runtime-context.schema.jsonskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mdtests/adapter_contract/test_agent_config.pytests/adapter_contract/test_agent_execution.py
📜 Review details
⚠️ CI failures not shown inline (3)
GitHub Actions: Fern Docs / Preview docs: Note descriptor discovery follow-up
Conclusion: failure
##[group]Run just docs
�[36;1mjust docs�[0m
shell: /usr/bin/bash -e {0}
env:
UV_PYTHON_INSTALL_DIR: /home/runner/work/_temp/uv-python-dir
UV_CACHE_DIR: /home/runner/work/_temp/setup-uv-cache
CARGO_INCREMENTAL: 0
CARGO_PROFILE_DEV_DEBUG: 0
CARGO_TERM_COLOR: always
RUST_BACKTRACE: short
RUSTFLAGS: -D warnings
CARGO_UNSTABLE_SPARSE_REGISTRY: true
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
FERN_***REDACTED_SECRET_ASSIGNMENT***
##[endgroup]
Using CPython 3.12.3 interpreter at: /usr/bin/python3
Creating virtual environment at: .venv
Resolved 194 packages in 2ms
Building nemo-fabric-adapters-codex @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout/adapters/codex
Building nemo-fabric-adapters-common @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout/adapters/common
Building nemo-fabric-adapters-deepagents @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout/adapters/deepagents
Building nemo-fabric-adapters-hermes @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout/adapters/hermes
Building nemo-fabric-runtime @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout/python
Building nemo-fabric-adapter-contract @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout/adapter-contract
Building nemo-fabric @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout
Building nemo-fabric-adapters-claude @ file:///home/runner/work/NeMo-Fabric/NeMo-Fabric/source-checkout/adapters/claude
Downloading pydantic-core (2.0MiB)
Downloading jedi (4.7MiB)
Downloading zstandard (5.3MiB)
Downloading cryptography (4.3MiB)
Downloading pygments (1.2MiB)
Downloading openai (1.1MiB)
Downloading tiktoken (1.1MiB)
Downloading virtualenv (5.3MiB)
Downloading nemo-relay (8.9MiB)
Downloaded tiktoken
Downloaded pydantic-core
Downloaded zstandard
Downloaded virtualenv
Downloaded nemo-relay
Downloaded cryptography
Downloaded ...
GitHub Actions: Fern Docs / 0_Preview docs.txt: Note descriptor discovery follow-up
Conclusion: failure
##[group]Run bail() {
�[36;1mbail() {�[0m
�[36;1m printf '::error::install-action: %s\n' "$*"�[0m
GitHub Actions: Fern Docs / Preview docs: Note descriptor discovery follow-up
Conclusion: failure
##[group]Run bail() {
�[36;1mbail() {�[0m
�[36;1m printf '::error::install-action: %s\n' "$*"�[0m
🧰 Additional context used
📓 Path-based instructions (38)
**/*.{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:
schemas/adapter-contract/agent-run-request.schema.jsonschemas/adapter-contract/legacy/adapter-invocation.schema.jsontests/adapter_contract/test_agent_execution.pyschemas/adapter-contract/runtime-context.schema.jsontests/adapter_contract/test_agent_config.pyschemas/adapter-contract/adapter-descriptor.schema.jsonschemas/adapter-contract/agent-run-result.schema.jsoncrates/fabric-core/src/schema.rsschemas/adapter-contract/agent-config.schema.json
**/*
📄 CodeRabbit inference engine (.agents/skills/karpathy-guidelines/SKILL.md)
**/*: Before implementing, explicitly state assumptions, surface ambiguity and tradeoffs, present multiple interpretations when relevant, and ask for clarification rather than silently deciding or proceeding when requirements are unclear.
Prefer the minimum code needed to solve the requested problem: avoid speculative features, unnecessary abstractions, unrequested flexibility, and handling of impossible scenarios; simplify overcomplicated solutions.
When editing existing code, make surgical changes only: do not modify unrelated code, comments, formatting, or pre-existing dead code; match the existing style, and remove only unused imports, variables, or functions introduced by your changes.
Define verifiable success criteria for each task, such as writing regression tests for bugs and invalid-input tests for validation, then verify the implementation against those criteria. For multi-step work, state a brief plan with a verification check for each step.
**/*: Always spellNVIDIAin all caps; do not useNvidia,nvidia,nVidia,nVIDIA, orNV.
Usean NVIDIAbefore a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol afterNVIDIAwhen referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names withNVIDIAon first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...
Files:
schemas/adapter-contract/agent-run-request.schema.jsonschemas/adapter-contract/legacy/adapter-invocation.schema.jsondocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/normalized-configuration.mdtests/adapter_contract/test_agent_execution.pyskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/results.mdschemas/adapter-contract/runtime-context.schema.jsondocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.mdtests/adapter_contract/test_agent_config.pydocs/adapter-contract/README.mdschemas/adapter-contract/adapter-descriptor.schema.jsonschemas/adapter-contract/agent-run-result.schema.jsoncrates/fabric-core/src/schema.rsschemas/SCHEMA.mdschemas/adapter-contract/agent-config.schema.jsondocs/sdk/python.mdx
**/*.{json,jsonschema}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Public contract changes must keep checked-in JSON Schema snapshots synchronized.
Files:
schemas/adapter-contract/agent-run-request.schema.jsonschemas/adapter-contract/legacy/adapter-invocation.schema.jsonschemas/adapter-contract/runtime-context.schema.jsonschemas/adapter-contract/adapter-descriptor.schema.jsonschemas/adapter-contract/agent-run-result.schema.jsonschemas/adapter-contract/agent-config.schema.json
schemas/**/*
⚙️ CodeRabbit configuration file
schemas/**/*: Schemas are generated public contract snapshots. Check that schema diffs correspond to intentional Rust type changes and are covered by core tests.
Files:
schemas/adapter-contract/agent-run-request.schema.jsonschemas/adapter-contract/legacy/adapter-invocation.schema.jsonschemas/adapter-contract/runtime-context.schema.jsonschemas/adapter-contract/adapter-descriptor.schema.jsonschemas/adapter-contract/agent-run-result.schema.jsonschemas/SCHEMA.mdschemas/adapter-contract/agent-config.schema.json
**/*.{md,rst}
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Update documentation and examples in the same branch as the public API change.
Files:
docs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/normalized-configuration.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/results.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/README.mdschemas/SCHEMA.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/adapter-contract/registration-and-discovery.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/results.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/README.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/adapter-contract/registration-and-discovery.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/results.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/README.mddocs/sdk/python.mdx
docs/**/*.{md,mdx,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Run
just docswhen the documentation site changes.Update user-facing Fern documentation, including
docs/index.yml, when public behavior, the package, examples, or supported bindings change.
Files:
docs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/results.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/README.mddocs/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/adapter-contract/registration-and-discovery.mddocs/adapter-contract/normalized-configuration.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/results.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/README.mdschemas/SCHEMA.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:
docs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/normalized-configuration.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/results.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/README.mdschemas/SCHEMA.md
**/*.{md,mdx,yml,py,rs,sh}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Keep documentation aligned with current NeMo Fabric behavior, repository layout, entry points, commands, package names, APIs, bindings, and support claims.
Files:
docs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/normalized-configuration.mdtests/adapter_contract/test_agent_execution.pyskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/results.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.mdtests/adapter_contract/test_agent_config.pydocs/adapter-contract/README.mdcrates/fabric-core/src/schema.rsschemas/SCHEMA.mddocs/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 use, typically in the title and H1; useNeMo Fabricthereafter. Usefabricalone only for the CLI tool and surround it with backticks.
Treat incorrect or stale commands, package names, paths, APIs, support claims, procedures, examples, terminology, or public behavior documentation as blocking issues.
CapitalizeNVIDIAcorrectly and format code, commands, paths, and filenames as inline code where needed.
Use title case for technical-documentation headings.
Introduce code blocks, tables, and lists with complete lead-in sentences; ensure examples match current APIs and build commands.
Use descriptive anchor text, avoid raw URLs and generic labels such ashere, and use repository-relative.mdxpaths for links withindocs/.
Prefer active voice, present tense, short sentences, plain English, consistent terminology, and imperative, parallel, scannable procedures.
Useafterinstead ofoncewhen expressing temporal sequence, and usecanrather thanmaywhen describing possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
For learning-oriented documentation, do not force trademark symbols unless the source document explicitly requires them.
When reporting documentation-review findings, lead withMust fix,Should fix, andNice to havecategories; include file path, line reference, current problem, rationale, and a concrete rewrite or direction.
Files:
docs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/normalized-configuration.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/results.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/README.mdschemas/SCHEMA.mddocs/sdk/python.mdx
**/*.md
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update relevant SDK, API reference, adapter, example, integration, and support documentation when the corresponding public surface changes.
Files:
docs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/normalized-configuration.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/results.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/README.mdschemas/SCHEMA.md
**/*.{html,md}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
HTML and Markdown files must use the specified SPDX HTML-comment header.
Files:
docs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/normalized-configuration.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/results.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/README.mdschemas/SCHEMA.md
{docs/**,README.md,AGENTS.md}
⚙️ CodeRabbit configuration file
{docs/**,README.md,AGENTS.md}: Review documentation for technical accuracy against the current API, command correctness, and consistency with generated schemas.
For links between files under docs/, require paths relative to the source file with the target file's .mdx extension so they work in both Fern builds and repository browsers. Flag Fern site-root links such as NeMo Fabric overview; use the repository-relative equivalent, such as NeMo Fabric overview.
Files:
docs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/results.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/README.mddocs/sdk/python.mdx
{*.md,**/*.md,**/*.mdx,**/*.ipynb}
⚙️ CodeRabbit configuration file
{*.md,**/*.md,**/*.mdx,**/*.ipynb}: Enforce the product name in user-facing prose: use "NVIDIA NeMo Fabric" on first use and "NeMo Fabric" thereafter. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag the lowercasefabricCLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.
Files:
docs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/normalized-configuration.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mddocs/adapter-contract/results.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/README.mdschemas/SCHEMA.mddocs/sdk/python.mdx
**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For native binding changes, run
cargo check -p fabric-python --locked.Use
snake_casefor functions and variables; usePascalCasefor Rust types and Python classes.
Files:
tests/adapter_contract/test_agent_execution.pytests/adapter_contract/test_agent_config.pycrates/fabric-core/src/schema.rs
**/*.{py,pyi}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If Python code or a Python-facing adapter changes, run
just test-python.In Python SDK, adapters, examples, and tests, follow the existing style, use type annotations for public APIs, and keep native binding declarations synchronized with their Rust implementations.
Files:
tests/adapter_contract/test_agent_execution.pytests/adapter_contract/test_agent_config.py
**/*.{rs,py,pyi}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
**/*.{rs,py,pyi}: If public configuration types change, confirm schema snapshot tests injust test-rustpass and review generated schema diffs.
For schema or public contract changes, run both language suites and review changes underschemas/and generated API references.
Files:
tests/adapter_contract/test_agent_execution.pytests/adapter_contract/test_agent_config.pycrates/fabric-core/src/schema.rs
**/*.{py,pyi,rs}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
For Python SDK or PyO3 binding changes, use
python-tests, run focused pytest tests first, thenjust test-python; rebuild withjust build-pythonwhen native code or packaging changes.Public contract changes must keep native Python binding declarations synchronized with their Rust implementations.
Files:
tests/adapter_contract/test_agent_execution.pytests/adapter_contract/test_agent_config.pycrates/fabric-core/src/schema.rs
**/*.{rs,py,toml}
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
When editing version helpers, verify every
nemo-fabric-*workspace package through Cargo metadata and reject a static version inpython/pyproject.toml.
Files:
tests/adapter_contract/test_agent_execution.pytests/adapter_contract/test_agent_config.pycrates/fabric-core/src/schema.rs
**/*.{toml,rs,py}
📄 CodeRabbit inference engine (.agents/skills/update-project-version/SKILL.md)
Avoid blind repository-wide replacement of version-like strings; distinguish package-version references from examples and unrelated dependency versions.
Files:
tests/adapter_contract/test_agent_execution.pytests/adapter_contract/test_agent_config.pycrates/fabric-core/src/schema.rs
tests/**/*.{rs,py}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
When adding functionality, include tests in the corresponding Rust crate or the relevant area under
tests/.
Files:
tests/adapter_contract/test_agent_execution.pytests/adapter_contract/test_agent_config.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 type annotations to test functions.
When mocking a class, useunittest.mock.MagicMockorAsyncMock, using thespecargument when necessary, rather than defining a new class.
Prefix mocked class names withmock, notfake.
Prefer pytest fixtures over helper methods.
If a fixture is needed in multiple test files, define it once inconftest.pyrather than repeating it.
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 returned value is unused or it returns no value.
Avoid defensive programming in tests; access expected values directly so missing data raises a clear failure, such as usingresults["data"]instead ofresults.get("data").
When adapter installation metadata changes, packaging metadata tests must directly assert that the root project depends unconditionally on the exact-versionnemo-fabric-runtimedistribution.
Packaging metadata tests must verify that each root harness extra delegates to the matching version of the leaf adapter'sharnessextra.
Packaging metadata tests must verify that bare leaf dependencies remain adapter-owned and that the rootadapter-testsdependency group installs each leaf through itsharnessextra.
Packaging metadata tests must verify that every leaf providesfull; only adapters importing NeMo Relay Python APIs providerelay, while adapters using an external Relay executable havefullequal toharness.
Files:
tests/adapter_contract/test_agent_execution.pytests/adapter_contract/test_agent_config.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/adapter_contract/test_agent_execution.pytests/adapter_contract/test_agent_config.py
skills/**/*.md
📄 CodeRabbit inference engine (AGENTS.md)
skills/**/*.md: Consumer skills must depend only on supported public Python SDK contracts and published documentation, and should link to public GitHub documentation and example URLs rather than a docs-site domain so they remain portable when exported.
Keep consumer skills in parity with the SDK guide, model, and type details when the public API changes.
Files:
skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
skills/integrations/harness/**
📄 CodeRabbit inference engine (AGENTS.md)
Future public harness adapter-authoring skills belong under
skills/integrations/harness/; repository-internal adapter maintenance belongs in.agents/skills/.
Files:
skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
**/SKILL.md
📄 CodeRabbit inference engine (.agents/skills/README.md)
Each maintainer skill file must begin with YAML frontmatter containing at least
nameanddescription.
Files:
skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
⚙️ CodeRabbit configuration file
**/SKILL.md: Do not flag SKILL.md files for missing SPDX headers. Skill entrypoints intentionally start with YAML frontmatter instead.
Verify that every SKILL.md keeps valid YAML frontmatter with at least name and description fields before the Markdown body.
Files:
skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
**/*.rs
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Implement new runtime or binding behavior in the shared Rust core first.
Files:
crates/fabric-core/src/schema.rs
**/*.{rs,toml}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
For any Rust change, run
just test-rustandcargo fmt --all -- --check.For Rust core, CLI, or shared runtime semantic changes, run Rust formatting and tests, and add Python tests when behavior is exposed through the SDK.
Use Rust stable tooling; format Rust code with
cargo fmt --all, verify formatting withcargo fmt --all -- --check, and compile withcargo check --workspace --locked.
Files:
crates/fabric-core/src/schema.rs
crates/fabric-core/**/*.{rs,py}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
Changes under
crates/fabric-coremust run both the Rust and Python test suites.
Files:
crates/fabric-core/src/schema.rs
**/*.{rs,rmeta}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If Rust code changes, run
cargo fmt --all -- --checkandjust test-rust.
Files:
crates/fabric-core/src/schema.rs
crates/fabric-core/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
If
crates/fabric-corechanges in a way exposed through Python, run both the Rust and Python suites.For Rust API reference changes, update Rust documentation comments under
crates/fabric-core/instead of generated API reference files.
Files:
crates/fabric-core/src/schema.rs
crates/fabric-core/src/**/*.rs
⚙️ CodeRabbit configuration file
crates/fabric-core/src/**/*.rs: Review the Rust core for runtime lifecycle correctness, handle validation, capability routing accuracy, schema stability, and error semantics.
Public API changes should match committed schemas, tests, and documentation.
Files:
crates/fabric-core/src/schema.rs
schemas/SCHEMA.md
📄 CodeRabbit inference engine (AGENTS.md)
Keep the JSON Schema notes current when the public API changes.
Files:
schemas/SCHEMA.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.
**/*.mdx: For documentation site changes, runjust docsto regenerate Python and Rust API references and validate Fern configuration.
MDX files must use the specified JSX-comment SPDX header.
Files:
docs/sdk/python.mdx
docs/sdk/python.mdx
📄 CodeRabbit inference engine (AGENTS.md)
Keep the Python/Rust binding contract current when the public API changes.
Files:
docs/sdk/python.mdx
docs/**/*.mdx
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
docs/**/*.mdx: Use source-relative links with the target.mdxextension for links between files underdocs/; do not use Fern site-root paths.
Use{/* ... */}delimiters for top-of-file MDX SPDX comments, not HTML comment delimiters.
Files:
docs/sdk/python.mdx
🪛 GitHub Actions: Fern Docs / Preview docs
docs/adapter-contract/README.md
[warning] 1-1: Fern skipped the missing redirects check because it could not parse the local docs navigation: unexpected character ! in the Markdown/MDX file. Run fern check --log-level=debug for more details.
🔇 Additional comments (14)
crates/fabric-core/src/schema.rs (5)
12-30: LGTM!Also applies to: 59-63, 82-84
121-127: LGTM!
155-157: LGTM!
195-201: LGTM!
231-231: LGTM!Also applies to: 256-281
tests/adapter_contract/test_agent_config.py (1)
113-115: Resolve the schema path from__file__.
Path("schemas/adapter-contract/agent-config.schema.json")uses the process working directory. The test fails when pytest runs outside the repository root. DefineROOT = Path(__file__).resolve().parents[2]and read the schema throughROOT.tests/adapter_contract/test_agent_execution.py (1)
93-95: Resolve the schema path from__file__.
Path("schemas", "adapter-contract", filename)uses the process working directory. The test fails when pytest runs outside the repository root. DefineROOT = Path(__file__).resolve().parents[2]and read the schema throughROOT.docs/sdk/python.mdx (1)
745-745: LGTM!docs/adapter-contract/README.md (1)
79-80: LGTM!docs/adapter-contract/adapter-descriptor.md (1)
36-36: LGTM!docs/adapter-contract/normalized-configuration.md (1)
45-45: LGTM!docs/adapter-contract/registration-and-discovery.md (1)
12-14: LGTM!docs/adapter-contract/results.md (1)
25-25: LGTM!docs/adapter-contract/execution.md (1)
50-50: LGTM!
There was a problem hiding this comment.
Actionable comments posted: 7
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
crates/fabric-core/src/runtime.rs (1)
183-195: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy liftDefine the persisted-result compatibility policy.
RunResultis persisted and read by Harbor. Rust deserialization rejects future fields inArtifactManifestandArtifactRef, while Python preserves them; the schemas encode strictness withadditionalProperties: false. TreatEnvironmentHandleandRuntimeContextseparately because they are runtime payloads, notRunResultfields. Align the Rust, Python, and schema contracts, and add a future-field fixture or document strict versioning.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@crates/fabric-core/src/runtime.rs` around lines 183 - 195, Define and apply a consistent persisted-result compatibility policy for ArtifactManifest and ArtifactRef across Rust deserialization, Python handling, and generated schemas: either preserve unknown future fields or explicitly enforce versioned strictness, including a fixture or documentation for the chosen behavior. Keep EnvironmentHandle and RuntimeContext out of this policy because they are runtime payloads rather than RunResult fields.
🤖 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 `@adapter-contract/src/nemo_fabric_adapter_contract/models.py`:
- Around line 46-50: Raise the Pydantic minimum version to >=2.12 in both
package manifests: adapter-contract and python. This is required for the
exclude_if fields in
adapter-contract/src/nemo_fabric_adapter_contract/models.py:46-50 and
python/src/nemo_fabric/models.py:107-110 to serialize correctly; no direct model
changes are needed.
In
`@docs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/enum-adapterextensionpoint.mdx`:
- Around line 13-16: Update scripts/docs/generate_rust_library_reference.py to
strip rustdoc collapse labels such as “Show 18 variants” from generated Rust
signatures, ensuring declarations remain valid. Then run just docs to regenerate
all affected reference pages; do not modify generated pages directly.
In `@python/src/nemo_fabric/models.py`:
- Around line 580-585: Update the settings field in ToolDefinitionConfig so
empty dictionaries are excluded during serialization, matching the Rust behavior
and sibling collection fields. Preserve the default_factory for runtime use
while ensuring to_mapping() omits settings when it is empty.
In `@python/src/nemo_fabric/types.py`:
- Around line 612-619: Validate definitions in the surrounding tool-definition
configuration path before the comprehension iterates it, rejecting both empty
and non-empty non-mapping values with the SDK’s standard configuration error.
Preserve the existing mapping coercion behavior and add focused regression tests
covering empty and non-empty non-mapping inputs.
In `@skills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yaml`:
- Around line 5-7: Update the display_name value to use the full product name
“NVIDIA NeMo Fabric” on first use, and update short_description to refer to
“NeMo Fabric adapters” instead of standalone “Fabric adapters.” Leave
default_prompt unchanged.
In `@skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md`:
- Around line 2-6: Update the first user-facing product reference in the
frontmatter description to “NVIDIA NeMo Fabric,” then retain “NeMo Fabric” in
the H1 and subsequent references.
In `@skills/README.md`:
- Around line 50-52: Update the OpenAI Codex installation guidance in the skills
README to retain the project path under .agents/skills while replacing the
global $CODEX_HOME/skills location with ~/.agents/skills. Ensure the documented
global install path reflects Codex’s current user-level skill directory.
---
Outside diff comments:
In `@crates/fabric-core/src/runtime.rs`:
- Around line 183-195: Define and apply a consistent persisted-result
compatibility policy for ArtifactManifest and ArtifactRef across Rust
deserialization, Python handling, and generated schemas: either preserve unknown
future fields or explicitly enforce versioned strictness, including a fixture or
documentation for the chosen behavior. Keep EnvironmentHandle and RuntimeContext
out of this policy because they are runtime payloads rather than RunResult
fields.
🪄 Autofix
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: fd5ed433-9e92-4463-82be-1fe73363f762
⛔ Files ignored due to path filters (2)
adapter-contract/uv.lockis excluded by!**/*.lockuv.lockis excluded by!**/*.lock
📒 Files selected for processing (160)
adapter-contract/LICENSEadapter-contract/pypi.mdadapter-contract/pyproject.tomladapter-contract/src/nemo_fabric_adapter_contract/__init__.pyadapter-contract/src/nemo_fabric_adapter_contract/models.pyadapters/common/README.mdadapters/common/src/nemo_fabric_adapters/common/lifecycle.pycrates/fabric-core/src/adapter_contract.rscrates/fabric-core/src/agent_config.rscrates/fabric-core/src/agent_execution.rscrates/fabric-core/src/config.rscrates/fabric-core/src/error.rscrates/fabric-core/src/lib.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/schema.rsdocs/adapter-contract/README.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/execution.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/results.mddocs/index.ymldocs/reference/api/python-library-reference/index.mddocs/reference/api/python-library-reference/nemo_fabric.models.mddocs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/constant-adapter-contract-version.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/enum-adapterextensionpoint.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentharnessconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentinstructionconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentinstructionsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmcpconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmcpserverconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmodelconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentruntimeconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentskillconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agenttooldefinition.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agenttoolsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentworkflowconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentworkflowentrypointconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/enum-agentrunstatus.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentartifact.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentrunerror.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentrunrequest.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentrunresult.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentusage.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfiginput.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdxdocs/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-controllocation.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-instructionmode.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-relayatofmode.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofsinkconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamfieldnamepolicy.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamtransport.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-run-plan-from-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterrequirements.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetryprovidersupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetrysupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityroute.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilitytargetplan.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-instructionconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-instructionsconfig.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-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-tooldefinitionconfig.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/config/struct-workflowconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-workflowentrypointconfig.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/schema/enum-schemaname.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdxdocs/sdk/python.mdxexternal/nat/README.mdexternal/nat/examples/calculator.pyexternal/nat/examples/email_phishing.pyexternal/nat/fabric-adapter.jsonexternal/nat/src/nemo_fabric_adapters/nat/adapter.pyjustfilepyproject.tomlpython/src/nemo_fabric/__init__.pypython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pyschemas/SCHEMA.mdschemas/adapter-contract/adapter-descriptor.schema.jsonschemas/adapter-contract/agent-config.schema.jsonschemas/adapter-contract/agent-run-request.schema.jsonschemas/adapter-contract/agent-run-result.schema.jsonschemas/adapter-contract/legacy/adapter-invocation.schema.jsonschemas/adapter-contract/runtime-context.schema.jsonschemas/agent.schema.jsonschemas/artifact-manifest.schema.jsonschemas/environment-handle.schema.jsonschemas/run-plan.schema.jsonschemas/run-result.schema.jsonschemas/runtime-handle.schema.jsonskills/README.mdskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdskills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mdskills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yamltests/adapter_contract/test_agent_config.pytests/adapter_contract/test_agent_execution.pytests/adapters/test_adapter_package_metadata.pytests/adapters/test_adapters_common_lifecycle.pytests/adapters/test_external_nat_adapter.pytests/python/test_sdk_contract.py
There was a problem hiding this comment.
Actionable comments posted: 7
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
schemas/SCHEMA.md (1)
46-59: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winShould fix: Add complete lead-in sentences before the schema lists.
The new lists start directly after headings. Add one complete sentence before each list. For example, use “The adapter contract includes the following schemas:” and “The runtime lifecycle uses the following handles:”.
As per coding guidelines, lists must have complete-sentence lead-ins.
Also applies to: 69-72, 78-82, 86-88, 92-95
🤖 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 `@schemas/SCHEMA.md` around lines 46 - 59, Add a complete introductory sentence before each schema or handle list in the affected sections, including the lists around adapter contracts and runtime lifecycle handles. Use context-appropriate lead-ins such as “The adapter contract includes the following schemas:” or “The runtime lifecycle uses the following handles:”, ensuring each list is grammatically attached to its preceding sentence.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@crates/fabric-core/src/agent_execution.rs`:
- Around line 200-208: Update agent_artifact_path_schema to remove the
unsupported lookahead assertions from the published JSON Schema pattern. Replace
them with a validator-portable equivalent that preserves the existing
artifact-path constraints, or omit the pattern and enforce those constraints
during runtime validation.
In `@crates/fabric-core/src/config.rs`:
- Around line 2001-2026: Update the validator cache logic in the surrounding
extension-schema validation flow to use the map entry API instead of
contains_key, insert, and get().expect(). Populate a vacant entry by compiling
the schema and preserve the existing compatibility and descriptor errors, then
obtain the validator directly from the occupied entry without an expect.
In `@crates/fabric-core/src/runtime.rs`:
- Around line 206-208: Add _omit_if_empty = frozenset({"metadata"}) to the
Python ArtifactRef model alongside its existing _json_fields definition, and add
a regression test confirming to_mapping() omits metadata when empty while
preserving populated metadata serialization.
In `@python/src/nemo_fabric/types.py`:
- Around line 1104-1108: Update _FabricConfigSnapshot.remove_tool_definition to
inspect the existing tools section without invoking the _ensure_section-backed
self.tools property; only remove the definition when that section is present,
preserving its absence in to_mapping(). Add a test covering removal from a
snapshot without a tools section and assert the resulting mapping has no "tools"
key.
In `@skills/README.md`:
- Around line 63-66: Replace the one-row Markdown tables in each integration
section, including the row referencing nemo-fabric-integrate, with a short prose
paragraph. Keep the existing skill link and describe when that skill should be
used, preserving the section’s meaning without introducing additional table
structure.
In `@tests/adapter_contract/test_agent_execution.py`:
- Around line 104-105: Extend the schema parity assertions in the relevant test
to require pydantic_schema["additionalProperties"] is False, matching the
existing Rust-schema strictness check. Keep the property-name parity assertion
unchanged so AgentRunRequest, AgentRunResult, and RuntimeContext reject unknown
fields.
In `@tests/python/test_sdk_contract.py`:
- Line 295: Update ToolsConfig.blocked in the model definition to use the same
empty-value exclusion behavior as sibling collection fields, while preserving
its list default. Then update the config serialization assertion to expect only
{"profile": "strict"}, confirming an empty blocked list is omitted.
---
Outside diff comments:
In `@schemas/SCHEMA.md`:
- Around line 46-59: Add a complete introductory sentence before each schema or
handle list in the affected sections, including the lists around adapter
contracts and runtime lifecycle handles. Use context-appropriate lead-ins such
as “The adapter contract includes the following schemas:” or “The runtime
lifecycle uses the following handles:”, ensuring each list is grammatically
attached to its preceding sentence.
🪄 Autofix
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: 5f86c878-8fe5-4270-bc8b-8f651327b446
⛔ Files ignored due to path filters (2)
adapter-contract/uv.lockis excluded by!**/*.lockuv.lockis excluded by!**/*.lock
📒 Files selected for processing (121)
.agents/skills/README.md.agents/skills/contribute-adapter/SKILL.mdadapter-contract/pypi.mdadapter-contract/pyproject.tomladapter-contract/src/nemo_fabric_adapter_contract/models.pycrates/fabric-core/src/adapter_contract.rscrates/fabric-core/src/agent_config.rscrates/fabric-core/src/agent_execution.rscrates/fabric-core/src/config.rscrates/fabric-core/src/lib.rscrates/fabric-core/src/runtime.rscrates/fabric-core/src/schema.rsdocs/adapter-contract/README.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/execution.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/results.mddocs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/enum-adapterextensionpoint.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentharnessconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentinstructionconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentinstructionsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmcpconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmcpserverconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmodelconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentruntimeconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentskillconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agenttooldefinition.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agenttoolsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentworkflowconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentworkflowentrypointconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/enum-agentrunresultvalidationerror.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/enum-agentrunstatus.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentrunresult.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentusage.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfiginput.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-controllocation.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-instructionmode.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.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-run-plan-from-config.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterrequirements.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetryprovidersupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetrysupport.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.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-instructionconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-instructionsconfig.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-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-tooldefinitionconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-workflowconfig.mdxdocs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-workflowentrypointconfig.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-artifactref.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.mdxdocs/sdk/python.mdxpython/src/nemo_fabric/models.pypython/src/nemo_fabric/types.pyschemas/SCHEMA.mdschemas/adapter-contract/adapter-descriptor.schema.jsonschemas/adapter-contract/agent-config.schema.jsonschemas/adapter-contract/agent-run-result.schema.jsonschemas/adapter-contract/legacy/adapter-invocation.schema.jsonschemas/adapter-contract/runtime-context.schema.jsonschemas/agent.schema.jsonschemas/artifact-manifest.schema.jsonschemas/run-plan.schema.jsonschemas/run-result.schema.jsonscripts/docs/generate_rust_library_reference.pyskills/README.mdskills/integrations/consumer/nemo-fabric-integrate/SKILL.mdskills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.mdskills/integrations/harness/nemo-fabric-build-adapter/SKILL.mdskills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yamltests/adapter_contract/test_agent_config.pytests/adapter_contract/test_agent_execution.pytests/adapters/test_adapter_package_metadata.pytests/python/test_sdk_contract.py
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>
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>
a93b98a to
8699d0f
Compare
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 `@docs/adapter-contract/README.md`:
- Around line 1-4: Replace the JSX-style SPDX header in
docs/adapter-contract/README.md lines 1-4 with an equivalent HTML comment. Apply
the same header-only change to docs/adapter-contract/adapter-descriptor.md lines
1-4, conformance.md lines 1-4, custom-agents.md lines 1-4, execution.md lines
1-4, normalized-configuration.md lines 1-4, registration-and-discovery.md lines
1-4, and results.md lines 1-4, preserving the existing copyright and license
text.
🪄 Autofix
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: 57353106-f40a-4bb3-8583-d73e1ae488a3
📒 Files selected for processing (8)
docs/adapter-contract/README.mddocs/adapter-contract/adapter-descriptor.mddocs/adapter-contract/conformance.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/execution.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/results.md
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
- GitHub Check: Preview docs
🧰 Additional context used
📓 Path-based instructions (13)
**/*.{md,rst}
📄 CodeRabbit inference engine (.agents/skills/contribute-api/SKILL.md)
Update documentation and examples in the same branch as the public API change.
Files:
docs/adapter-contract/conformance.mddocs/adapter-contract/README.mddocs/adapter-contract/results.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.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/adapter-contract/conformance.mddocs/adapter-contract/README.mddocs/adapter-contract/results.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.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/adapter-contract/conformance.mddocs/adapter-contract/README.mddocs/adapter-contract/results.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.md
docs/**/*.{md,mdx,yml}
📄 CodeRabbit inference engine (.agents/skills/contribute-docs/SKILL.md)
Run
just docswhen the documentation site changes.Update user-facing Fern documentation, including
docs/index.yml, when public behavior, the package, examples, or supported bindings change.
Files:
docs/adapter-contract/conformance.mddocs/adapter-contract/README.mddocs/adapter-contract/results.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.md
**/*
📄 CodeRabbit inference engine (.agents/skills/karpathy-guidelines/SKILL.md)
**/*: Before implementing, explicitly state assumptions, surface ambiguity and tradeoffs, present multiple interpretations when relevant, and ask for clarification rather than silently deciding or proceeding when requirements are unclear.
Prefer the minimum code needed to solve the requested problem: avoid speculative features, unnecessary abstractions, unrequested flexibility, and handling of impossible scenarios; simplify overcomplicated solutions.
When editing existing code, make surgical changes only: do not modify unrelated code, comments, formatting, or pre-existing dead code; match the existing style, and remove only unused imports, variables, or functions introduced by your changes.
Define verifiable success criteria for each task, such as writing regression tests for bugs and invalid-input tests for validation, then verify the implementation against those criteria. For multi-step work, state a brief plan with a verification check for each step.
**/*: Always spellNVIDIAin all caps; do not useNvidia,nvidia,nVidia,nVIDIA, orNV.
Usean NVIDIAbefore a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol afterNVIDIAwhen referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names withNVIDIAon first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...
Files:
docs/adapter-contract/conformance.mddocs/adapter-contract/README.mddocs/adapter-contract/results.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.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:
docs/adapter-contract/conformance.mddocs/adapter-contract/README.mddocs/adapter-contract/results.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.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:
docs/adapter-contract/conformance.mddocs/adapter-contract/README.mddocs/adapter-contract/results.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.md
**/*.{md,mdx,yml,py,rs,sh}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
Keep documentation aligned with current NeMo Fabric behavior, repository layout, entry points, commands, package names, APIs, bindings, and support claims.
Files:
docs/adapter-contract/conformance.mddocs/adapter-contract/README.mddocs/adapter-contract/results.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.md
**/*.{md,mdx}
📄 CodeRabbit inference engine (.agents/skills/review-doc-style/SKILL.md)
**/*.{md,mdx}: Use the full product nameNVIDIA NeMo Fabricon first use, typically in the title and H1; useNeMo Fabricthereafter. Usefabricalone only for the CLI tool and surround it with backticks.
Treat incorrect or stale commands, package names, paths, APIs, support claims, procedures, examples, terminology, or public behavior documentation as blocking issues.
CapitalizeNVIDIAcorrectly and format code, commands, paths, and filenames as inline code where needed.
Use title case for technical-documentation headings.
Introduce code blocks, tables, and lists with complete lead-in sentences; ensure examples match current APIs and build commands.
Use descriptive anchor text, avoid raw URLs and generic labels such ashere, and use repository-relative.mdxpaths for links withindocs/.
Prefer active voice, present tense, short sentences, plain English, consistent terminology, and imperative, parallel, scannable procedures.
Useafterinstead ofoncewhen expressing temporal sequence, and usecanrather thanmaywhen describing possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
For learning-oriented documentation, do not force trademark symbols unless the source document explicitly requires them.
When reporting documentation-review findings, lead withMust fix,Should fix, andNice to havecategories; include file path, line reference, current problem, rationale, and a concrete rewrite or direction.
Files:
docs/adapter-contract/conformance.mddocs/adapter-contract/README.mddocs/adapter-contract/results.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.md
**/*.md
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update relevant SDK, API reference, adapter, example, integration, and support documentation when the corresponding public surface changes.
Files:
docs/adapter-contract/conformance.mddocs/adapter-contract/README.mddocs/adapter-contract/results.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.md
**/*.{html,md}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
HTML and Markdown files must use the specified SPDX HTML-comment header.
Files:
docs/adapter-contract/conformance.mddocs/adapter-contract/README.mddocs/adapter-contract/results.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.md
{docs/**,README.md,AGENTS.md}
⚙️ CodeRabbit configuration file
{docs/**,README.md,AGENTS.md}: Review documentation for technical accuracy against the current API, command correctness, and consistency with generated schemas.
For links between files under docs/, require paths relative to the source file with the target file's .mdx extension so they work in both Fern builds and repository browsers. Flag Fern site-root links such as NeMo Fabric overview; use the repository-relative equivalent, such as NeMo Fabric overview.
Files:
docs/adapter-contract/conformance.mddocs/adapter-contract/README.mddocs/adapter-contract/results.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.md
{*.md,**/*.md,**/*.mdx,**/*.ipynb}
⚙️ CodeRabbit configuration file
{*.md,**/*.md,**/*.mdx,**/*.ipynb}: Enforce the product name in user-facing prose: use "NVIDIA NeMo Fabric" on first use and "NeMo Fabric" thereafter. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag the lowercasefabricCLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.
Files:
docs/adapter-contract/conformance.mddocs/adapter-contract/README.mddocs/adapter-contract/results.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.md
🧠 Learnings (1)
📚 Learning: 2026-08-07T07:15:59.993Z
Learnt from: AnuradhaKaruppiah
Repo: NVIDIA/NeMo-Fabric PR: 186
File: docs/adapter-contract/registration-and-discovery.md:103-104
Timestamp: 2026-08-07T07:15:59.993Z
Learning: Keep documentation files under docs/adapter-contract/ in portable Markdown (.md), not MDX. GitHub and the public authoring skill consume these files directly, and the NVIDIA NeMo Fabric documentation pipeline accepts them without conversion; do not flag the lack of MDX conversion for these files.
Applied to files:
docs/adapter-contract/conformance.mddocs/adapter-contract/README.mddocs/adapter-contract/results.mddocs/adapter-contract/registration-and-discovery.mddocs/adapter-contract/custom-agents.mddocs/adapter-contract/normalized-configuration.mddocs/adapter-contract/execution.mddocs/adapter-contract/adapter-descriptor.md
🪛 LanguageTool
docs/adapter-contract/custom-agents.md
[style] ~126-~126: To form a complete sentence, be sure to include a subject or ‘there’.
Context: ... target framework. workflow.settings can be an explicitly open compatibility obj...
(MISSING_IT_THERE)
🪛 markdownlint-cli2 (0.23.2)
docs/adapter-contract/conformance.md
[warning] 1-1: First line in a file should be a top-level heading
(MD041, first-line-heading, first-line-h1)
docs/adapter-contract/README.md
[warning] 1-1: First line in a file should be a top-level heading
(MD041, first-line-heading, first-line-h1)
docs/adapter-contract/results.md
[warning] 1-1: First line in a file should be a top-level heading
(MD041, first-line-heading, first-line-h1)
docs/adapter-contract/registration-and-discovery.md
[warning] 1-1: First line in a file should be a top-level heading
(MD041, first-line-heading, first-line-h1)
docs/adapter-contract/custom-agents.md
[warning] 1-1: First line in a file should be a top-level heading
(MD041, first-line-heading, first-line-h1)
docs/adapter-contract/normalized-configuration.md
[warning] 1-1: First line in a file should be a top-level heading
(MD041, first-line-heading, first-line-h1)
docs/adapter-contract/execution.md
[warning] 1-1: First line in a file should be a top-level heading
(MD041, first-line-heading, first-line-h1)
docs/adapter-contract/adapter-descriptor.md
[warning] 1-1: First line in a file should be a top-level heading
(MD041, first-line-heading, first-line-h1)
🔇 Additional comments (8)
docs/adapter-contract/README.md (1)
6-85: LGTM!docs/adapter-contract/adapter-descriptor.md (1)
6-100: LGTM!docs/adapter-contract/conformance.md (1)
6-70: LGTM!docs/adapter-contract/custom-agents.md (1)
6-130: LGTM!docs/adapter-contract/execution.md (1)
6-115: LGTM!docs/adapter-contract/normalized-configuration.md (1)
6-103: LGTM!docs/adapter-contract/registration-and-discovery.md (1)
6-105: LGTM!docs/adapter-contract/results.md (1)
6-91: LGTM!
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
AjayThorve
left a comment
There was a problem hiding this comment.
Overall looks good, left some comments
zhongxuanwang-nv
left a comment
There was a problem hiding this comment.
Thanks Anuradha! Some nitty non-code related things for now! :)
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
|
/merge |
Overview
This completes the typed adapter-contract implementation and maintained publication work:
AgentConfig,AgentRunRequest,AgentRunResult, and runtime-context contracts in Rust, with matching Pydantic models and published JSON schemas.FabricConfiginto the adapter-facingAgentConfig, including named tool and function-group definitions, descriptor-declared extensions, and an explicit adapter config-input mode.FabricConfigboundary unless they opt intoAgentConfig.AgentConfig.kind: factory,ref: fabric.agent.react).nemo-fabric-build-adapterskill for third-party authors.This makes the adapter-facing boundary small and typed while preserving an incremental adoption path. All first-party adapters will transition to
AgentConfig; once that migration is complete, Fabric can stop sendingFabricConfigor requiring adapters to parse the legacy invocation payload.AgentRunRequestandAgentRunResultare published now but are not yet enforced by the local-host transport. The automated conformance suite remains planned for a follow-up release.Registration and discovery will receive another design pass in a follow-up PR. That work will separate static adapter metadata from dynamically generated workflow-settings schemas and define generation, caching, identity, validation, precedence, and failure semantics.
The adapter-contract package raises its Pydantic floor to 2.12 to use
exclude_ifconsistently. Pydantic is MIT-licensed, and this changes only the declared lower bound; it does not change the resolved dependency or license set in the lockfiles.Where should the reviewer start?
docs/adapter-contract/README.mdfor terminology, minimum surface, versioning, and current status.crates/fabric-core/src/agent_config.rsandcrates/fabric-core/src/agent_execution.rsfor the canonical southbound types.crates/fabric-core/src/config.rsfor normalized tool definitions andFabricConfigtoAgentConfigprojection.adapters/common/src/nemo_fabric_adapters/common/lifecycle.pyfor the opt-in Python host boundary.external/nat/src/nemo_fabric_adapters/nat/adapter.pyfor the first adapter migration.skills/integrations/harness/nemo-fabric-build-adapter/SKILL.mdfor the public third-party workflow.Validation
cargo fmt --all -- --check: passed.just test-rust: passed (91 tests; doc tests passed).just test-python: passed (695 passed, 15 skipped).cargo check -p fabric-python --locked: passed.just lock-python: passed for all projects.attributions-pythonandlicense-diffskipped after their dependency downloads stalled locally. The lock diff introduces no resolved dependency or license changes.crypto.randomUUID; Python documentation tests passed.Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)
Relates to FABRIC-175
Relates to FABRIC-176
Relates to FABRIC-177
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