Skip to content

feat: define typed adapter contract and publish authoring docs - #186

Merged
rapids-bot[bot] merged 16 commits into
NVIDIA:mainfrom
AnuradhaKaruppiah:ak-adapter-contract
Aug 7, 2026
Merged

feat: define typed adapter contract and publish authoring docs#186
rapids-bot[bot] merged 16 commits into
NVIDIA:mainfrom
AnuradhaKaruppiah:ak-adapter-contract

Conversation

@AnuradhaKaruppiah

@AnuradhaKaruppiah AnuradhaKaruppiah commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

Overview

This completes the typed adapter-contract implementation and maintained publication work:

  • Defines canonical southbound AgentConfig, AgentRunRequest, AgentRunResult, and runtime-context contracts in Rust, with matching Pydantic models and published JSON schemas.
  • Projects normalized northbound FabricConfig into the adapter-facing AgentConfig, including named tool and function-group definitions, descriptor-declared extensions, and an explicit adapter config-input mode.
  • Keeps existing adapters on the legacy FabricConfig boundary unless they opt into AgentConfig.
  • Migrates the shared NAT adapter and its calculator and email-phishing examples to typed AgentConfig.
  • Removes the NAT-specific workflow kind. NAT custom agents use shared factory entrypoint semantics (kind: factory, ref: fabric.agent.react).
  • Publishes maintained adapter-contract documentation and the portable nemo-fabric-build-adapter skill for third-party authors.
  • Hardens result and artifact validation, schema bounds, extension handling, tool-definition projection, and Python/Rust parity in response to review.

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 sending FabricConfig or requiring adapters to parse the legacy invocation payload. AgentRunRequest and AgentRunResult are 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_if consistently. 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?

  1. docs/adapter-contract/README.md for terminology, minimum surface, versioning, and current status.
  2. crates/fabric-core/src/agent_config.rs and crates/fabric-core/src/agent_execution.rs for the canonical southbound types.
  3. crates/fabric-core/src/config.rs for normalized tool definitions and FabricConfig to AgentConfig projection.
  4. adapters/common/src/nemo_fabric_adapters/common/lifecycle.py for the opt-in Python host boundary.
  5. external/nat/src/nemo_fabric_adapters/nat/adapter.py for the first adapter migration.
  6. skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md for 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.
  • Focused adapter-contract tests: 108 passed.
  • just lock-python: passed for all projects.
  • Adapter-contract wheel build and package metadata inspection: passed.
  • Documentation and schema generation: passed; generated references are current.
  • Remaining pre-commit hooks passed with attributions-python and license-diff skipped after their dependency downloads stalled locally. The lock diff introduces no resolved dependency or license changes.
  • Full Fern CLI validation is unavailable under the local Node 18 runtime because the pinned CLI requires 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

  • New Features
    • Added a standardized adapter contract for typed configuration, execution requests, results, artifacts, usage, and extensions.
    • Added normalized tool definitions with SDK helpers for managing definitions.
    • Added adapter-specific configuration projection, schema validation, and typed lifecycle configuration.
    • Updated NAT integration to use typed configuration and normalized tools.
    • Added stricter validation for artifact paths, result consistency, and undeclared fields.
  • Documentation
    • Added comprehensive adapter contract, conformance, execution, configuration, discovery, and API reference documentation.
  • Tests
    • Expanded coverage for schemas, lifecycle validation, tool definitions, execution results, and adapter behavior.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

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

Use the following commands to manage reviews:

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

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

This change adds a versioned adapter contract in Python and Rust. It adds typed AgentConfig and execution models, normalized tool definitions, adapter-selected lifecycle payloads, strict schemas, NAT integration, validation, documentation, and packaging updates.

Changes

Typed adapter contract

Layer / File(s) Summary
Contract models and execution types
adapter-contract/..., crates/fabric-core/src/adapter_contract.rs, crates/fabric-core/src/agent_config.rs, crates/fabric-core/src/agent_execution.rs
Adds typed configuration, execution, runtime-context, extension, artifact, usage, and result models with validation and serialization rules.
Configuration projection and validation
crates/fabric-core/src/config.rs, crates/fabric-core/src/runtime.rs, crates/fabric-core/src/schema.rs, schemas/run-plan.schema.json
Adds normalized tool definitions, adapter input selection, AgentConfig projection, schema validation, strict runtime objects, and projected RunPlan.agent_config.
Lifecycle host and Python SDK
adapters/common/..., python/src/nemo_fabric/..., schemas/agent.schema.json
Adds optional typed lifecycle validation and Python SDK helpers for named tool definitions.
NAT AgentConfig migration
external/nat/..., tests/adapters/test_external_nat_adapter.py
Migrates NAT workflow, model, tool, instruction, MCP, and policy translation to typed AgentConfig input.
Schemas, tests, and contract guidance
schemas/adapter-contract/..., tests/adapter_contract/..., docs/adapter-contract/..., skills/...
Adds canonical adapter schemas, contract documentation, conformance guidance, API references, and validation coverage.

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
Loading

Possibly related PRs

  • NVIDIA/NeMo-Fabric#178: Updates NAT MCP server configuration handling, including structured stdio arguments and environment propagation.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 32.49% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title uses the required Conventional Commits format, clearly summarizes the typed adapter-contract change, stays under 72 characters, and has no trailing period.
Description check ✅ Passed The description includes the required overview, reviewer starting points, related issues, contribution confirmations, and validation details.
✨ Finishing Touches 💡 1
⚔️ Resolve merge conflicts 💡
  • Resolve merge conflict in branch ak-adapter-contract
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

@AnuradhaKaruppiah AnuradhaKaruppiah changed the title Define typed adapter contract and migrate NAT adapter Define typed adapter contract and publish authoring docs Aug 7, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 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 win

Preserve compatibility with legacy RunPlan JSON. The Python binding deserializes plans for runtime operations, but older plans omit agent_config and now fail. Do not use an empty default alone because adapters configured with AdapterConfigInput::AgentConfig consume 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 win

Preserve legacy RunPlan compatibility without weakening the schema contract.

RunPlan JSON is deserialized at the native Python boundary and by runtime code. Older payloads without agent_config therefore fail. If backward compatibility is required, add a compatibility fallback and a regression test. Do not add bare #[serde(default)]: schemars would remove agent_config from the generated required list, and an empty AgentConfig may 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 win

Document the breaking unknown-field change across all exported runtime schemas. deny_unknown_fields changes previously permissive objects to reject unknown properties. Include schemas/adapter-invocation.schema.json, which also embeds these strict types. Record the breaking change in the pull request and schemas/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

📥 Commits

Reviewing files that changed from the base of the PR and between 0207e06 and 54f3388.

⛔ Files ignored due to path filters (2)
  • adapter-contract/uv.lock is excluded by !**/*.lock
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (148)
  • adapter-contract/LICENSE
  • adapter-contract/pypi.md
  • adapter-contract/pyproject.toml
  • adapter-contract/src/nemo_fabric_adapter_contract/__init__.py
  • adapter-contract/src/nemo_fabric_adapter_contract/models.py
  • adapters/common/README.md
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • crates/fabric-core/src/adapter_contract.rs
  • crates/fabric-core/src/agent_config.rs
  • crates/fabric-core/src/agent_execution.rs
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/error.rs
  • crates/fabric-core/src/lib.rs
  • crates/fabric-core/src/runtime.rs
  • crates/fabric-core/src/schema.rs
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/constant-adapter-contract-version.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/enum-adapterextensionpoint.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentharnessconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentinstructionconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentinstructionsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmcpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmcpserverconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmodelconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentruntimeconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentskillconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agenttooldefinition.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agenttoolsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentworkflowconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentworkflowentrypointconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/enum-agentrunstatus.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentartifact.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentrunerror.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentrunrequest.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentrunresult.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentusage.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfiginput.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitykind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-controllocation.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-instructionmode.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatifstorageconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofmode.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofsinkconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamfieldnamepolicy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamtransport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayotlptransport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayunsupportedbehavior.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-resolutionstrategy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-telemetryprovider.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-adapter-descriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterrequirements.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetryprovidersupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetrysupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityroute.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilitytargetplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-harnessconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-instructionconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-instructionsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-metadataconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-modelconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatifconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relaycomponentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfigpolicy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayobservabilityconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayotlpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvedadapterdescriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimecapabilities.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimeconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-skillconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryproviderconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-tooldefinitionconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-workflowconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-workflowentrypointconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/enum-doctorstatus.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/fn-doctor-plan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorcheck.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorreport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/fn-version.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdx
  • docs/sdk/python.mdx
  • external/nat/README.md
  • external/nat/examples/calculator.py
  • external/nat/examples/email_phishing.py
  • external/nat/fabric-adapter.json
  • external/nat/src/nemo_fabric_adapters/nat/adapter.py
  • justfile
  • pyproject.toml
  • python/src/nemo_fabric/__init__.py
  • python/src/nemo_fabric/models.py
  • python/src/nemo_fabric/types.py
  • schemas/SCHEMA.md
  • schemas/adapter-descriptor.schema.json
  • schemas/adapter-invocation.schema.json
  • schemas/agent-config.schema.json
  • schemas/agent-run-request.schema.json
  • schemas/agent-run-result.schema.json
  • schemas/agent.schema.json
  • schemas/artifact-manifest.schema.json
  • schemas/environment-handle.schema.json
  • schemas/run-plan.schema.json
  • schemas/run-result.schema.json
  • schemas/runtime-context.schema.json
  • schemas/runtime-handle.schema.json
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
  • tests/adapter_contract/test_agent_config.py
  • tests/adapter_contract/test_agent_execution.py
  • tests/adapters/test_adapter_package_metadata.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_external_nat_adapter.py
  • tests/python/test_sdk_contract.py

Comment thread adapter-contract/pyproject.toml
Comment thread crates/fabric-core/src/agent_config.rs Outdated
Comment thread crates/fabric-core/src/agent_config.rs Outdated
Comment thread crates/fabric-core/src/agent_execution.rs
Comment thread crates/fabric-core/src/agent_execution.rs
Comment thread schemas/artifact-manifest.schema.json
Comment thread schemas/run-plan.schema.json
Comment thread schemas/SCHEMA.md Outdated
Comment thread tests/adapter_contract/test_agent_config.py
Comment thread tests/adapter_contract/test_agent_execution.py Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 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

📥 Commits

Reviewing files that changed from the base of the PR and between 54f3388 and 4ca2694.

📒 Files selected for processing (13)
  • adapter-contract/pypi.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/results.md
  • docs/index.yml
  • skills/README.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • skills/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

View job details

##[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

View job details

##[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

View job details

##[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.yaml
  • docs/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 spell NVIDIA in all caps; do not use Nvidia, nvidia, nVidia, nVIDIA, or NV.
Use an NVIDIA before a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol after NVIDIA when referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names with NVIDIA on first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...

Files:

  • skills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yaml
  • docs/index.yml
  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/adapter-descriptor.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/execution.md
  • adapter-contract/pypi.md
  • skills/README.md
**/*.{yml,yaml,toml,lock}

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

For CI or packaging changes, use maintain-ci or maintain-packaging, then run recipes and checks whose behavior changed.

Files:

  • skills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yaml
  • docs/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.yaml
  • skills/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.yaml
  • docs/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.yml
  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/execution.md
{README.md,docs/index.yml}

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

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

Files:

  • 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.yml
  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/execution.md
docs/**/*.{md,mdx,yml}

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

Run just docs when 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.yml
  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/README.md
  • docs/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.yml
  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/adapter-descriptor.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/execution.md
  • adapter-contract/pypi.md
  • skills/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.yml
  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/README.md
  • docs/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.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/adapter-descriptor.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/execution.md
  • adapter-contract/pypi.md
  • skills/README.md
**/*.{md,mdx,rst}

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

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

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

Files:

  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/adapter-descriptor.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/execution.md
  • adapter-contract/pypi.md
  • skills/README.md
**/*.{md,rst,txt,adoc}

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

**/*.{md,rst,txt,adoc}: For technical documentation, use professional, active, conversational, engaging, precise, and plain-English prose. Prefer active voice, present tense, short sentences, and scannable paragraphs. Avoid casual or imprecise language, swearing, threats, insults, jokes, puns, culture-specific idioms, marketing exaggeration, and unsupported third-party comparisons.
Use can for possibility and reserve may for permission; use after for temporal order; use refer to for cross-references; prefer short direct sentences and specific verbs; avoid unnecessary please in technical documentation.
Prefer active voice when the actor matters. Passive voice is acceptable when the actor is unknown or irrelevant, when the action or result is the focus, or in programmer documentation.
Use natural contractions in conversational technical prose, but do not force them in formal legal copy, API references, or generated text.
Prefer simpler English over Latinisms: use for example or such as instead of e.g., and so on instead of etc., that is instead of i.e., compared to instead of vs., and by, through, or using instead of via. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Use that without commas for essential clauses, and which with commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such as June 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space before a.m. or p.m.; use ET and PT for needed time zones; avoid 24/7; and prefer from 12:30 to 1:00 p.m. for prose ranges.
Format numbers consistently: spell out zero through nine in body text, use numerals for 10 or greater and for technical values, use commas in thousands, do not begin a sentence with a numeral, spell out ordinals, and use numerals consistently within a category wh...

Files:

  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/adapter-descriptor.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/execution.md
  • adapter-contract/pypi.md
  • skills/README.md
**/*.{md,mdx}

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

**/*.{md,mdx}: Use the full product name NVIDIA NeMo Fabric on first use, typically in the title and H1; use NeMo Fabric thereafter. Use fabric alone 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.
Capitalize NVIDIA correctly 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 as here, and use repository-relative .mdx paths for links within docs/.
Prefer active voice, present tense, short sentences, plain English, consistent terminology, and imperative, parallel, scannable procedures.
Use after instead of once when expressing temporal sequence, and use can rather than may when describing possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
For learning-oriented documentation, do not force trademark symbols unless the source document explicitly requires them.
When reporting documentation-review findings, lead with Must fix, Should fix, and Nice to have categories; include file path, line reference, current problem, rationale, and a concrete rewrite or direction.

Files:

  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/adapter-descriptor.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/execution.md
  • adapter-contract/pypi.md
  • skills/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.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/adapter-descriptor.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/execution.md
  • adapter-contract/pypi.md
  • skills/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.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/adapter-descriptor.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/execution.md
  • adapter-contract/pypi.md
  • skills/README.md
{*.md,**/*.md,**/*.mdx,**/*.ipynb}

⚙️ CodeRabbit configuration file

{*.md,**/*.md,**/*.mdx,**/*.ipynb}: Enforce the product name in user-facing prose: use "NVIDIA NeMo Fabric" on first use and "NeMo Fabric" thereafter. Flag standalone capitalized "Fabric" when it refers to the product. Do not flag the lowercase fabric CLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.

Files:

  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/adapter-descriptor.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/execution.md
  • adapter-contract/pypi.md
  • skills/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.md
  • skills/README.md
**/SKILL.md

📄 CodeRabbit inference engine (.agents/skills/README.md)

Each maintainer skill file must begin with YAML frontmatter containing at least name and description.

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 Correctness

Resolve the documentation link-extension conflict.

All three sections use .md targets, while the path instruction requires relative .mdx targets for documentation under docs/. 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 .mdx extension.

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

Comment thread docs/adapter-contract/custom-agents.md Outdated
Comment thread docs/adapter-contract/custom-agents.md
Comment thread docs/adapter-contract/custom-agents.md Outdated
Comment thread docs/adapter-contract/execution.md
Comment thread docs/adapter-contract/README.md Outdated
Comment thread docs/adapter-contract/README.md Outdated
Comment thread docs/adapter-contract/README.md
Comment thread docs/adapter-contract/registration-and-discovery.md
Comment thread docs/adapter-contract/registration-and-discovery.md

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 4

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

Inline comments:
In `@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

📥 Commits

Reviewing files that changed from the base of the PR and between 4ca2694 and c237ee2.

📒 Files selected for processing (18)
  • crates/fabric-core/src/schema.rs
  • docs/adapter-contract/README.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/results.md
  • docs/sdk/python.mdx
  • schemas/SCHEMA.md
  • schemas/adapter-contract/adapter-descriptor.schema.json
  • schemas/adapter-contract/agent-config.schema.json
  • schemas/adapter-contract/agent-run-request.schema.json
  • schemas/adapter-contract/agent-run-result.schema.json
  • schemas/adapter-contract/legacy/adapter-invocation.schema.json
  • schemas/adapter-contract/runtime-context.schema.json
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • tests/adapter_contract/test_agent_config.py
  • tests/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

View job details

##[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

View job details

##[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

View job details

##[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.json
  • schemas/adapter-contract/legacy/adapter-invocation.schema.json
  • tests/adapter_contract/test_agent_execution.py
  • schemas/adapter-contract/runtime-context.schema.json
  • tests/adapter_contract/test_agent_config.py
  • schemas/adapter-contract/adapter-descriptor.schema.json
  • schemas/adapter-contract/agent-run-result.schema.json
  • crates/fabric-core/src/schema.rs
  • schemas/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 spell NVIDIA in all caps; do not use Nvidia, nvidia, nVidia, nVIDIA, or NV.
Use an NVIDIA before a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol after NVIDIA when referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names with NVIDIA on first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...

Files:

  • schemas/adapter-contract/agent-run-request.schema.json
  • schemas/adapter-contract/legacy/adapter-invocation.schema.json
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/normalized-configuration.md
  • tests/adapter_contract/test_agent_execution.py
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/results.md
  • schemas/adapter-contract/runtime-context.schema.json
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
  • tests/adapter_contract/test_agent_config.py
  • docs/adapter-contract/README.md
  • schemas/adapter-contract/adapter-descriptor.schema.json
  • schemas/adapter-contract/agent-run-result.schema.json
  • crates/fabric-core/src/schema.rs
  • schemas/SCHEMA.md
  • schemas/adapter-contract/agent-config.schema.json
  • docs/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.json
  • schemas/adapter-contract/legacy/adapter-invocation.schema.json
  • schemas/adapter-contract/runtime-context.schema.json
  • schemas/adapter-contract/adapter-descriptor.schema.json
  • schemas/adapter-contract/agent-run-result.schema.json
  • schemas/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.json
  • schemas/adapter-contract/legacy/adapter-invocation.schema.json
  • schemas/adapter-contract/runtime-context.schema.json
  • schemas/adapter-contract/adapter-descriptor.schema.json
  • schemas/adapter-contract/agent-run-result.schema.json
  • schemas/SCHEMA.md
  • schemas/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.md
  • docs/adapter-contract/normalized-configuration.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/README.md
  • schemas/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.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/README.md
  • docs/sdk/python.mdx
{docs/**/*.{md,mdx,yml},examples/**/*.{md,mdx,yml}}

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

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

Files:

  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/README.md
  • docs/sdk/python.mdx
docs/**/*.{md,mdx,yml}

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

Run just docs when the documentation site changes.

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.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/README.md
  • docs/sdk/python.mdx
**/*.{md,mdx,rst}

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

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

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

Files:

  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/normalized-configuration.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/README.md
  • schemas/SCHEMA.md
  • docs/sdk/python.mdx
**/*.{md,rst,txt,adoc}

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

**/*.{md,rst,txt,adoc}: For technical documentation, use professional, active, conversational, engaging, precise, and plain-English prose. Prefer active voice, present tense, short sentences, and scannable paragraphs. Avoid casual or imprecise language, swearing, threats, insults, jokes, puns, culture-specific idioms, marketing exaggeration, and unsupported third-party comparisons.
Use can for possibility and reserve may for permission; use after for temporal order; use refer to for cross-references; prefer short direct sentences and specific verbs; avoid unnecessary please in technical documentation.
Prefer active voice when the actor matters. Passive voice is acceptable when the actor is unknown or irrelevant, when the action or result is the focus, or in programmer documentation.
Use natural contractions in conversational technical prose, but do not force them in formal legal copy, API references, or generated text.
Prefer simpler English over Latinisms: use for example or such as instead of e.g., and so on instead of etc., that is instead of i.e., compared to instead of vs., and by, through, or using instead of via. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Use that without commas for essential clauses, and which with commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such as June 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space before a.m. or p.m.; use ET and PT for needed time zones; avoid 24/7; and prefer from 12:30 to 1:00 p.m. for prose ranges.
Format numbers consistently: spell out zero through nine in body text, use numerals for 10 or greater and for technical values, use commas in thousands, do not begin a sentence with a numeral, spell out ordinals, and use numerals consistently within a category wh...

Files:

  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/normalized-configuration.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/README.md
  • schemas/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.md
  • docs/adapter-contract/normalized-configuration.md
  • tests/adapter_contract/test_agent_execution.py
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
  • tests/adapter_contract/test_agent_config.py
  • docs/adapter-contract/README.md
  • crates/fabric-core/src/schema.rs
  • schemas/SCHEMA.md
  • docs/sdk/python.mdx
**/*.{md,mdx}

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

**/*.{md,mdx}: Use the full product name NVIDIA NeMo Fabric on first use, typically in the title and H1; use NeMo Fabric thereafter. Use fabric alone 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.
Capitalize NVIDIA correctly 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 as here, and use repository-relative .mdx paths for links within docs/.
Prefer active voice, present tense, short sentences, plain English, consistent terminology, and imperative, parallel, scannable procedures.
Use after instead of once when expressing temporal sequence, and use can rather than may when describing possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
For learning-oriented documentation, do not force trademark symbols unless the source document explicitly requires them.
When reporting documentation-review findings, lead with Must fix, Should fix, and Nice to have categories; include file path, line reference, current problem, rationale, and a concrete rewrite or direction.

Files:

  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/normalized-configuration.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/README.md
  • schemas/SCHEMA.md
  • docs/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.md
  • docs/adapter-contract/normalized-configuration.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/README.md
  • schemas/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.md
  • docs/adapter-contract/normalized-configuration.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/README.md
  • schemas/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.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/README.md
  • docs/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 lowercase fabric CLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.

Files:

  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/normalized-configuration.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/README.md
  • schemas/SCHEMA.md
  • docs/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_case for functions and variables; use PascalCase for Rust types and Python classes.

Files:

  • tests/adapter_contract/test_agent_execution.py
  • tests/adapter_contract/test_agent_config.py
  • crates/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.py
  • tests/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 in just test-rust pass and review generated schema diffs.
For schema or public contract changes, run both language suites and review changes under schemas/ and generated API references.

Files:

  • tests/adapter_contract/test_agent_execution.py
  • tests/adapter_contract/test_agent_config.py
  • crates/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, then just test-python; rebuild with just build-python when 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.py
  • tests/adapter_contract/test_agent_config.py
  • crates/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 in python/pyproject.toml.

Files:

  • tests/adapter_contract/test_agent_execution.py
  • tests/adapter_contract/test_agent_config.py
  • crates/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.py
  • tests/adapter_contract/test_agent_config.py
  • crates/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.py
  • tests/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.asyncio to tests; async tests are automatically detected by the async runner.
Do not add -> None return type annotations to test functions.
When mocking a class, use unittest.mock.MagicMock or AsyncMock, using the spec argument when necessary, rather than defining a new class.
Prefix mocked class names with mock, not fake.
Prefer pytest fixtures over helper methods.
If a fixture is needed in multiple test files, define it once in conftest.py rather than repeating it.
Define fixtures using @pytest.fixture(name="<fixture_name>"[, scope="<scope>"]) and a <fixture_name>_fixture function; specify scope only when it is not function.
Prefer pytest.mark.parametrize over separate tests for different input types.
Use @pytest.mark.usefixtures when a fixture is needed but its 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 using results["data"] instead of results.get("data").
When adapter installation metadata changes, packaging metadata tests must directly assert that the root project depends unconditionally on the exact-version nemo-fabric-runtime distribution.
Packaging metadata tests must verify that each root harness extra delegates to the matching version of the leaf adapter's harness extra.
Packaging metadata tests must verify that bare leaf dependencies remain adapter-owned and that the root adapter-tests dependency group installs each leaf through its harness extra.
Packaging metadata tests must verify that every leaf provides full; only adapters importing NeMo Relay Python APIs provide relay, while adapters using an external Relay executable have full equal to harness.

Files:

  • tests/adapter_contract/test_agent_execution.py
  • tests/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.py
  • tests/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 name and description.

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-rust and cargo fmt --all -- --check.

For Rust core, CLI, or shared runtime semantic changes, run Rust formatting and tests, and add Python tests when behavior is exposed through the SDK.

Use Rust stable tooling; format Rust code with cargo fmt --all, verify formatting with cargo fmt --all -- --check, and compile with cargo 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-core must 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 -- --check and just 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-core changes 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, run just docs to 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 .mdx extension for links between files under docs/; 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. Define ROOT = Path(__file__).resolve().parents[2] and read the schema through ROOT.

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. Define ROOT = Path(__file__).resolve().parents[2] and read the schema through ROOT.

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!

Comment thread crates/fabric-core/src/schema.rs
Comment thread schemas/adapter-contract/agent-config.schema.json
Comment thread schemas/adapter-contract/agent-run-result.schema.json
Comment thread schemas/adapter-contract/agent-run-result.schema.json

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 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 lift

Define the persisted-result compatibility policy. RunResult is persisted and read by Harbor. Rust deserialization rejects future fields in ArtifactManifest and ArtifactRef, while Python preserves them; the schemas encode strictness with additionalProperties: false. Treat EnvironmentHandle and RuntimeContext separately because they are runtime payloads, not RunResult fields. 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

📥 Commits

Reviewing files that changed from the base of the PR and between 0207e06 and c237ee2.

⛔ Files ignored due to path filters (2)
  • adapter-contract/uv.lock is excluded by !**/*.lock
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (160)
  • adapter-contract/LICENSE
  • adapter-contract/pypi.md
  • adapter-contract/pyproject.toml
  • adapter-contract/src/nemo_fabric_adapter_contract/__init__.py
  • adapter-contract/src/nemo_fabric_adapter_contract/models.py
  • adapters/common/README.md
  • adapters/common/src/nemo_fabric_adapters/common/lifecycle.py
  • crates/fabric-core/src/adapter_contract.rs
  • crates/fabric-core/src/agent_config.rs
  • crates/fabric-core/src/agent_execution.rs
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/error.rs
  • crates/fabric-core/src/lib.rs
  • crates/fabric-core/src/runtime.rs
  • crates/fabric-core/src/schema.rs
  • docs/adapter-contract/README.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/results.md
  • docs/index.yml
  • docs/reference/api/python-library-reference/index.md
  • docs/reference/api/python-library-reference/nemo_fabric.models.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/constant-adapter-contract-version.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/enum-adapterextensionpoint.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentharnessconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentinstructionconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentinstructionsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmcpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmcpserverconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmodelconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentruntimeconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentskillconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agenttooldefinition.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agenttoolsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentworkflowconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentworkflowentrypointconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/enum-agentrunstatus.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentartifact.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentrunerror.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentrunrequest.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentrunresult.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentusage.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfiginput.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitykind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-capabilitytarget.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-controllocation.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-instructionmode.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatifstorageconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofmode.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofsinkconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamfieldnamepolicy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayatofstreamtransport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayotlptransport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-relayunsupportedbehavior.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-resolutionstrategy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-telemetryprovider.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-adapter-descriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterrequirements.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetryprovidersupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetrysupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityroute.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilitytargetplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-harnessconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-instructionconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-instructionsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-metadataconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-modelconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatifconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayatofconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relaycomponentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayconfigpolicy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayobservabilityconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-relayotlpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvedadapterdescriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimecapabilities.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimeconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-skillconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryproviderconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-tooldefinitionconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-workflowconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-workflowentrypointconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/enum-doctorstatus.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/fn-doctor-plan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorcheck.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorreport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/fn-version.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdx
  • docs/sdk/python.mdx
  • external/nat/README.md
  • external/nat/examples/calculator.py
  • external/nat/examples/email_phishing.py
  • external/nat/fabric-adapter.json
  • external/nat/src/nemo_fabric_adapters/nat/adapter.py
  • justfile
  • pyproject.toml
  • python/src/nemo_fabric/__init__.py
  • python/src/nemo_fabric/models.py
  • python/src/nemo_fabric/types.py
  • schemas/SCHEMA.md
  • schemas/adapter-contract/adapter-descriptor.schema.json
  • schemas/adapter-contract/agent-config.schema.json
  • schemas/adapter-contract/agent-run-request.schema.json
  • schemas/adapter-contract/agent-run-result.schema.json
  • schemas/adapter-contract/legacy/adapter-invocation.schema.json
  • schemas/adapter-contract/runtime-context.schema.json
  • schemas/agent.schema.json
  • schemas/artifact-manifest.schema.json
  • schemas/environment-handle.schema.json
  • schemas/run-plan.schema.json
  • schemas/run-result.schema.json
  • schemas/runtime-handle.schema.json
  • skills/README.md
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • skills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yaml
  • tests/adapter_contract/test_agent_config.py
  • tests/adapter_contract/test_agent_execution.py
  • tests/adapters/test_adapter_package_metadata.py
  • tests/adapters/test_adapters_common_lifecycle.py
  • tests/adapters/test_external_nat_adapter.py
  • tests/python/test_sdk_contract.py

Comment thread adapter-contract/src/nemo_fabric_adapter_contract/models.py
Comment thread python/src/nemo_fabric/models.py Outdated
Comment thread python/src/nemo_fabric/types.py
Comment thread skills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yaml Outdated
Comment thread skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md Outdated
Comment thread skills/README.md Outdated
@AnuradhaKaruppiah AnuradhaKaruppiah changed the title Define typed adapter contract and publish authoring docs feat: define typed adapter contract and publish authoring docs Aug 7, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 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 win

Should 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

📥 Commits

Reviewing files that changed from the base of the PR and between c237ee2 and a93b98a.

⛔ Files ignored due to path filters (2)
  • adapter-contract/uv.lock is excluded by !**/*.lock
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (121)
  • .agents/skills/README.md
  • .agents/skills/contribute-adapter/SKILL.md
  • adapter-contract/pypi.md
  • adapter-contract/pyproject.toml
  • adapter-contract/src/nemo_fabric_adapter_contract/models.py
  • crates/fabric-core/src/adapter_contract.rs
  • crates/fabric-core/src/agent_config.rs
  • crates/fabric-core/src/agent_execution.rs
  • crates/fabric-core/src/config.rs
  • crates/fabric-core/src/lib.rs
  • crates/fabric-core/src/runtime.rs
  • crates/fabric-core/src/schema.rs
  • docs/adapter-contract/README.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/results.md
  • docs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/enum-adapterextensionpoint.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/adapter-contract/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentharnessconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentinstructionconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentinstructionsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmcpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmcpserverconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentmodelconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentruntimeconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentskillconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agenttooldefinition.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agenttoolsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentworkflowconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-config/struct-agentworkflowentrypointconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/enum-agentrunresultvalidationerror.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/enum-agentrunstatus.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentrunresult.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/agent-execution/struct-agentusage.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfigfield.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterconfiginput.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterdescriptorsource.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-adapterkind.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-controllocation.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-environmentownership.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-instructionmode.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-mcpexposure.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-resolutionstrategy.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/enum-telemetryprovider.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-load-adapter-descriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/fn-resolve-run-plan-from-config.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterconfigsupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterdescriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adapterrequirements.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetryprovidersupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-adaptertelemetrysupport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-capabilityplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-environmentplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-fabricconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-harnessconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-instructionconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-instructionsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-mcpserverplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-metadataconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-modelconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvecontext.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-resolvedadapterdescriptor.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimecapabilities.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-runtimeconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-skillconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryplan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-telemetryproviderconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-tooldefinitionconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-toolsconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-workflowconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/config/struct-workflowentrypointconfig.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/enum-doctorstatus.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/fn-doctor-plan.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorcheck.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/doctor/struct-doctorreport.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/enum-fabricerror.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/error/type-result.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/fn-version.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/index.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-artifactref.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/runtime/struct-runresult.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/enum-schemaname.mdx
  • docs/reference/api/rust-library-reference/nemo-fabric-core/schema/index.mdx
  • docs/sdk/python.mdx
  • python/src/nemo_fabric/models.py
  • python/src/nemo_fabric/types.py
  • schemas/SCHEMA.md
  • schemas/adapter-contract/adapter-descriptor.schema.json
  • schemas/adapter-contract/agent-config.schema.json
  • schemas/adapter-contract/agent-run-result.schema.json
  • schemas/adapter-contract/legacy/adapter-invocation.schema.json
  • schemas/adapter-contract/runtime-context.schema.json
  • schemas/agent.schema.json
  • schemas/artifact-manifest.schema.json
  • schemas/run-plan.schema.json
  • schemas/run-result.schema.json
  • scripts/docs/generate_rust_library_reference.py
  • skills/README.md
  • skills/integrations/consumer/nemo-fabric-integrate/SKILL.md
  • skills/integrations/consumer/nemo-fabric-integrate/references/config-mapping.md
  • skills/integrations/harness/nemo-fabric-build-adapter/SKILL.md
  • skills/integrations/harness/nemo-fabric-build-adapter/agents/openai.yaml
  • tests/adapter_contract/test_agent_config.py
  • tests/adapter_contract/test_agent_execution.py
  • tests/adapters/test_adapter_package_metadata.py
  • tests/python/test_sdk_contract.py

Comment thread crates/fabric-core/src/agent_execution.rs
Comment thread crates/fabric-core/src/config.rs Outdated
Comment thread crates/fabric-core/src/runtime.rs
Comment thread python/src/nemo_fabric/types.py
Comment thread skills/README.md
Comment thread tests/adapter_contract/test_agent_execution.py
Comment thread tests/python/test_sdk_contract.py Outdated
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>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

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

Inline comments:
In `@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

📥 Commits

Reviewing files that changed from the base of the PR and between a93b98a and 8699d0f.

📒 Files selected for processing (8)
  • docs/adapter-contract/README.md
  • docs/adapter-contract/adapter-descriptor.md
  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/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.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/execution.md
  • docs/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.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/execution.md
  • docs/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.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
docs/**/*.{md,mdx,yml}

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

Run just docs when 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.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/execution.md
  • docs/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 spell NVIDIA in all caps; do not use Nvidia, nvidia, nVidia, nVIDIA, or NV.
Use an NVIDIA before a noun, because the name begins with an “en” sound.
Do not add a registered trademark symbol after NVIDIA when referring to the company; use trademark symbols with product names only when required by the document type or legal guidance.
Verify official capitalization, spacing, hyphenation, and spelling for NVIDIA and third-party product names; do not rewrite official product names for grammar or title-case rules.
Precede NVIDIA product names with NVIDIA on first mention when natural and accurate, and link the first mention when the destination helps the reader.
On first use, include the company name and full model qualifier when it helps identify the model; preserve official capitalization and punctuation, and use shorter family names only after establishing the full name.
For learning-oriented and developer content, do not force trademark symbols unless explicitly required; for press, ...

Files:

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

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

Files:

  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/execution.md
  • docs/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.
Use can for possibility and reserve may for permission; use after for temporal order; use refer to for cross-references; prefer short direct sentences and specific verbs; avoid unnecessary please in technical documentation.
Prefer active voice when the actor matters. Passive voice is acceptable when the actor is unknown or irrelevant, when the action or result is the focus, or in programmer documentation.
Use natural contractions in conversational technical prose, but do not force them in formal legal copy, API references, or generated text.
Prefer simpler English over Latinisms: use for example or such as instead of e.g., and so on instead of etc., that is instead of i.e., compared to instead of vs., and by, through, or using instead of via. Use industry-standard terms such as in silico, in vitro, and in vivo when appropriate, and italicize them in running text.
Use that without commas for essential clauses, and which with commas for nonessential clauses.
Format dates and times clearly: spell out months in body text; use forms such as June 12, 2025; avoid numeric or ordinal dates; capitalize days; use 12-hour time when appropriate; include a space before a.m. or p.m.; use ET and PT for needed time zones; avoid 24/7; and prefer from 12:30 to 1:00 p.m. for prose ranges.
Format numbers consistently: spell out zero through nine in body text, use numerals for 10 or greater and for technical values, use commas in thousands, do not begin a sentence with a numeral, spell out ordinals, and use numerals consistently within a category wh...

Files:

  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/execution.md
  • docs/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.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/execution.md
  • docs/adapter-contract/adapter-descriptor.md
**/*.{md,mdx}

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

**/*.{md,mdx}: Use the full product name NVIDIA NeMo Fabric on first use, typically in the title and H1; use NeMo Fabric thereafter. Use fabric alone 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.
Capitalize NVIDIA correctly 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 as here, and use repository-relative .mdx paths for links within docs/.
Prefer active voice, present tense, short sentences, plain English, consistent terminology, and imperative, parallel, scannable procedures.
Use after instead of once when expressing temporal sequence, and use can rather than may when describing possibility rather than permission.
Avoid ambiguous numeric dates and ordinal dates in body text.
For learning-oriented documentation, do not force trademark symbols unless the source document explicitly requires them.
When reporting documentation-review findings, lead with Must fix, Should fix, and Nice to have categories; include file path, line reference, current problem, rationale, and a concrete rewrite or direction.

Files:

  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/execution.md
  • docs/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.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/execution.md
  • docs/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.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/execution.md
  • docs/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.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/execution.md
  • docs/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 lowercase fabric CLI command, package/import/crate names, code identifiers, API symbols, configuration keys, file paths, or unrelated generic uses of the word.

Files:

  • docs/adapter-contract/conformance.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/execution.md
  • docs/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.md
  • docs/adapter-contract/README.md
  • docs/adapter-contract/results.md
  • docs/adapter-contract/registration-and-discovery.md
  • docs/adapter-contract/custom-agents.md
  • docs/adapter-contract/normalized-configuration.md
  • docs/adapter-contract/execution.md
  • docs/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!

Comment thread docs/adapter-contract/README.md
@AnuradhaKaruppiah
AnuradhaKaruppiah marked this pull request as ready for review August 7, 2026 16:15
@AnuradhaKaruppiah
AnuradhaKaruppiah requested review from a team as code owners August 7, 2026 16:15
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>

@AjayThorve AjayThorve left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Overall looks good, left some comments

Comment thread docs/adapter-contract/README.md Outdated
Comment thread crates/fabric-core/src/agent_config.rs
Comment thread crates/fabric-core/src/agent_execution.rs
Comment thread external/nat/examples/email_phishing.py Outdated
Comment thread adapter-contract/pyproject.toml

@zhongxuanwang-nv zhongxuanwang-nv left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks Anuradha! Some nitty non-code related things for now! :)

Comment thread docs/adapter-contract/README.md
Comment thread docs/adapter-contract/README.md
Comment thread docs/adapter-contract/registration-and-discovery.md
Comment thread docs/adapter-contract/registration-and-discovery.md
Comment thread docs/adapter-contract/registration-and-discovery.md
Comment thread docs/adapter-contract/custom-agents.md
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
Signed-off-by: Anuradha Karuppiah <26330987+AnuradhaKaruppiah@users.noreply.github.com>
@AnuradhaKaruppiah

Copy link
Copy Markdown
Collaborator Author

/merge

@rapids-bot
rapids-bot Bot merged commit 5e2ab49 into NVIDIA:main Aug 7, 2026
@coderabbitai coderabbitai Bot mentioned this pull request Aug 7, 2026
2 tasks
@AnuradhaKaruppiah
AnuradhaKaruppiah deleted the ak-adapter-contract branch August 10, 2026 16:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants