Forward-merge release/0.7 into main - #683
Conversation
#### 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>
WalkthroughThe 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. ChangesOffline doctor diagnostics
Python async bridge
Supporting maintenance
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
Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 error, 1 warning)
✅ Passed checks (3 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@crates/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
⛔ Files ignored due to path filters (1)
crates/core/tests/fixtures/worker_plugin/Cargo.lockis excluded by!**/*.lock
📒 Files selected for processing (13)
crates/adaptive/src/response_cache/store.rscrates/cli/src/commands/diagnostics.rscrates/cli/src/commands/mod.rscrates/cli/src/commands/root.rscrates/cli/src/diagnostics/mod.rscrates/cli/src/diagnostics/probes.rscrates/cli/tests/cli_tests.rscrates/cli/tests/coverage/commands/main_tests.rscrates/cli/tests/coverage/shared/doctor_tests.rscrates/cli/tests/coverage/shared/probes_tests.rscrates/python/src/py_api/mod.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/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 runjust test-rust
Any Rust change must runcargo fmt --all
Any Rust change must runcargo clippy --workspace --all-targets -- -D warnings
**/*.rs: Runcargo fmt --allfor all FFI work since it is Rust work
Runjust test-rustto validate FFI changes
Runcargo clippy --workspace --all-targets -- -D warningsto enforce strict linting on FFI workWhen Rust files changed as part of Go work, also run
cargo fmt --all,just test-rust, andcargo clippy --workspace --all-targets -- -D warnings
**/*.rs: Runcargo fmt --allwhen Rust files are changed as part of Node work
Runcargo clippy --workspace --all-targets -- -D warningswhen Rust files are changed as part of Node work
Runjust test-rustwhen Rust files are changed as part of Node work
**/*.rs: If any Rust code changed, always runjust test-rust.
If any Rust code changed, also runcargo fmt --all.
If any Rust code changed, also runcargo clippy --workspace --all-targets -- -D warnings.
For Rust changes headed for review, runcargo fmt --allandcargo clippy --workspace --all-targets -- -D warningseven if relying on pre-commit.
**/*.rs: Format Rust code with rustfmt defaults usingcargo fmt.
Runcargo clippy -- -D warnings; all Rust warnings must be treated as errors.
Use Rustsnake_casenaming conventions.
Files:
crates/cli/src/commands/mod.rscrates/python/src/py_api/mod.rscrates/cli/tests/coverage/shared/probes_tests.rscrates/cli/tests/coverage/commands/main_tests.rscrates/cli/tests/cli_tests.rscrates/cli/src/commands/diagnostics.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/cli/src/diagnostics/probes.rscrates/adaptive/src/response_cache/store.rscrates/cli/tests/coverage/shared/doctor_tests.rscrates/cli/src/commands/root.rscrates/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 cratetests/trees, and Python SDK tests belong underpython/tests.
Files:
crates/cli/src/commands/mod.rscrates/python/src/py_api/mod.rscrates/cli/src/commands/diagnostics.rscrates/cli/src/diagnostics/probes.rscrates/adaptive/src/response_cache/store.rscrates/cli/src/commands/root.rscrates/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, usemaintain-dynamic-pluginsand 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, preferuv run pre-commit run --files <changed files...>.
Before review or handoff, runuv run pre-commit run --all-files.
**/*: Use release tags in raw Rust-compatible SemVer without a leadingv; tags such asv0.1.0are prohibited.
Use branch prefixesfeat/,fix/,docs/,test/, orrefactor/according to the change purpose.
Every commit in a pull request must include a DCOSigned-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 latestmainare complete.
Use commit messages in the formtype: short description, with a valid type and a first line under 72 characters.
Files:
crates/cli/src/commands/mod.rscrates/python/src/py_api/mod.rscrates/types/Cargo.tomlcrates/cli/tests/coverage/shared/probes_tests.rscrates/cli/tests/coverage/commands/main_tests.rscrates/cli/tests/cli_tests.rscrates/cli/src/commands/diagnostics.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/cli/src/diagnostics/probes.rscrates/adaptive/src/response_cache/store.rscrates/cli/tests/coverage/shared/doctor_tests.rscrates/cli/src/commands/root.rscrates/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; resolveheader_envvalues 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 andjust test-rustwhen event fields change; runjust test-python,just test-go, andjust test-nodewhen binding-native configuration or lifecycle changes.
Files:
crates/cli/src/commands/mod.rscrates/python/src/py_api/mod.rscrates/cli/tests/coverage/shared/probes_tests.rscrates/cli/tests/coverage/commands/main_tests.rscrates/cli/tests/cli_tests.rscrates/cli/src/commands/diagnostics.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/cli/src/diagnostics/probes.rscrates/adaptive/src/response_cache/store.rscrates/cli/tests/coverage/shared/doctor_tests.rscrates/cli/src/commands/root.rscrates/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.rscrates/python/src/py_api/mod.rscrates/cli/tests/coverage/shared/probes_tests.rscrates/cli/tests/coverage/commands/main_tests.rscrates/cli/tests/cli_tests.rscrates/cli/src/commands/diagnostics.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/cli/src/diagnostics/probes.rscrates/adaptive/src/response_cache/store.rscrates/cli/tests/coverage/shared/doctor_tests.rscrates/cli/src/commands/root.rscrates/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.rscrates/python/src/py_api/mod.rscrates/types/Cargo.tomlcrates/cli/tests/coverage/shared/probes_tests.rscrates/cli/tests/coverage/commands/main_tests.rscrates/cli/tests/cli_tests.rscrates/cli/src/commands/diagnostics.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/cli/src/diagnostics/probes.rscrates/adaptive/src/response_cache/store.rscrates/cli/tests/coverage/shared/doctor_tests.rscrates/cli/src/commands/root.rscrates/cli/src/diagnostics/mod.rs
**/*.{rs,py}
📄 CodeRabbit inference engine (AGENTS.md)
Use
snake_casenaming in Rust and Python.
Files:
crates/cli/src/commands/mod.rscrates/python/src/py_api/mod.rscrates/cli/tests/coverage/shared/probes_tests.rscrates/cli/tests/coverage/commands/main_tests.rscrates/cli/tests/cli_tests.rscrates/cli/src/commands/diagnostics.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/cli/src/diagnostics/probes.rscrates/adaptive/src/response_cache/store.rscrates/cli/tests/coverage/shared/doctor_tests.rscrates/cli/src/commands/root.rscrates/cli/src/diagnostics/mod.rs
crates/**/*.rs
📄 CodeRabbit inference engine (AGENTS.md)
crates/**/*.rs: UseJson = serde_json::Valuein 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.rscrates/python/src/py_api/mod.rscrates/cli/tests/coverage/shared/probes_tests.rscrates/cli/tests/coverage/commands/main_tests.rscrates/cli/tests/cli_tests.rscrates/cli/src/commands/diagnostics.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/cli/src/diagnostics/probes.rscrates/adaptive/src/response_cache/store.rscrates/cli/tests/coverage/shared/doctor_tests.rscrates/cli/src/commands/root.rscrates/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.rscrates/python/src/py_api/mod.rscrates/cli/tests/coverage/shared/probes_tests.rscrates/cli/tests/coverage/commands/main_tests.rscrates/cli/tests/cli_tests.rscrates/cli/src/commands/diagnostics.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/cli/src/diagnostics/probes.rscrates/adaptive/src/response_cache/store.rscrates/cli/tests/coverage/shared/doctor_tests.rscrates/cli/src/commands/root.rscrates/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.
UseSONAR_IGNORE_START/SONAR_IGNORE_ENDonly 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.rscrates/python/src/py_api/mod.rscrates/cli/tests/coverage/shared/probes_tests.rscrates/cli/tests/coverage/commands/main_tests.rscrates/cli/tests/cli_tests.rscrates/cli/src/commands/diagnostics.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/cli/src/diagnostics/probes.rscrates/adaptive/src/response_cache/store.rscrates/cli/tests/coverage/shared/doctor_tests.rscrates/cli/src/commands/root.rscrates/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.rscrates/python/src/py_api/mod.rscrates/types/Cargo.tomlcrates/cli/tests/coverage/shared/probes_tests.rscrates/cli/tests/coverage/commands/main_tests.rscrates/cli/tests/cli_tests.rscrates/cli/src/commands/diagnostics.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/cli/src/diagnostics/probes.rscrates/adaptive/src/response_cache/store.rscrates/cli/tests/coverage/shared/doctor_tests.rscrates/cli/src/commands/root.rscrates/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.rscrates/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.tomlinternally 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 onmain.
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.rscrates/cli/tests/coverage/commands/main_tests.rscrates/cli/tests/cli_tests.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/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.rscrates/cli/tests/coverage/commands/main_tests.rscrates/cli/tests/cli_tests.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/cli/tests/coverage/shared/doctor_tests.rs
{crates/core,crates/adaptive}/**/*
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
Changes to
crates/coreorcrates/adaptivemust 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/adaptivealigned 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/coreorcrates/adaptivechanged, 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.rscrates/python/src/py_api/mod.rscrates/cli/tests/coverage/shared/probes_tests.rscrates/cli/tests/coverage/commands/main_tests.rscrates/cli/tests/cli_tests.rscrates/cli/src/commands/diagnostics.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/cli/src/diagnostics/probes.rscrates/adaptive/src/response_cache/store.rscrates/cli/tests/coverage/shared/doctor_tests.rscrates/cli/src/commands/root.rscrates/cli/src/diagnostics/mod.rs
🔇 Additional comments (19)
crates/python/src/py_api/mod.rs (1)
111-174: 📐 Maintainability & Code QualityRun 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, andjust 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 QualityRun the required Rust and lockfile validation before handoff.
Run
cargo fmt --all,cargo clippy --workspace --all-targets -- -D warnings,just test-rust, anduv run pre-commit run --all-files. Regenerate the worker-plugin fixture lockfile withjust generate-worker-plugin-lockfileand 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 CorrectnessNo gating is required for these Redis tests. The CLI crate enables
nemo-relay-adaptivewithfeatures = ["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
License DiffCompared against Lockfile license changesLockfile License ChangesRustAdded
Removed
Updated/Changed
NodeAdded
Removed
Updated/Changed
PythonAdded
Removed
Updated/Changed
Status output |
|
/merge nosquash |
|
Could not determine original ForwardMerger PR from branch name. The branch name should follow the pattern |
1 similar comment
|
Could not determine original ForwardMerger PR from branch name. The branch name should follow the pattern |
Overview
Manually forward-merge
release/0.7intomainafter the automated forward-merger PR could not resolve its conflicts.Details
release/0.7intomainwith a merge commit, preserving release history.Cargo.lockusingjust generate-worker-plugin-lockfile; no lockfile entries were edited by hand.Validation:
cargo fmt --allcargo clippy --workspace --all-targets -- -D warningsjust 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, especiallycrates/core/tests/fixtures/worker_plugin/Cargo.lockfor the generated conflict resolution.Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)
Summary by CodeRabbit
New Features
doctor --offlineto validate configuration and endpoints without live network probes.Bug Fixes
Documentation
doctorcommand help to describe offline diagnostics.