Skip to content

fix: require Frontier endpoint for CLI presets#120

Open
zhongxuanwang-nv wants to merge 3 commits into
mainfrom
fix/frontier-preset-requirement
Open

fix: require Frontier endpoint for CLI presets#120
zhongxuanwang-nv wants to merge 3 commits into
mainfrom
fix/frontier-preset-requirement

Conversation

@zhongxuanwang-nv

@zhongxuanwang-nv zhongxuanwang-nv commented Jul 24, 2026

Copy link
Copy Markdown
Member

Overview

Prevent the claude and codex CLI presets and example variants from constructing or planning a configuration unless NVIDIA_FRONTIER_BASE_URL contains a non-empty endpoint. These presets require NVIDIA Frontier and must not inherit a public NVIDIA Catalog default from downstream normalization.

Preset::config() is now the authoritative fallible construction path, and staging and maintained examples propagate its validation error. This intentionally changes that public experimentation-CLI method from returning FabricConfig to returning Result<FabricConfig, String>; there are no core schema or Python SDK API changes. Existing CLI documentation already describes the Frontier endpoint as explicit and without a default.

Details

  • Reuse each preset's existing required_env metadata instead of adding a second configuration-environment field.
  • Validate the Frontier endpoint before direct config construction, preset staging, planning, doctoring, running, or maintained-example generation.
  • Keep NVIDIA_API_KEY as a runtime credential requirement rather than a planning requirement.
  • Leave the Catalog-native hermes and deepagents presets unchanged.
  • Keep one integration test that invokes the compiled CLI for both affected presets, rejects a missing endpoint, and parses the emitted plan to prove the exact Frontier URL was preserved.
  • Leave legacy nested endpoint handling unchanged; PR feat: validate adapter model compatibility #118 already owns its migration validation.

Validation

  • cargo fmt --all -- --check
  • just --fmt --check
  • cargo check --workspace --locked
  • just test-rust
  • git diff --check
  • cargo build -p nemo-fabric-cli --locked, followed by a compiled-binary matrix covering Claude/Codex preset and example plan/init failures and successes plus Hermes/DeepAgents Catalog defaults
  • uv run --no-sync python - E2E: compiled CLI plan → FabricConfig.from_mapping() → public Fabric.run() → Claude adapter → mock Claude CLI; child received https://frontier-e2e.invalid, and Catalog was absent
  • uv run --no-sync pytest -q tests/adapters/test_codex_adapter.py -k 'nvidia_provider' (5 passed, 45 deselected)

A full Codex child-process E2E was not run because the repository has no deterministic Codex CLI fixture. The focused adapter tests cover its NVIDIA endpoint mapping and missing-endpoint rejection. just test-python was not rerun because the final diff contains no Python, SDK, binding, or adapter changes.

Where should the reviewer start?

Start with the fallible Preset::config() path in crates/fabric-cli/src/presets.rs, then review the actual CLI boundary test in crates/fabric-cli/tests/frontier_presets.rs.

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

  • Relates to feat: validate adapter model compatibility #118

  • 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

  • Bug Fixes

    • Improved configuration validation for Claude and Codex presets.
    • The NVIDIA Frontier endpoint must now be set when required; missing or blank values produce a clear error.
    • Configured Frontier endpoint settings are now preserved in generated plans.
    • Configuration failures are reported cleanly instead of being silently assumed valid.
  • Tests

    • Added regression coverage for missing and configured Frontier endpoint scenarios.

Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
@coderabbitai

coderabbitai Bot commented Jul 24, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

Preset configuration now validates required environment variables before staging or example selection. Claude and Codex declare and read the shared NVIDIA Frontier endpoint variable, with CLI tests covering missing and configured endpoint cases.

Changes

Preset environment validation

Layer / File(s) Summary
Validation contract and preset catalog
crates/fabric-cli/src/presets.rs, crates/fabric-cli/src/scaffold.rs
Preset::config validates required environment values, Claude and Codex use the shared Frontier endpoint constant, and affected unit tests handle the Result return type.
Example configuration and selection integration
crates/fabric-cli/src/examples.rs
Configuration construction and selection propagate errors returned by preset configuration.
Endpoint behavior coverage
crates/fabric-cli/tests/frontier_presets.rs
Verifies Claude and Codex planning fails without NVIDIA_FRONTIER_BASE_URL and preserves the configured endpoint when it is set.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
  participant CLI as nemo-fabric CLI
  participant Preset as Preset::config
  participant Environment as Process environment
  participant Plan as JSON plan
  CLI->>Preset: build Claude or Codex configuration
  Preset->>Environment: read NVIDIA_FRONTIER_BASE_URL
  Environment-->>Preset: endpoint value or missing value
  Preset-->>CLI: configuration or validation error
  CLI->>Plan: emit plan with model settings
  Plan-->>CLI: configured base_url
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 follows Conventional Commits and accurately summarizes the PR's main fix.
Description check ✅ Passed The description matches the template with Overview, reviewer start point, related issue, validation, and checklist items.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/frontier-preset-requirement

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

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

Inline comments:
In `@tests/e2e/test_claude.py`:
- Around line 176-183: Update test_fabric_run_preserves_legacy_model_endpoint to
stop using monkeypatch.setenv; assign NVIDIA_API_KEY through os.environ while
relying on the suite’s autouse restore_environ_fixture for cleanup.

In `@tests/e2e/test_cli_scaffold.py`:
- Around line 161-168: Extend
test_frontier_presets_require_endpoint_before_planning to parameterize the
endpoint override with both an unset value and whitespace-only values such as "
\t". Ensure each case clears or sets NVIDIA_FRONTIER_BASE_URL before calling
plan_preset, while preserving assertions for failure, empty stdout, the preset
name, and the variable name in stderr.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 20135643-2081-4832-85f6-73f54996ae8c

📥 Commits

Reviewing files that changed from the base of the PR and between a2d9f1c and e231301.

📒 Files selected for processing (4)
  • crates/fabric-cli/src/examples.rs
  • crates/fabric-cli/src/presets.rs
  • tests/e2e/test_claude.py
  • tests/e2e/test_cli_scaffold.py
📜 Review details
⏰ Context from checks skipped due to timeout. (15)
  • GitHub Check: Test (Python 3.14, windows-amd64)
  • GitHub Check: Pre-commit
  • GitHub Check: Test (Python 3.13, windows-amd64)
  • GitHub Check: Test (Python 3.14, macos-arm64)
  • GitHub Check: Test (Python 3.13, macos-arm64)
  • GitHub Check: Test (Python 3.12, windows-amd64)
  • GitHub Check: Test (Python 3.14, linux-amd64)
  • GitHub Check: Test (Python 3.12, linux-amd64)
  • GitHub Check: Test (Python 3.11, windows-amd64)
  • GitHub Check: Test (Python 3.12, macos-arm64)
  • GitHub Check: Test (Python 3.12, linux-arm64)
  • GitHub Check: Test (Python 3.11, linux-amd64)
  • GitHub Check: Test (Python 3.13, linux-amd64)
  • GitHub Check: Test (Python 3.11, linux-arm64)
  • GitHub Check: Test (Python 3.11, macos-arm64)
🧰 Additional context used
📓 Path-based instructions (16)
**/*.{rs,py,pyi,json,yaml,yml}

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

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

Files:

  • tests/e2e/test_claude.py
  • crates/fabric-cli/src/examples.rs
  • crates/fabric-cli/src/presets.rs
  • tests/e2e/test_cli_scaffold.py
**/*

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

  • tests/e2e/test_claude.py
  • crates/fabric-cli/src/examples.rs
  • crates/fabric-cli/src/presets.rs
  • tests/e2e/test_cli_scaffold.py
**/*.{rs,py}

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

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

**/*.{rs,py}: Use snake_case for functions and variables; use PascalCase for Rust types and Python classes.
Run tests for every affected language surface; changes to the Rust core or public schemas require both Rust and Python test suites.
Keep native Python binding declarations synchronized with their Rust implementations when public contracts change.

Files:

  • tests/e2e/test_claude.py
  • crates/fabric-cli/src/examples.rs
  • crates/fabric-cli/src/presets.rs
  • tests/e2e/test_cli_scaffold.py
**/*.{py,pyi}

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

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

Files:

  • tests/e2e/test_claude.py
  • tests/e2e/test_cli_scaffold.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/e2e/test_claude.py
  • crates/fabric-cli/src/examples.rs
  • crates/fabric-cli/src/presets.rs
  • tests/e2e/test_cli_scaffold.py
**/*.{py,pyi,rs}

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

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

Files:

  • tests/e2e/test_claude.py
  • crates/fabric-cli/src/examples.rs
  • crates/fabric-cli/src/presets.rs
  • tests/e2e/test_cli_scaffold.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 and run by the async runner.
Do not add -> None return type annotations to test functions.
When mocking a class, use unittest.mock.MagicMock or unittest.mock.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.
Do not repeat fixtures; place fixtures needed by multiple test files in conftest.py.
Define fixtures using @pytest.fixture(name="<fixture_name>"[, scope="<scope>"]) and a function named <fixture_name>_fixture; specify scope only when it is not function.
Prefer pytest.mark.parametrize over separate tests for different input types.
Use @pytest.mark.usefixtures when a fixture is needed but its return value is unused or it does not return a value.
Use the autouse restore_environ_fixture from tests/conftest.py to restore environment variables; modify variables with os.environ and do not use monkeypatch.setenv.
Avoid defensive programming in tests; access expected data directly so missing data raises a clear failure, such as using results["data"] instead of results.get("data").

Files:

  • tests/e2e/test_claude.py
  • tests/e2e/test_cli_scaffold.py
**/*.{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/e2e/test_claude.py
  • crates/fabric-cli/src/examples.rs
  • crates/fabric-cli/src/presets.rs
  • tests/e2e/test_cli_scaffold.py
**/*.{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/e2e/test_claude.py
  • crates/fabric-cli/src/examples.rs
  • crates/fabric-cli/src/presets.rs
  • tests/e2e/test_cli_scaffold.py
**/*.py

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.py: Use type annotations for public Python APIs and keep native binding declarations synchronized with their Rust implementations.
Python files must use the specified Python # SPDX header format.

Files:

  • tests/e2e/test_claude.py
  • tests/e2e/test_cli_scaffold.py
**/tests/**/*.{rs,py}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

When adding functionality, include tests in the corresponding Rust crate or relevant tests/ area.

Files:

  • tests/e2e/test_claude.py
  • tests/e2e/test_cli_scaffold.py
**/*.{py,toml,lock,json,md,yml,yaml}

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

Keep package wiring, descriptors, dependencies, installation, catalogs, CI enumerations, documentation, examples, fixtures, and generated artifacts consistent with the adapter implementation.

Files:

  • tests/e2e/test_claude.py
  • tests/e2e/test_cli_scaffold.py
{tests/**,python/tests/**}

⚙️ CodeRabbit configuration file

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

Files:

  • tests/e2e/test_claude.py
  • tests/e2e/test_cli_scaffold.py
**/*.rs

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

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

**/*.rs: Format Rust code with cargo fmt --all and ensure cargo fmt --all -- --check passes.
Run cargo check --workspace --locked when changing the Rust core, CLI, or native Python extension.
Rust files must use the specified Rust // SPDX header format.

Files:

  • crates/fabric-cli/src/examples.rs
  • crates/fabric-cli/src/presets.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.

Files:

  • crates/fabric-cli/src/examples.rs
  • crates/fabric-cli/src/presets.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-cli/src/examples.rs
  • crates/fabric-cli/src/presets.rs
🪛 ast-grep (0.44.1)
tests/e2e/test_cli_scaffold.py

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

(subprocess-from-request)

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

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

(S603)


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

(S607)

🔇 Additional comments (2)
crates/fabric-cli/src/presets.rs (1)

61-61: LGTM!

Also applies to: 74-94, 133-165

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

64-72: LGTM!

Comment thread tests/e2e/test_claude.py Outdated
Comment thread tests/e2e/test_cli_scaffold.py Outdated
Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

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

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

73-80: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Make validated configuration construction authoritative.

stage() validates the endpoint, but Preset::config() at Line 68 remains a public, non-fallible construction path, while the Claude and Codex builders convert a missing variable to None. A direct caller can therefore reach downstream normalization without a Frontier URL and inherit the public Catalog default. Route all configuration construction through a fallible validated path and add a regression test for direct construction.

Also applies to: 200-200, 215-215

🤖 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-cli/src/presets.rs` around lines 73 - 80, Make Preset::config
and the Claude/Codex configuration builders use a fallible, validated
construction path that rejects a missing endpoint instead of producing None or
applying the Catalog default. Update stage to reuse that authoritative
configuration result after validate_config_environment, and adjust callers to
propagate the error. Add a regression test covering direct configuration
construction without a Frontier URL.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/fabric-cli/tests/frontier_presets.rs`:
- Around line 13-16: Update both subprocess commands in the frontier preset
tests, including the command that invokes the successful endpoint case, to set a
deterministic dummy NVIDIA_API_KEY while continuing to remove
NVIDIA_FRONTIER_BASE_URL where required. Keep the assertions focused on Frontier
endpoint validation rather than inherited host environment state.

---

Outside diff comments:
In `@crates/fabric-cli/src/presets.rs`:
- Around line 73-80: Make Preset::config and the Claude/Codex configuration
builders use a fallible, validated construction path that rejects a missing
endpoint instead of producing None or applying the Catalog default. Update stage
to reuse that authoritative configuration result after
validate_config_environment, and adjust callers to propagate the error. Add a
regression test covering direct configuration construction without a Frontier
URL.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: c966ae29-cd94-43b9-a8f5-d156a77e6a54

📥 Commits

Reviewing files that changed from the base of the PR and between e231301 and 6949cda.

📒 Files selected for processing (2)
  • crates/fabric-cli/src/presets.rs
  • crates/fabric-cli/tests/frontier_presets.rs
📜 Review details
⏰ Context from checks skipped due to timeout. (12)
  • GitHub Check: Pre-commit
  • GitHub Check: Test (Python 3.14, macos-arm64)
  • GitHub Check: Test (Python 3.12, macos-arm64)
  • GitHub Check: Test (Python 3.14, windows-amd64)
  • GitHub Check: Test (Python 3.11, macos-arm64)
  • GitHub Check: Test (Python 3.11, windows-amd64)
  • GitHub Check: Test (Python 3.13, windows-amd64)
  • GitHub Check: Test (Python 3.12, windows-amd64)
  • GitHub Check: Test (Python 3.13, linux-amd64)
  • GitHub Check: Test (Python 3.13, macos-arm64)
  • GitHub Check: Test (Python 3.12, linux-amd64)
  • GitHub Check: Test (Python 3.11, linux-arm64)
🧰 Additional context used
📓 Path-based instructions (11)
**/*.rs

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

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

**/*.rs: Format Rust code with cargo fmt --all and ensure cargo fmt --all -- --check passes.
Run cargo check --workspace --locked when changing the Rust core, CLI, or native Python extension.
Rust files must use the specified Rust // SPDX header format.

Files:

  • crates/fabric-cli/tests/frontier_presets.rs
  • crates/fabric-cli/src/presets.rs
**/*.{rs,py,pyi,json,yaml,yml}

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

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

Files:

  • crates/fabric-cli/tests/frontier_presets.rs
  • crates/fabric-cli/src/presets.rs
**/*

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

  • crates/fabric-cli/tests/frontier_presets.rs
  • crates/fabric-cli/src/presets.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.

Files:

  • crates/fabric-cli/tests/frontier_presets.rs
  • crates/fabric-cli/src/presets.rs
**/*.{rs,py}

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

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

**/*.{rs,py}: Use snake_case for functions and variables; use PascalCase for Rust types and Python classes.
Run tests for every affected language surface; changes to the Rust core or public schemas require both Rust and Python test suites.
Keep native Python binding declarations synchronized with their Rust implementations when public contracts change.

Files:

  • crates/fabric-cli/tests/frontier_presets.rs
  • crates/fabric-cli/src/presets.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-cli/tests/frontier_presets.rs
  • crates/fabric-cli/src/presets.rs
**/*.{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:

  • crates/fabric-cli/tests/frontier_presets.rs
  • crates/fabric-cli/src/presets.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.

Files:

  • crates/fabric-cli/tests/frontier_presets.rs
  • crates/fabric-cli/src/presets.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:

  • crates/fabric-cli/tests/frontier_presets.rs
  • crates/fabric-cli/src/presets.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:

  • crates/fabric-cli/tests/frontier_presets.rs
  • crates/fabric-cli/src/presets.rs
**/tests/**/*.{rs,py}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

When adding functionality, include tests in the corresponding Rust crate or relevant tests/ area.

Files:

  • crates/fabric-cli/tests/frontier_presets.rs
🔇 Additional comments (2)
crates/fabric-cli/tests/frontier_presets.rs (1)

1-8: LGTM!

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

24-24: LGTM!

Also applies to: 84-93, 146-153, 379-379

Comment thread crates/fabric-cli/tests/frontier_presets.rs
Signed-off-by: Zhongxuan Wang <daniewang@nvidia.com>
@zhongxuanwang-nv
zhongxuanwang-nv marked this pull request as ready for review July 25, 2026 00:46
@zhongxuanwang-nv
zhongxuanwang-nv requested a review from a team as a code owner July 25, 2026 00:46
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.

1 participant