Skip to content

Forward-merge release/0.7 into main - #683

Merged
willkill07 merged 5 commits into
NVIDIA:mainfrom
willkill07:main-merge-release/0.7
Aug 4, 2026
Merged

Forward-merge release/0.7 into main#683
willkill07 merged 5 commits into
NVIDIA:mainfrom
willkill07:main-merge-release/0.7

Conversation

@willkill07

@willkill07 willkill07 commented Aug 4, 2026

Copy link
Copy Markdown
Member

Overview

Manually forward-merge release/0.7 into main after the automated forward-merger PR could not resolve its conflicts.

  • 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

  • Merge release/0.7 into main with a merge commit, preserving release history.
  • Regenerate the conflicted worker-plugin fixture Cargo.lock using just generate-worker-plugin-lockfile; no lockfile entries were edited by hand.

Validation:

  • cargo fmt --all
  • cargo clippy --workspace --all-targets -- -D warnings
  • just test-rust (fails: 88 tests, predominantly observability configuration-version and subsequent poisoned-lock failures in the combined merge tree; the representative upstream-main test passes)

Where should the reviewer start?

Review merge commit 6eb50f014, especially crates/core/tests/fixtures/worker_plugin/Cargo.lock for the generated conflict resolution.

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

Summary by CodeRabbit

  • New Features

    • Added doctor --offline to validate configuration and endpoints without live network probes.
    • Offline diagnostics now validate response-cache targets, OTLP/gRPC endpoints, and ATOF headers.
    • Improved diagnostic messages for reachability checks, connection failures, and timeouts.
  • Bug Fixes

    • Rust panics and cancelled asynchronous operations now surface safely as Python errors.
    • Improved handling of malformed URLs, unsupported schemes, blank headers, and duplicate header names.
  • Documentation

    • Updated doctor command help to describe offline diagnostics.

bbednarski9 and others added 5 commits August 4, 2026 01:50
#### Overview

Backport the narrowed Chrono feature set for shared serializable types to the 0.7 release line.

- [x] I confirm this contribution is my own work, or I have the right to submit it under this project's license.
- [x] I searched existing issues and open pull requests, and this does not duplicate existing work.

#### Details

- Disable Chrono default features in `nemo-relay-types` while retaining `std`, `serde`, and `now`.
- Regenerate the checked-in worker-plugin fixture lockfile from the `release/0.7` dependency graph.
- Keep the workspace `Cargo.lock` unchanged.

#### Where should the reviewer start?

Review `crates/types/Cargo.toml` for the feature declaration and `crates/core/tests/fixtures/worker_plugin/Cargo.lock` for the generated release fixture resolution.

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

- Relates to: NVIDIA#674




## Summary by CodeRabbit

* **Chores**
  * Updated date and time handling configuration to use only the required capabilities.
  * No visible changes to the user experience.

Authors:
  - Bryan Bednarski (https://github.com/bbednarski9)

Approvers:
  - Will Killian (https://github.com/willkill07)

URL: NVIDIA#678
#### Overview

Stabilize the macOS PTY job-control regression test by making its background-resume transition deterministic.

- [x] I confirm this contribution is my own work, or I have the right to submit it under this project's license.
- [x] I searched existing issues and open pull requests, and this does not duplicate existing work.

#### Details

The test previously issued the interactive shell `bg` command and waited for its prompt. On macOS CI, shell job bookkeeping could re-stop the job before the fake agent's `SIGCONT` handler ran, causing a timeout. The PTY driver now sends `SIGCONT` directly to Relay's stopped shell process group, which is the transition Relay must handle, while retaining the terminal ownership and foreground-handoff assertions.

#### Where should the reviewer start?

`crates/cli/tests/cli_tests.rs`, in `cli_transparent_run_preserves_interactive_terminal_job_control`.

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

- Relates to: none



## Summary by CodeRabbit

* **Bug Fixes**
  * Improved Unix terminal tests for resuming stopped Relay processes, providing more reliable validation of process continuation behavior.

Authors:
  - Will Killian (https://github.com/willkill07)

Approvers:
  - Bryan Bednarski (https://github.com/bbednarski9)
  - Maryam Najafian (https://github.com/mnajafian-nv)

URL: NVIDIA#680
#### Overview

Add an offline mode to `nemo-relay doctor` so observability diagnostics can validate configured exporters without requiring live network reachability. Live probe output now also makes it explicit when a check is only confirming HTTP reachability or gRPC TCP reachability.

- [x] I confirm this contribution is my own work, or I have the right to submit it under this repository license.
- [x] I searched existing issues and open pull requests, and this does not duplicate existing work.

#### Details

- add `--offline` to `nemo-relay doctor` and thread an explicit probe mode through the doctor collection path
- skip live OpenTelemetry, ATOF stream, and non-in-memory response-cache probes in offline mode while preserving config and endpoint validation
- clarify live probe messaging so HTTP checks are described as reachability probes and gRPC checks explicitly say the TCP port connected but the OTLP handshake was not verified
- add regression coverage for offline flag parsing, skipped probe behavior, malformed endpoint handling, and unchanged live probe behavior

**Validation:**
- `just test-rust`
- `cargo fmt --all`
- `cargo clippy --workspace --all-targets -- -D warnings`
- `uv run pre-commit run --files crates/cli/src/commands/diagnostics.rs crates/cli/src/commands/mod.rs crates/cli/src/commands/root.rs crates/cli/src/diagnostics/mod.rs crates/cli/src/diagnostics/probes.rs crates/cli/tests/coverage/commands/main_tests.rs crates/cli/tests/coverage/shared/doctor_tests.rs crates/cli/tests/coverage/shared/probes_tests.rs`
- `cargo test -p nemo-relay-cli doctor_accepts_offline_flag -- --nocapture`
- `cargo test -p nemo-relay-cli diagnostics::tests -- --nocapture`
- `cargo test -p nemo-relay-cli diagnostics::probes::tcp_tests -- --nocapture`

#### Where should the reviewer start?

Start in `crates/cli/src/diagnostics/mod.rs`, especially `observability_http_exporter_checks()` and `probe_atof_stream_sink()`. The most relevant regression coverage is in `crates/cli/tests/coverage/shared/doctor_tests.rs`.

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

- Relates to: none



## Summary by CodeRabbit

* **New Features**
  * Added an `--offline` option to the `doctor` command.
  * Offline diagnostics skip live network checks while still validating endpoint formats and configuration.
  * Improved diagnostics for reachability, connection failures, timeouts, and invalid endpoints.

* **Bug Fixes**
  * Improved health-check behavior and messaging for HTTP, gRPC, Redis, OpenTelemetry, and stream endpoints.

* **Tests**
  * Added coverage for offline mode, command parsing, endpoint validation, and diagnostic results.

Authors:
  - Maryam Najafian (https://github.com/mnajafian-nv)

Approvers:
  - Will Killian (https://github.com/willkill07)

URL: NVIDIA#670
…A#682)

#### Overview

Preserve `future_into_py` panic settlement for the closed-loop-safe tool execution bridge.

- [x] I confirm this contribution is my own work, or I have the right to submit it under this project's license.
- [x] I searched existing issues and open pull requests, and this does not duplicate existing work.

#### Details

- Use the closed-loop-safe completion bridge for `tool_call_execute`.
- Convert panicking Rust tasks into `pyo3_async_runtimes.RustPanic`, matching `future_into_py`.
- Add regression coverage for Python future settlement after a Rust panic.

#### Where should the reviewer start?

Start with `safe_future_into_py` in `crates/python/src/py_api/mod.rs` and `safe_future_into_py_settles_rust_panics` in the adjacent coverage test.

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

- Relates to NVIDIA#676


## Summary by CodeRabbit

* **Bug Fixes**
  * Improved reliability when running asynchronous operations from Python.
  * Rust panics and task failures are now converted into Python exceptions with readable error messages.
  * Preserved successful results and cancellation behavior during asynchronous execution.
  * Prevented completion callbacks from being scheduled after the Python event loop closes.

* **Tests**
  * Added coverage for panic handling, cancellation of pending operations, and closed event-loop behavior.

Authors:
  - Will Killian (https://github.com/willkill07)

Approvers:
  - Maryam Najafian (https://github.com/mnajafian-nv)

URL: NVIDIA#682
Signed-off-by: Will Killian <wkillian@nvidia.com>
@willkill07
willkill07 requested a review from a team as a code owner August 4, 2026 02:56
@github-actions github-actions Bot added size:XL PR is extra large Maintenance CI or Build or general repository maintenance lang:rust PR changes/introduces Rust code labels Aug 4, 2026
@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

The doctor command gains offline target validation and probe skipping. Endpoint and header validation is stricter. Python task bridging now handles panics and cancellation. Supporting tests and Chrono feature configuration are updated.

Changes

Offline doctor diagnostics

Layer / File(s) Summary
Doctor mode and target contracts
crates/adaptive/src/response_cache/store.rs, crates/cli/src/commands/diagnostics.rs, crates/cli/src/commands/mod.rs, crates/cli/src/commands/root.rs, crates/cli/src/diagnostics/mod.rs
The doctor command accepts --offline. Diagnostics carry DoctorProbeMode. Response-cache targets use shared validation.
Offline validation and live probe behavior
crates/cli/src/diagnostics/mod.rs, crates/cli/src/diagnostics/probes.rs
Offline checks validate cache, OpenTelemetry, and ATOF targets without network access. Live checks retain reachability probes with updated messages.
Doctor and probe coverage
crates/cli/tests/coverage/commands/main_tests.rs, crates/cli/tests/coverage/shared/doctor_tests.rs, crates/cli/tests/coverage/shared/probes_tests.rs
Tests cover offline parsing, validation failures, skipped probes, live diagnostics, and stricter ATOF headers.

Python async bridge

Layer / File(s) Summary
Rust task lifecycle and coverage
crates/python/src/py_api/mod.rs, crates/python/tests/coverage/py_api_coverage_tests.rs
Rust panics become Python errors. Cancelled tasks are aborted and awaited. Tests cover panic reporting, cancellation, future dropping, and closed event loops.

Supporting maintenance

Layer / File(s) Summary
PTY and dependency maintenance
crates/cli/tests/cli_tests.rs, crates/types/Cargo.toml
PTY tests resume the Relay process group with SIGCONT. Chrono features are narrowed to std, serde, and now.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Sequence Diagram(s)

sequenceDiagram
  participant DoctorCommand
  participant run_doctor
  participant Diagnostics
  participant TargetValidator
  participant NetworkProbe
  DoctorCommand->>run_doctor: select Live or Offline mode
  run_doctor->>Diagnostics: collect checks with probe mode
  Diagnostics->>TargetValidator: validate endpoint or backend target
  alt Offline mode
    TargetValidator-->>Diagnostics: validation result
    Diagnostics-->>run_doctor: informational skipped result
  else Live mode
    Diagnostics->>NetworkProbe: test HTTP, TCP, or stream reachability
    NetworkProbe-->>Diagnostics: probe result
    Diagnostics-->>run_doctor: live diagnostic result
  end
Loading

Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 1 warning)

Check name Status Explanation Resolution
Title check ❌ Error The title describes the merge but does not follow Conventional Commits format because it lacks an allowed lowercase type and colon. Use a title such as "chore: forward-merge release/0.7 into main" and keep it under 72 characters without a trailing period.
Docstring Coverage ⚠️ Warning Docstring coverage is 71.70% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 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.
Description check ✅ Passed The description includes all required sections, explains the merge and validation, identifies review starting points, and references issue #681.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@willkill07 willkill07 changed the title chore: forward-merge release/0.7 into main Forward-merge release/0.7 into main Aug 4, 2026
@github-actions github-actions Bot removed the Maintenance CI or Build or general repository maintenance label Aug 4, 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: 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/adaptive/src/response_cache/store.rs`:
- Around line 515-521: Update validate_redis_backend_target to map
redis::Client::open URL parsing failures to AdaptiveError::InvalidConfig instead
of AdaptiveError::Storage, while preserving the existing response_cache context
and successful validation behavior.

In `@crates/cli/src/diagnostics/mod.rs`:
- Around line 892-938: Update the endpoint probe branches around probe_tcp_named
and probe_otlp_http_named so every Check detail is unprefixed, including both
offline success and error arms. Apply the endpoints[index] and endpoint_type
prefix exactly once after the branch, preserving the existing offline status and
live probe behavior.
- Around line 1137-1152: Update the transport dispatch associated with
validate_atof_stream_probe_target to remove the fallback `_`
unsupported-transport arm, or replace it with unreachable!, since validation
already restricts transports to http_post, ndjson, and websocket in both modes.
Keep the explicit supported transport arms unchanged.
- Around line 731-751: Update the response-cache diagnostics flow around
validate_backend_target and check_backend_health to validate the configured
backend target in both offline and live modes before any health probe. Preserve
the offline failure and informational behavior, while returning the same
“invalid backend target” failure for malformed targets in live mode; update
affected redis-backend feature assertions to expect this validation error
instead of the prior probe/build-path message.
🪄 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: 9e39a225-c70e-461f-a9e1-58547cb32301

📥 Commits

Reviewing files that changed from the base of the PR and between 7be3c20 and 6eb50f0.

⛔ Files ignored due to path filters (1)
  • crates/core/tests/fixtures/worker_plugin/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (13)
  • crates/adaptive/src/response_cache/store.rs
  • crates/cli/src/commands/diagnostics.rs
  • crates/cli/src/commands/mod.rs
  • crates/cli/src/commands/root.rs
  • crates/cli/src/diagnostics/mod.rs
  • crates/cli/src/diagnostics/probes.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/tests/coverage/commands/main_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/tests/coverage/shared/probes_tests.rs
  • crates/python/src/py_api/mod.rs
  • crates/python/tests/coverage/py_api_coverage_tests.rs
  • crates/types/Cargo.toml
📜 Review details
⏰ Context from checks skipped due to timeout. (2)
  • GitHub Check: Check / Run
  • GitHub Check: Preview docs
🧰 Additional context used
📓 Path-based instructions (22)
**/*.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

**/*.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.

**/*.rs: Format Rust code with rustfmt defaults using cargo fmt.
Run cargo clippy -- -D warnings; all Rust warnings must be treated as errors.
Use Rust snake_case naming conventions.

Files:

  • crates/cli/src/commands/mod.rs
  • crates/python/src/py_api/mod.rs
  • crates/cli/tests/coverage/shared/probes_tests.rs
  • crates/cli/tests/coverage/commands/main_tests.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/commands/diagnostics.rs
  • crates/python/tests/coverage/py_api_coverage_tests.rs
  • crates/cli/src/diagnostics/probes.rs
  • crates/adaptive/src/response_cache/store.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/commands/root.rs
  • crates/cli/src/diagnostics/mod.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/commands/mod.rs
  • crates/python/src/py_api/mod.rs
  • crates/cli/src/commands/diagnostics.rs
  • crates/cli/src/diagnostics/probes.rs
  • crates/adaptive/src/response_cache/store.rs
  • crates/cli/src/commands/root.rs
  • crates/cli/src/diagnostics/mod.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.

**/*: Use release tags in raw Rust-compatible SemVer without a leading v; tags such as v0.1.0 are prohibited.
Use branch prefixes feat/, fix/, docs/, test/, or refactor/ according to the change purpose.
Every commit in a pull request must include a DCO Signed-off-by: sign-off.
Before submitting a pull request, ensure pre-commit hooks, relevant tests, target-specific builds, documentation updates, and a rebase on the latest main are complete.
Use commit messages in the form type: short description, with a valid type and a first line under 72 characters.

Files:

  • crates/cli/src/commands/mod.rs
  • crates/python/src/py_api/mod.rs
  • crates/types/Cargo.toml
  • crates/cli/tests/coverage/shared/probes_tests.rs
  • crates/cli/tests/coverage/commands/main_tests.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/commands/diagnostics.rs
  • crates/python/tests/coverage/py_api_coverage_tests.rs
  • crates/cli/src/diagnostics/probes.rs
  • crates/adaptive/src/response_cache/store.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/commands/root.rs
  • crates/cli/src/diagnostics/mod.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/commands/mod.rs
  • crates/python/src/py_api/mod.rs
  • crates/cli/tests/coverage/shared/probes_tests.rs
  • crates/cli/tests/coverage/commands/main_tests.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/commands/diagnostics.rs
  • crates/python/tests/coverage/py_api_coverage_tests.rs
  • crates/cli/src/diagnostics/probes.rs
  • crates/adaptive/src/response_cache/store.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/commands/root.rs
  • crates/cli/src/diagnostics/mod.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/commands/mod.rs
  • crates/python/src/py_api/mod.rs
  • crates/cli/tests/coverage/shared/probes_tests.rs
  • crates/cli/tests/coverage/commands/main_tests.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/commands/diagnostics.rs
  • crates/python/tests/coverage/py_api_coverage_tests.rs
  • crates/cli/src/diagnostics/probes.rs
  • crates/adaptive/src/response_cache/store.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/commands/root.rs
  • crates/cli/src/diagnostics/mod.rs
**/*.{rs,py,js,jsx,ts,tsx,go,c,h,cc,cpp,md,toml,yml,yaml,sh}

📄 CodeRabbit inference engine (AGENTS.md)

Keep SPDX headers on source, documentation, scripts, and configuration files; the project is Apache-2.0.

Files:

  • crates/cli/src/commands/mod.rs
  • crates/python/src/py_api/mod.rs
  • crates/types/Cargo.toml
  • crates/cli/tests/coverage/shared/probes_tests.rs
  • crates/cli/tests/coverage/commands/main_tests.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/commands/diagnostics.rs
  • crates/python/tests/coverage/py_api_coverage_tests.rs
  • crates/cli/src/diagnostics/probes.rs
  • crates/adaptive/src/response_cache/store.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/commands/root.rs
  • crates/cli/src/diagnostics/mod.rs
**/*.{rs,py}

📄 CodeRabbit inference engine (AGENTS.md)

Use snake_case naming in Rust and Python.

Files:

  • crates/cli/src/commands/mod.rs
  • crates/python/src/py_api/mod.rs
  • crates/cli/tests/coverage/shared/probes_tests.rs
  • crates/cli/tests/coverage/commands/main_tests.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/commands/diagnostics.rs
  • crates/python/tests/coverage/py_api_coverage_tests.rs
  • crates/cli/src/diagnostics/probes.rs
  • crates/adaptive/src/response_cache/store.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/commands/root.rs
  • crates/cli/src/diagnostics/mod.rs
crates/**/*.rs

📄 CodeRabbit inference engine (AGENTS.md)

crates/**/*.rs: Use Json = serde_json::Value in Rust-facing runtime APIs where existing code expects JSON payloads.
Treat Rust as the source of truth for runtime behavior; binding APIs should mirror Rust semantics unless a language-specific wrapper intentionally improves ergonomics.

Files:

  • crates/cli/src/commands/mod.rs
  • crates/python/src/py_api/mod.rs
  • crates/cli/tests/coverage/shared/probes_tests.rs
  • crates/cli/tests/coverage/commands/main_tests.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/commands/diagnostics.rs
  • crates/python/tests/coverage/py_api_coverage_tests.rs
  • crates/cli/src/diagnostics/probes.rs
  • crates/adaptive/src/response_cache/store.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/commands/root.rs
  • crates/cli/src/diagnostics/mod.rs
**/*.{rs,py,js,mjs,ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Preserve the existing Tokio-based asynchronous model and callback/future lifetimes; do not unexpectedly block or hide async work in bindings.

Files:

  • crates/cli/src/commands/mod.rs
  • crates/python/src/py_api/mod.rs
  • crates/cli/tests/coverage/shared/probes_tests.rs
  • crates/cli/tests/coverage/commands/main_tests.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/commands/diagnostics.rs
  • crates/python/tests/coverage/py_api_coverage_tests.rs
  • crates/cli/src/diagnostics/probes.rs
  • crates/adaptive/src/response_cache/store.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/commands/root.rs
  • crates/cli/src/diagnostics/mod.rs
**/*.{rs,py,go,js,jsx,ts,tsx,c,h}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

**/*.{rs,py,go,js,jsx,ts,tsx,c,h}: Run tests for every language affected by a change; changes to the core Rust crate require tests across all bindings.
Use SONAR_IGNORE_START / SONAR_IGNORE_END only for documented false positives, keep ignored blocks minimal, explain them with a comment, and obtain reviewer sign-off.
Preserve the layered architecture in which Rust provides the core runtime and C FFI, PyO3, and NAPI provide bindings that mirror the full API surface.

Files:

  • crates/cli/src/commands/mod.rs
  • crates/python/src/py_api/mod.rs
  • crates/cli/tests/coverage/shared/probes_tests.rs
  • crates/cli/tests/coverage/commands/main_tests.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/commands/diagnostics.rs
  • crates/python/tests/coverage/py_api_coverage_tests.rs
  • crates/cli/src/diagnostics/probes.rs
  • crates/adaptive/src/response_cache/store.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/commands/root.rs
  • crates/cli/src/diagnostics/mod.rs
**/*.{rs,py,go,js,jsx,ts,tsx,c,h,html,md,mdx,toml}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Include the appropriate SPDX copyright and Apache-2.0 license header in every source file.

Files:

  • crates/cli/src/commands/mod.rs
  • crates/python/src/py_api/mod.rs
  • crates/types/Cargo.toml
  • crates/cli/tests/coverage/shared/probes_tests.rs
  • crates/cli/tests/coverage/commands/main_tests.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/commands/diagnostics.rs
  • crates/python/tests/coverage/py_api_coverage_tests.rs
  • crates/cli/src/diagnostics/probes.rs
  • crates/adaptive/src/response_cache/store.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/commands/root.rs
  • crates/cli/src/diagnostics/mod.rs
{crates/python/src/py_api/mod.rs,python/nemo_relay/**/*.py,python/nemo_relay/**/*.pyi,go/nemo_relay/**/*.go,crates/node/src/api/**/*.rs}

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

Update the language-native bindings for every exposed surface in Python, Go, and Node.js.

Files:

  • crates/python/src/py_api/mod.rs
crates/{python,ffi,node}/**/*

⚙️ CodeRabbit configuration file

crates/{python,ffi,node}/**/*: Treat binding changes as public API changes. Check for parity with the other language bindings, FFI ownership/lifetime safety,
callback error propagation, stable type conversion, and consistent async/stream semantics.
Flag changes that update one binding without corresponding tests or documentation for the same surface elsewhere.

Files:

  • crates/python/src/py_api/mod.rs
  • crates/python/tests/coverage/py_api_coverage_tests.rs
{crates/core/src/plugin/dynamic/**,crates/plugin/**,crates/worker/**,crates/worker-proto/**,crates/types/**,python/plugin/**,examples/rust-native-plugin/**,examples/python-grpc-worker-plugin/**,docs/build-plugins/**}

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

Keep the stable boundary explicit: native plugins cross a C ABI, and worker plugins cross grpc-v1.

Files:

  • crates/types/Cargo.toml
**/Cargo.toml

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

Keep Rust package names and workspace metadata in Cargo.toml internally consistent across the project.

OpenTelemetry and OpenInference dependencies must be unconditional rather than Cargo feature-gated.

Run just set-version <next-version> to bump all release-versioned package surfaces on main.

Files:

  • crates/types/Cargo.toml
**/*.{yaml,yml,toml,json}

📄 CodeRabbit inference engine (CONTRIBUTING.md)

Maintain valid YAML, TOML, and JSON files; pre-commit hooks validate these formats.

Files:

  • crates/types/Cargo.toml
**/{test,tests}/**/*

📄 CodeRabbit inference engine (CONTRIBUTING.md)

When adding functionality, include tests in the appropriate test files for each affected language binding.

Files:

  • crates/cli/tests/coverage/shared/probes_tests.rs
  • crates/cli/tests/coverage/commands/main_tests.rs
  • crates/cli/tests/cli_tests.rs
  • crates/python/tests/coverage/py_api_coverage_tests.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/coverage/shared/probes_tests.rs
  • crates/cli/tests/coverage/commands/main_tests.rs
  • crates/cli/tests/cli_tests.rs
  • crates/python/tests/coverage/py_api_coverage_tests.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
{crates/core,crates/adaptive}/**/*

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

Changes to crates/core or crates/adaptive must run the full language matrix

Files:

  • crates/adaptive/src/response_cache/store.rs
crates/adaptive/**

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

Keep crates/adaptive aligned with the canonical adaptive config schema, built-in section helpers, plugin lifecycle, and validation/report behavior.

Files:

  • crates/adaptive/src/response_cache/store.rs
crates/{core,adaptive}/**/*

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

If crates/core or crates/adaptive changed, run the full validation matrix across Rust, Python, Go, and Node.js.

Files:

  • crates/adaptive/src/response_cache/store.rs
crates/{core,adaptive}/**/*.rs

⚙️ CodeRabbit configuration file

crates/{core,adaptive}/**/*.rs: Review the Rust runtime for async correctness, scope isolation, middleware ordering, and event lifecycle regressions.
Pay close attention to task-local/thread-local scope propagation, callback lifetimes, stream finalization, and root_uuid isolation.
Public API changes should preserve existing behavior unless tests and docs show the intended migration path.

Files:

  • crates/adaptive/src/response_cache/store.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/commands/mod.rs
  • crates/python/src/py_api/mod.rs
  • crates/cli/tests/coverage/shared/probes_tests.rs
  • crates/cli/tests/coverage/commands/main_tests.rs
  • crates/cli/tests/cli_tests.rs
  • crates/cli/src/commands/diagnostics.rs
  • crates/python/tests/coverage/py_api_coverage_tests.rs
  • crates/cli/src/diagnostics/probes.rs
  • crates/adaptive/src/response_cache/store.rs
  • crates/cli/tests/coverage/shared/doctor_tests.rs
  • crates/cli/src/commands/root.rs
  • crates/cli/src/diagnostics/mod.rs
🔇 Additional comments (19)
crates/python/src/py_api/mod.rs (1)

111-174: 📐 Maintainability & Code Quality

Run the required Rust validation before merge.

The supplied context does not include successful validation results for these Rust changes.

  • crates/python/src/py_api/mod.rs#L111-L174: Run formatting, strict Clippy, and Rust tests for the async bridge change.
  • crates/python/tests/coverage/py_api_coverage_tests.rs#L9-L177: Run the same validation after adding the coverage tests.

Run cargo fmt --all, cargo clippy --workspace --all-targets -- -D warnings, and just test-rust. As per coding guidelines, every Rust change requires these commands before review.

Source: Coding guidelines

crates/cli/tests/cli_tests.rs (1)

4080-4082: LGTM!

Also applies to: 4103-4103

crates/types/Cargo.toml (1)

21-21: 📐 Maintainability & Code Quality

Run the required Rust and lockfile 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. Regenerate the worker-plugin fixture lockfile with just generate-worker-plugin-lockfile and confirm that it matches this dependency configuration.

As per coding guidelines, Rust changes require these formatter, lint, test, and pre-commit checks.

Source: Coding guidelines

crates/adaptive/src/response_cache/store.rs (2)

448-458: LGTM!


480-480: LGTM!

Also applies to: 502-513

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

24-28: LGTM!

Also applies to: 49-49

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

236-243: LGTM!

crates/cli/src/commands/root.rs (1)

115-115: LGTM!

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

49-63: LGTM!

Also applies to: 76-76, 151-151


589-589: LGTM!

Also applies to: 650-650, 659-665, 674-674, 780-792, 861-864, 1087-1103, 1533-1537


1227-1234: LGTM!

Also applies to: 1258-1259

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

69-93: LGTM!

Also applies to: 104-119, 121-148

crates/cli/tests/coverage/commands/main_tests.rs (1)

356-363: LGTM!

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

104-123: LGTM!


1090-1101: LGTM!

Also applies to: 1134-1147, 1160-1172, 1185-1198, 1202-1289


1345-1345: LGTM!

Also applies to: 1382-1382, 1416-1416, 1556-1556, 1588-1588, 1638-1638, 1670-1670, 1706-1706, 1733-1745, 1790-1790, 2228-2228, 2260-2260


1844-1876: LGTM!

Also applies to: 1894-1913, 1924-2006


1430-1520: 🎯 Functional Correctness

No gating is required for these Redis tests. The CLI crate enables nemo-relay-adaptive with features = ["redis-backend"].

			> Likely an incorrect or invalid review comment.
crates/cli/tests/coverage/shared/probes_tests.rs (1)

12-17: LGTM!

Also applies to: 28-48

Comment thread crates/adaptive/src/response_cache/store.rs
Comment thread crates/cli/src/diagnostics/mod.rs
Comment thread crates/cli/src/diagnostics/mod.rs
Comment thread crates/cli/src/diagnostics/mod.rs
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

License Diff

Compared against origin/main.

Lockfile license changes

Lockfile License Changes

Rust

Added

  • None

Removed

  • None

Updated/Changed

  • None

Node

Added

  • None

Removed

  • None

Updated/Changed

  • None

Python

Added

  • None

Removed

  • None

Updated/Changed

  • None
Status output
[license-diff] selected languages: rust, node, python
[license-diff] generating current inventory
[license-diff] current: generating Rust inventory
[license-diff] current: Rust inventory complete (449 packages)
[license-diff] current: generating Node inventory
[license-diff] current: Node inventory complete (367 packages)
[license-diff] current: generating Python inventory
[license-diff] current: Python inventory complete (105 packages)
[license-diff] current inventory complete
[license-diff] checking out base ref origin/main into a temporary worktree
[license-diff] base: generating Rust inventory
[license-diff] base: Rust inventory complete (449 packages)
[license-diff] base: generating Node inventory
[license-diff] base: Node inventory complete (367 packages)
[license-diff] base: generating Python inventory
[license-diff] base: Python inventory complete (105 packages)
[license-diff] base inventory complete
[license-diff] removing temporary base worktree
[license-diff] comparing inventories
[license-diff] rendering Markdown output
[license-diff] done

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

@AjayThorve AjayThorve left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Lgtm

@willkill07

Copy link
Copy Markdown
Member Author

/merge nosquash

@rapids-bot

rapids-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown

Could not determine original ForwardMerger PR from branch name. The branch name should follow the pattern <target_branch>-merge-<source_branch> (e.g., branch-25.06-merge-branch-25.04 or main-merge-release/25.06). Please contact @rapidsdevops on Slack for assistance.

1 similar comment
@rapids-bot

rapids-bot Bot commented Aug 4, 2026

Copy link
Copy Markdown

Could not determine original ForwardMerger PR from branch name. The branch name should follow the pattern <target_branch>-merge-<source_branch> (e.g., branch-25.06-merge-branch-25.04 or main-merge-release/25.06). Please contact @rapidsdevops on Slack for assistance.

@willkill07
willkill07 merged commit 81167be into NVIDIA:main Aug 4, 2026
82 of 83 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lang:rust PR changes/introduces Rust code size:XL PR is extra large

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants