Skip to content

fix: expose effective upstream auth presence in CLI diagnostics - #660

Merged
rapids-bot[bot] merged 3 commits into
NVIDIA:release/0.7from
mnajafian-nv:fix/upstream-auth-presence-diagnostics
Aug 3, 2026
Merged

fix: expose effective upstream auth presence in CLI diagnostics#660
rapids-bot[bot] merged 3 commits into
NVIDIA:release/0.7from
mnajafian-nv:fix/upstream-auth-presence-diagnostics

Conversation

@mnajafian-nv

@mnajafian-nv mnajafian-nv commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Overview

Expose effective upstream auth presence in CLI diagnostics without leaking secrets.

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

Details

  • add a redacted effective upstream auth signal for OpenAI and Anthropic in doctor --json, human doctor output, and run --dry-run
  • derive effective auth presence from either configured auth headers or the runtime's supported environment fallback paths
  • report unknown instead of misleading unset when configuration resolution fails before effective auth can be determined
  • keep precedence cases visible, including when a higher-precedence endpoint override clears inherited auth
  • add focused regression coverage for env-only auth, unresolved-config reporting, whitespace-only env values, and secret redaction in CLI output

Where should the reviewer start?

Start in crates/cli/src/diagnostics/model.rs and crates/cli/src/diagnostics/mod.rs for the effective auth-state model and collection logic, then crates/cli/src/process/launcher.rs for the run --dry-run rendering. The most relevant end-to-end coverage is in crates/cli/tests/cli_tests.rs.

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

  • Relates to: none

Summary by CodeRabbit

  • New Features
    • Configuration diagnostics now show whether OpenAI and Anthropic authentication is configured, unset, or unknown.
    • Authentication status reflects configured gateway credentials and valid environment-variable fallbacks.
    • Dry-run output includes authentication status without revealing credential values.
  • Bug Fixes
    • Corrected diagnostics when configuration resolution fails by reporting authentication as unknown.
    • Whitespace-only environment values are no longer treated as configured credentials.
  • Tests
    • Added coverage for JSON, human-readable, and dry-run authentication diagnostics.

Signed-off-by: mnajafian-nv <mnajafian@nvidia.com>
@mnajafian-nv
mnajafian-nv requested a review from a team as a code owner August 3, 2026 19:28
@github-actions github-actions Bot added size:M PR is medium Bug issue describes bug; PR fixes bug lang:rust PR changes/introduces Rust code labels Aug 3, 2026
@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

Configuration diagnostics now report OpenAI and Anthropic authentication presence from resolved gateway settings. Statuses can be configured, unset, or unknown. Human output and transparent-run plans show status only. Tests cover layered configuration, environment fallbacks, unresolved configuration, JSON output, and human output.

Changes

Upstream authentication diagnostics

Layer / File(s) Summary
Authentication model and resolved configuration collection
crates/cli/src/diagnostics/model.rs, crates/cli/src/diagnostics/mod.rs
Adds serialized authentication-presence models. The models classify gateway headers and non-empty fallback environment variables as configured or unset. Failed configuration resolution produces unknown. Dynamic-plugin diagnostics use ResolvedConfig.
Diagnostic and run-plan output
crates/cli/src/diagnostics/render.rs, crates/cli/src/process/launcher.rs
Reports OpenAI and Anthropic authentication status without displaying credential values.
Authentication reporting tests
crates/cli/tests/cli_tests.rs, crates/cli/tests/coverage/shared/doctor_tests.rs
Tests JSON, human-readable, and dry-run output for layered authentication, environment fallbacks, whitespace-only values, redaction, and unresolved configuration.

Estimated code review effort: 3 (Moderate) | ~20 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title follows Conventional Commits format, uses an allowed type, states the main change, and is 63 characters long.
Description check ✅ Passed The description includes all template sections, explains the changes, identifies review starting points, and documents testing and issue context.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@mnajafian-nv
mnajafian-nv marked this pull request as draft August 3, 2026 19:29
@mnajafian-nv mnajafian-nv self-assigned this Aug 3, 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: 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 `@crates/cli/tests/cli_tests.rs`:
- Around line 3307-3343: Add negative output assertions in both test sites: in
crates/cli/tests/cli_tests.rs lines 3307-3343, verify the doctor --json output
excludes “Bearer project-openai” and “Basic project-anthropic” before parsing or
consuming it; in crates/cli/tests/cli_tests.rs lines 3693-3727, add the same
exclusions for the run --dry-run output. Preserve the existing derived-label
assertions.
🪄 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: 4317c619-380a-453b-9762-c1b19e89d5fb

📥 Commits

Reviewing files that changed from the base of the PR and between 8fce587 and e5701c4.

📒 Files selected for processing (6)
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/src/diagnostics/model.rs
  • crates/cli/src/diagnostics/render.rs
  • crates/cli/src/process/launcher.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
📜 Review details
🧰 Additional context used
📓 Path-based instructions (10)
**/*.rs

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

**/*.rs: Any Rust change must run just test-rust
Any Rust change must run cargo fmt --all
Any Rust change must run cargo clippy --workspace --all-targets -- -D warnings

**/*.rs: Run cargo fmt --all for all FFI work since it is Rust work
Run just test-rust to validate FFI changes
Run cargo clippy --workspace --all-targets -- -D warnings to enforce strict linting on FFI work

When Rust files changed as part of Go work, also run cargo fmt --all, just test-rust, and cargo clippy --workspace --all-targets -- -D warnings

**/*.rs: Run cargo fmt --all when Rust files are changed as part of Node work
Run cargo clippy --workspace --all-targets -- -D warnings when Rust files are changed as part of Node work
Run just test-rust when Rust files are changed as part of Node work

When changing the core Rust runtime or Rust-facing API surface, format Rust code with cargo fmt (rustfmt defaults), keep cargo clippy -- -D warnings clean, and satisfy cargo deny check per deny.toml.

**/*.rs: If any Rust code changed, always run just test-rust.
If any Rust code changed, also run cargo fmt --all.
If any Rust code changed, also run cargo clippy --workspace --all-targets -- -D warnings.
For Rust changes headed for review, run cargo fmt --all and cargo clippy --workspace --all-targets -- -D warnings even if relying on pre-commit.

Files:

  • crates/cli/src/diagnostics/render.rs
  • crates/cli/src/process/launcher.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/src/diagnostics/model.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
**/*.{rs,py}

📄 CodeRabbit inference engine (AGENTS.md)

Follow binding naming conventions in Rust and Python: use snake_case.

Files:

  • crates/cli/src/diagnostics/render.rs
  • crates/cli/src/process/launcher.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/src/diagnostics/model.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
**/*.{rs,py,js,mjs,cjs,ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{rs,py,js,mjs,cjs,ts,tsx}: Use Json = serde_json::Value in Rust-facing runtime APIs where the existing code expects JSON payloads.
Use Result<T> with FlowError in core runtime paths, and keep errors explicit and binding-appropriate at the wrapper layer.
Keep async behavior on the existing tokio-based model; bindings should preserve callback and future lifetimes rather than blocking or hiding async work unexpectedly.

Files:

  • crates/cli/src/diagnostics/render.rs
  • crates/cli/src/process/launcher.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/src/diagnostics/model.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
**/*.{rs,py,go,js,ts,c,h}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Use language-appropriate naming conventions: Rust snake_case, C FFI exports prefixed nemo_relay_, Go PascalCase, Node.js camelCase, and Python snake_case.

Files:

  • crates/cli/src/diagnostics/render.rs
  • crates/cli/src/process/launcher.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/src/diagnostics/model.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
**/*.{rs,go,js,ts}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Add the SPDX license header to all Rust, Go, JavaScript, and TypeScript source files using the corresponding // comment form.

Files:

  • crates/cli/src/diagnostics/render.rs
  • crates/cli/src/process/launcher.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/src/diagnostics/model.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
{crates/**/src/**/*.rs,python/**/*.py}

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

Do not add tests under src; Rust tests belong in crate tests/ trees, and Python SDK tests belong under python/tests.

Files:

  • crates/cli/src/diagnostics/render.rs
  • crates/cli/src/process/launcher.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/src/diagnostics/model.rs
**/*

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

**/*: Format changed files with the language-native formatter before the final lint/test pass.
If dynamic plugin behavior changed, use maintain-dynamic-plugins and include the native SDK, worker protocol, Python SDK, docs, packaging, and Codecov surfaces in the validation plan.
If code changes alter APIs, bindings, commands, paths, packaging behavior, observability/adaptive semantics, or documented best practices, update any dependent maintainer or consumer skills in the same branch.
During iteration, prefer uv run pre-commit run --files <changed files...>.
Before review or handoff, run uv run pre-commit run --all-files.

Files:

  • crates/cli/src/diagnostics/render.rs
  • crates/cli/src/process/launcher.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/src/diagnostics/model.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
**/*.{rs,py,go,js,ts}

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

If a language surface changed, always run that language's test target even when Rust core did not change.

**/*.{rs,py,go,js,ts}: When observability configuration or lifecycle is exposed, keep FFI and Python, Go, and Node.js binding-native config objects and subscriber/exporter methods aligned in logical knobs and semantics.
Require every OpenTelemetry endpoint to have a type and nonblank destination; resolve header_env values at activation and reject missing, blank, or duplicate headers.
Concatenate layered ATOF sink, ATIF storage, and OpenTelemetry endpoint lists with higher-precedence entries first.
Preserve correct handling of mark events, start/end events, orphan cases, and span or trajectory fields derived from intended event data.
Run affected Rust tests and just test-rust when event fields change; run just test-python, just test-go, and just test-node when binding-native configuration or lifecycle changes.

Files:

  • crates/cli/src/diagnostics/render.rs
  • crates/cli/src/process/launcher.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/src/diagnostics/model.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
**/*.{rs,py,js,ts,tsx,go,java,kt,swift}

📄 CodeRabbit inference engine (.agents/skills/add-middleware/SKILL.md)

Add tests covering registration and duplicate names, deregistration and missing names, priority ordering, callback failure policy, scope-local inheritance and cleanup, event payload semantics, immutable mark and scope fields, and parity across affected bindings.

Files:

  • crates/cli/src/diagnostics/render.rs
  • crates/cli/src/process/launcher.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/src/diagnostics/model.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
{crates/**/tests/**,python/tests/**,go/nemo_relay/**/*_test.go}

⚙️ CodeRabbit configuration file

{crates/**/tests/**,python/tests/**,go/nemo_relay/**/*_test.go}: Tests should cover the behavior promised by the changed API surface, including error paths and cross-request isolation where relevant.
Prefer assertions on lifecycle events, scope stacks, middleware ordering, and binding parity over shallow smoke tests.

Files:

  • crates/cli/tests/cli_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
🔇 Additional comments (5)
crates/cli/src/diagnostics/model.rs (1)

67-107: 📐 Maintainability & Code Quality

Run required Rust validation.

Before merge, run cargo fmt --all, cargo clippy --workspace --all-targets -- -D warnings, and just test-rust. Attach the results.

As per coding guidelines, “Any Rust change must run just test-rust”, “Any Rust change must run cargo fmt --all”, and “Any Rust change must run cargo clippy --workspace --all-targets -- -D warnings”.

Source: Coding guidelines

crates/cli/src/diagnostics/mod.rs (1)

126-129: LGTM!

Also applies to: 142-208

crates/cli/src/diagnostics/render.rs (1)

114-118: LGTM!

crates/cli/src/process/launcher.rs (1)

614-625: LGTM!

Also applies to: 659-665

crates/cli/tests/coverage/shared/doctor_tests.rs (1)

10-10: LGTM!

Also applies to: 78-81, 257-269, 587-587, 610-611, 864-893

Comment thread crates/cli/tests/cli_tests.rs
Signed-off-by: mnajafian-nv <mnajafian@nvidia.com>
…-auth-presence-diagnostics

Signed-off-by: mnajafian-nv <mnajafian@nvidia.com>
@mnajafian-nv
mnajafian-nv marked this pull request as ready for review August 3, 2026 20:16

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Caution

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

⚠️ Outside diff range comments (1)
crates/cli/src/diagnostics/model.rs (1)

104-113: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Treat blank configured headers as unset.

Some("") and whitespace-only header values return Configured. These values cannot provide effective upstream authentication. This makes doctor and run --dry-run report a false configured state.

Add a regression test for blank configured OpenAI and Anthropic headers.

Proposed fix
-        if configured_auth_header.is_some() || env_var_is_nonempty(fallback_env_var) {
+        if configured_auth_header
+            .map(|value| !value.trim().is_empty())
+            .unwrap_or(false)
+            || env_var_is_nonempty(fallback_env_var)
+        {
🤖 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/cli/src/diagnostics/model.rs` around lines 104 - 113, Update
from_effective_provider_auth to treat configured_auth_header as present only
when it is non-empty after trimming whitespace, while preserving the fallback
environment-variable check. Add regression coverage verifying blank and
whitespace-only configured OpenAI and Anthropic headers are reported as Unset.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@crates/cli/src/diagnostics/model.rs`:
- Around line 104-113: Update from_effective_provider_auth to treat
configured_auth_header as present only when it is non-empty after trimming
whitespace, while preserving the fallback environment-variable check. Add
regression coverage verifying blank and whitespace-only configured OpenAI and
Anthropic headers are reported as Unset.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 08739e83-7e49-439e-8e0a-cfb65ba984d4

📥 Commits

Reviewing files that changed from the base of the PR and between e5701c4 and 524f9ab.

📒 Files selected for processing (5)
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/src/diagnostics/model.rs
  • crates/cli/src/process/launcher.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
  • GitHub Check: Rust / Test (macos-arm64)
  • GitHub Check: Rust / Test (linux-arm64)
  • GitHub Check: Rust / Test (windows-amd64)
  • GitHub Check: Rust / Test (linux-amd64)
  • GitHub Check: Rust / Test (windows-arm64)
🧰 Additional context used
📓 Path-based instructions (10)
**/*.rs

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

**/*.rs: Any Rust change must run just test-rust
Any Rust change must run cargo fmt --all
Any Rust change must run cargo clippy --workspace --all-targets -- -D warnings

**/*.rs: Run cargo fmt --all for all FFI work since it is Rust work
Run just test-rust to validate FFI changes
Run cargo clippy --workspace --all-targets -- -D warnings to enforce strict linting on FFI work

When Rust files changed as part of Go work, also run cargo fmt --all, just test-rust, and cargo clippy --workspace --all-targets -- -D warnings

**/*.rs: Run cargo fmt --all when Rust files are changed as part of Node work
Run cargo clippy --workspace --all-targets -- -D warnings when Rust files are changed as part of Node work
Run just test-rust when Rust files are changed as part of Node work

When changing the core Rust runtime or Rust-facing API surface, format Rust code with cargo fmt (rustfmt defaults), keep cargo clippy -- -D warnings clean, and satisfy cargo deny check per deny.toml.

**/*.rs: If any Rust code changed, always run just test-rust.
If any Rust code changed, also run cargo fmt --all.
If any Rust code changed, also run cargo clippy --workspace --all-targets -- -D warnings.
For Rust changes headed for review, run cargo fmt --all and cargo clippy --workspace --all-targets -- -D warnings even if relying on pre-commit.

Files:

  • crates/cli/src/process/launcher.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/diagnostics/model.rs
**/*.{rs,py}

📄 CodeRabbit inference engine (AGENTS.md)

Follow binding naming conventions in Rust and Python: use snake_case.

Files:

  • crates/cli/src/process/launcher.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/diagnostics/model.rs
**/*.{rs,py,js,mjs,cjs,ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{rs,py,js,mjs,cjs,ts,tsx}: Use Json = serde_json::Value in Rust-facing runtime APIs where the existing code expects JSON payloads.
Use Result<T> with FlowError in core runtime paths, and keep errors explicit and binding-appropriate at the wrapper layer.
Keep async behavior on the existing tokio-based model; bindings should preserve callback and future lifetimes rather than blocking or hiding async work unexpectedly.

Files:

  • crates/cli/src/process/launcher.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/diagnostics/model.rs
**/*.{rs,py,go,js,ts,c,h}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Use language-appropriate naming conventions: Rust snake_case, C FFI exports prefixed nemo_relay_, Go PascalCase, Node.js camelCase, and Python snake_case.

Files:

  • crates/cli/src/process/launcher.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/diagnostics/model.rs
**/*.{rs,go,js,ts}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Add the SPDX license header to all Rust, Go, JavaScript, and TypeScript source files using the corresponding // comment form.

Files:

  • crates/cli/src/process/launcher.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/diagnostics/model.rs
{crates/**/src/**/*.rs,python/**/*.py}

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

Do not add tests under src; Rust tests belong in crate tests/ trees, and Python SDK tests belong under python/tests.

Files:

  • crates/cli/src/process/launcher.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/src/diagnostics/model.rs
**/*

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

**/*: Format changed files with the language-native formatter before the final lint/test pass.
If dynamic plugin behavior changed, use maintain-dynamic-plugins and include the native SDK, worker protocol, Python SDK, docs, packaging, and Codecov surfaces in the validation plan.
If code changes alter APIs, bindings, commands, paths, packaging behavior, observability/adaptive semantics, or documented best practices, update any dependent maintainer or consumer skills in the same branch.
During iteration, prefer uv run pre-commit run --files <changed files...>.
Before review or handoff, run uv run pre-commit run --all-files.

Files:

  • crates/cli/src/process/launcher.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/diagnostics/model.rs
**/*.{rs,py,go,js,ts}

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

If a language surface changed, always run that language's test target even when Rust core did not change.

**/*.{rs,py,go,js,ts}: When observability configuration or lifecycle is exposed, keep FFI and Python, Go, and Node.js binding-native config objects and subscriber/exporter methods aligned in logical knobs and semantics.
Require every OpenTelemetry endpoint to have a type and nonblank destination; resolve header_env values at activation and reject missing, blank, or duplicate headers.
Concatenate layered ATOF sink, ATIF storage, and OpenTelemetry endpoint lists with higher-precedence entries first.
Preserve correct handling of mark events, start/end events, orphan cases, and span or trajectory fields derived from intended event data.
Run affected Rust tests and just test-rust when event fields change; run just test-python, just test-go, and just test-node when binding-native configuration or lifecycle changes.

Files:

  • crates/cli/src/process/launcher.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/diagnostics/model.rs
**/*.{rs,py,js,ts,tsx,go,java,kt,swift}

📄 CodeRabbit inference engine (.agents/skills/add-middleware/SKILL.md)

Add tests covering registration and duplicate names, deregistration and missing names, priority ordering, callback failure policy, scope-local inheritance and cleanup, event payload semantics, immutable mark and scope fields, and parity across affected bindings.

Files:

  • crates/cli/src/process/launcher.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/diagnostics/model.rs
{crates/**/tests/**,python/tests/**,go/nemo_relay/**/*_test.go}

⚙️ CodeRabbit configuration file

{crates/**/tests/**,python/tests/**,go/nemo_relay/**/*_test.go}: Tests should cover the behavior promised by the changed API surface, including error paths and cross-request isolation where relevant.
Prefer assertions on lifecycle events, scope stacks, middleware ordering, and binding parity over shallow smoke tests.

Files:

  • crates/cli/tests/cli_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
🧠 Learnings (1)
📚 Learning: 2026-08-03T19:55:03.931Z
Learnt from: afourniernv
Repo: NVIDIA/NeMo-Relay PR: 558
File: crates/pii-redaction/src/rampart/mod.rs:265-274
Timestamp: 2026-08-03T19:55:03.931Z
Learning: In NeMo Relay first-party plugin registration helpers, treat the documented duplicate-registration `PluginError::RegistrationFailed` result from `register_plugin` as success when registration is intended to be idempotent. Do not locally reclassify this as `PluginError::Conflict`; changing the classification requires a core-wide review of the public API and FFI behavior.

Applied to files:

  • crates/cli/src/process/launcher.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/diagnostics/model.rs
🔇 Additional comments (1)
crates/cli/src/diagnostics/model.rs (1)

74-129: 📐 Maintainability & Code Quality

Run the required Rust validation before handoff.

Run cargo fmt --all, cargo clippy --workspace --all-targets -- -D warnings, just test-rust, and uv run pre-commit run --all-files. Attach the results to the PR.

As per coding guidelines, “Any Rust change must run just test-rust,” “run cargo fmt --all,” and “run cargo clippy --workspace --all-targets -- -D warnings.”

Source: Coding guidelines

@willkill07

Copy link
Copy Markdown
Member

/merge

@rapids-bot
rapids-bot Bot merged commit a65e482 into NVIDIA:release/0.7 Aug 3, 2026
39 checks passed
@coderabbitai coderabbitai Bot mentioned this pull request Aug 3, 2026
2 tasks
@mnajafian-nv
mnajafian-nv deleted the fix/upstream-auth-presence-diagnostics branch August 4, 2026 19:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Bug issue describes bug; PR fixes bug lang:rust PR changes/introduces Rust code size:M PR is medium

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants