test: raise Rust and binding coverage - #634
Conversation
Signed-off-by: Will Killian <wkillian@nvidia.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Enterprise Run ID: 📒 Files selected for processing (1)
📜 Recent review details⏰ Context from checks skipped due to timeout. (2)
🧰 Additional context used📓 Path-based instructions (13)**/*.rs📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
Files:
{crates/core,crates/adaptive}/**/*📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
Files:
crates/core/**/*.rs📄 CodeRabbit inference engine (.agents/skills/test-go-binding/SKILL.md)
Files:
**/*.{rs,py}📄 CodeRabbit inference engine (AGENTS.md)
Files:
**/*.{rs,py,js,mjs,cjs,ts,tsx}📄 CodeRabbit inference engine (AGENTS.md)
Files:
**/*.{rs,py,go,js,ts,c,h}📄 CodeRabbit inference engine (CONTRIBUTING.md)
Files:
**/*.{rs,go,js,ts}📄 CodeRabbit inference engine (CONTRIBUTING.md)
Files:
**/*📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
Files:
crates/{core,adaptive}/**/*📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
Files:
**/*.{rs,py,go,js,ts}📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
Files:
**/*.{rs,py,js,ts,tsx,go,java,kt,swift}📄 CodeRabbit inference engine (.agents/skills/add-middleware/SKILL.md)
Files:
crates/{core,adaptive}/**/*.rs⚙️ CodeRabbit configuration file
Files:
{crates/**/tests/**,python/tests/**,go/nemo_relay/**/*_test.go}⚙️ CodeRabbit configuration file
Files:
🔇 Additional comments (1)
WalkthroughThis PR expands regression and edge-case coverage across adaptive, core, FFI, plugin, Python, Node.js, and Go tests. It also extracts reusable helpers for assertions, fixtures, status checks, callback state, and isolated test environments. ChangesCross-language test coverage and maintainability
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 10
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
crates/ffi/tests/unit/api/core_tests.rs (1)
1143-1150: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd
#[track_caller]toassert_invalid_timestamp.The function is called from seven sites (lines 1158, 1189, 1200, 1230, 1252, 1282, 1300). Without
#[track_caller], every failure reports line 1144. The attribute onassert_native_statusalone does not help, because the location stops at this helper.♻️ Proposed fix
+ #[track_caller] fn assert_invalid_timestamp(status: NemoRelayStatus) { assert_status!(status, NemoRelayStatus::InvalidArg);🤖 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/ffi/tests/unit/api/core_tests.rs` around lines 1143 - 1150, Add the #[track_caller] attribute directly to the assert_invalid_timestamp helper so assertion failures report the originating test call site rather than the helper’s definition; leave its existing status and error-message checks unchanged.crates/ffi/tests/unit/callable_tests.rs (1)
659-720: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueThe
LlmHandleassertion does not belong inassert_event_callbacks.Lines 715-719 build an
LlmHandleand assert its name. That check is unrelated to event subscribers and sanitizers. The refactor is an opportunity to move it into its own helper or drop it, since a builder-name assertion adds no callback coverage.🤖 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/ffi/tests/unit/callable_tests.rs` around lines 659 - 720, The unrelated LlmHandle builder assertion should not remain in assert_event_callbacks. Remove the LlmHandle construction and name check from assert_event_callbacks, or relocate it to a dedicated handle-focused test only if that coverage is required; keep the event subscriber and sanitizer assertions unchanged.
🤖 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/tests/unit/response_cache/intercept_tests.rs`:
- Around line 171-173: Update the unit test around next_unit_f64() to assert the
generated value is within the unit interval, including 0.0 and excluding 1.0,
rather than only checking is_finite(). Preserve the existing should_bypass
assertions.
In `@crates/core/tests/unit/observability/plugin_component_tests.rs`:
- Around line 3455-3458: Update the mutex acquisition in
s3_remote_storage_uploads_to_a_custom_http_endpoint to recover from a poisoned
lock by using the same unwrap_or_else(|error| error.into_inner()) pattern as the
other new tests in this file, while preserving the existing test_mutex guard
behavior.
- Around line 708-725: Update
atif_dispatcher_surfaces_fatal_and_disabled_local_sink_states to construct an
AtifDispatcher with an enabled, configured local sink instead of
AtifSectionConfig::default(). Assert sink_targets() is non-empty before
inserting the SinkLabel::Local error, then assert the local target is removed
afterward while preserving the existing fatal-error assertion.
- Around line 651-672: Guard the environment-mutating tests at the start of
atif_storage_http_header_env_*, atif_storage_secret_var_*, and
atif_storage_private_helpers_resolve_env_and_key_prefix_branches with
crate::observability::test_mutex(), matching the existing lock-and-recover
pattern in
atof_stream_header_validation_reports_invalid_values_and_environment_names. Hold
the guard for the full test so all environment setup and cleanup are serialized.
In `@crates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rs`:
- Around line 948-958: Update monitor_test_worker so its fixture does not orphan
a long-lived sleep process: replace the 60-second command with an immediately
exiting process and ensure the resulting Child is reaped before storing it,
unless the tests require a running child. If any test depends on the child
remaining alive, preserve sleep but explicitly terminate and wait on it in each
relevant test.
In `@crates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rs`:
- Around line 240-241: Update the test around the two
runtime.record_access_status calls to assert
runtime.access_state.load(Ordering::Acquire) equals 2 immediately after each
call, covering both the initial transition and duplicate-success behavior.
In `@crates/ffi/tests/integration/api_tests.rs`:
- Around line 48-57: The assert_native_status and assert_status! definitions are
duplicated across the integration and unit test binaries and the macro uses an
unqualified helper path. In crates/ffi/tests/integration/api_tests.rs:48-57,
move the helper into shared test support and either remove the macro or qualify
its expansion; in crates/ffi/tests/unit/api_tests.rs:49-58, delete the duplicate
definitions and import the shared helper.
In `@crates/ffi/tests/integration/plugin_activation_tests.rs`:
- Around line 186-204: Rename assert_discovered_activation to a name that
reflects both verification and mutation of plugins_toml, and update its call
sites so the one-shot discovery setup is explicit. Add #[track_caller] to this
helper and the other new helper introduced alongside it, preserving assertion
behavior while ensuring failures report the original caller locations.
In `@crates/python/tests/coverage/py_types_coverage_tests.rs`:
- Around line 569-638: Remove the outer nested wrappers
assert_remaining_handle_methods, assert_remaining_event_methods, and
assert_llm_stream_methods, and inline their test bodies into the enclosing test
functions. Preserve the existing behavior and retain the inner helper around
lines 704-762 where it provides a meaningful concern-based split.
- Around line 251-264: Replace the inline Event::Mark match in
assert_mark_and_tool_event_fields with the existing py_mark_event helper,
passing the same Mark event and Python context; preserve the current event data
and resulting PyMarkEvent behavior.
---
Outside diff comments:
In `@crates/ffi/tests/unit/api/core_tests.rs`:
- Around line 1143-1150: Add the #[track_caller] attribute directly to the
assert_invalid_timestamp helper so assertion failures report the originating
test call site rather than the helper’s definition; leave its existing status
and error-message checks unchanged.
In `@crates/ffi/tests/unit/callable_tests.rs`:
- Around line 659-720: The unrelated LlmHandle builder assertion should not
remain in assert_event_callbacks. Remove the LlmHandle construction and name
check from assert_event_callbacks, or relocate it to a dedicated handle-focused
test only if that coverage is required; keep the event subscriber and sanitizer
assertions unchanged.
🪄 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: 32193b52-3559-4f36-80e6-b364eec4965b
📒 Files selected for processing (53)
crates/adaptive/tests/unit/plugin_component_tests.rscrates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/adaptive/tests/unit/response_cache/store_tests.rscrates/adaptive/tests/unit/trie/builder_tests.rscrates/core/src/logging/rotation.rscrates/core/tests/coverage/logging_rotation_tests.rscrates/core/tests/coverage/logging_sink_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/core/tests/unit/atif_tests.rscrates/core/tests/unit/codec/anthropic_tests.rscrates/core/tests/unit/codec/openai_chat_tests.rscrates/core/tests/unit/codec/openai_responses_tests.rscrates/core/tests/unit/dynamic_worker_tests.rscrates/core/tests/unit/llm_api_tests.rscrates/core/tests/unit/observability/atof_tests.rscrates/core/tests/unit/observability/openinference_tests.rscrates/core/tests/unit/observability/otel_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/core/tests/unit/plugin_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/component_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/core/tests/unit/subscriber_dispatcher_tests.rscrates/core/tests/unit/types_tests.rscrates/ffi/tests/integration/api/coverage_sweeps_tests.rscrates/ffi/tests/integration/api_tests.rscrates/ffi/tests/integration/plugin_activation_tests.rscrates/ffi/tests/unit/api/core_tests.rscrates/ffi/tests/unit/api/coverage_sweeps_tests.rscrates/ffi/tests/unit/api/execution_tests.rscrates/ffi/tests/unit/api/plugin_tests.rscrates/ffi/tests/unit/api/registry_tests.rscrates/ffi/tests/unit/api_tests.rscrates/ffi/tests/unit/callable_tests.rscrates/ffi/tests/unit/types_tests.rscrates/node/tests/llm_tests.mjscrates/node/tests/tools_tests.mjscrates/node/tests/typed_tests.mjscrates/plugin/tests/typed_callbacks.rscrates/python/tests/coverage/py_adaptive_coverage_tests.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/python/tests/coverage/py_plugin_coverage_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rsgo/nemo_relay/adaptive_plugin_test.gogo/nemo_relay/adaptive_runtime_test.gogo/nemo_relay/adaptive_test.gogo/nemo_relay/callbacks_test.gogo/nemo_relay/context_test.gogo/nemo_relay/coverage_gap_test.gogo/nemo_relay/llm_test.gogo/nemo_relay/otel_test.gogo/nemo_relay/plugin_activation_test.gogo/nemo_relay/test_helpers_test.go
📜 Review details
⏰ Context from checks skipped due to timeout. (2)
- GitHub Check: Check / Run
- GitHub Check: Preview docs
🧰 Additional context used
📓 Path-based instructions (29)
**/*.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 workWhen changing the core Rust runtime or Rust-facing API surface, format Rust code with
cargo fmt(rustfmt defaults), keepcargo clippy -- -D warningsclean, and satisfycargo deny checkperdeny.toml.
**/*.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.
Files:
crates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/core/tests/unit/subscriber_dispatcher_tests.rscrates/ffi/tests/integration/api_tests.rscrates/core/src/logging/rotation.rscrates/core/tests/unit/plugin_tests.rscrates/core/tests/coverage/logging_rotation_tests.rscrates/adaptive/tests/unit/plugin_component_tests.rscrates/ffi/tests/unit/api_tests.rscrates/python/tests/coverage/py_plugin_coverage_tests.rscrates/adaptive/tests/unit/trie/builder_tests.rscrates/ffi/tests/integration/plugin_activation_tests.rscrates/adaptive/tests/unit/response_cache/store_tests.rscrates/ffi/tests/unit/callable_tests.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/core/tests/unit/codec/openai_responses_tests.rscrates/core/tests/unit/types_tests.rscrates/python/tests/coverage/py_adaptive_coverage_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rscrates/core/tests/unit/llm_api_tests.rscrates/core/tests/unit/observability/atof_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/ffi/tests/unit/types_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/core/tests/unit/codec/anthropic_tests.rscrates/core/tests/unit/codec/openai_chat_tests.rscrates/core/tests/coverage/logging_sink_tests.rscrates/core/tests/unit/dynamic_worker_tests.rscrates/ffi/tests/integration/api/coverage_sweeps_tests.rscrates/core/tests/unit/observability/openinference_tests.rscrates/plugin/tests/typed_callbacks.rscrates/core/tests/unit/plugins/nemo_guardrails/component_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/ffi/tests/unit/api/core_tests.rscrates/core/tests/unit/observability/otel_tests.rscrates/ffi/tests/unit/api/plugin_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/ffi/tests/unit/api/coverage_sweeps_tests.rscrates/core/tests/unit/atif_tests.rscrates/ffi/tests/unit/api/execution_tests.rscrates/ffi/tests/unit/api/registry_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/tests/unit/response_cache/intercept_tests.rscrates/core/tests/unit/subscriber_dispatcher_tests.rscrates/core/src/logging/rotation.rscrates/core/tests/unit/plugin_tests.rscrates/core/tests/coverage/logging_rotation_tests.rscrates/adaptive/tests/unit/plugin_component_tests.rscrates/adaptive/tests/unit/trie/builder_tests.rscrates/adaptive/tests/unit/response_cache/store_tests.rscrates/core/tests/unit/codec/openai_responses_tests.rscrates/core/tests/unit/types_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rscrates/core/tests/unit/llm_api_tests.rscrates/core/tests/unit/observability/atof_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/core/tests/unit/codec/anthropic_tests.rscrates/core/tests/unit/codec/openai_chat_tests.rscrates/core/tests/coverage/logging_sink_tests.rscrates/core/tests/unit/dynamic_worker_tests.rscrates/core/tests/unit/observability/openinference_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/component_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/core/tests/unit/observability/otel_tests.rscrates/core/tests/unit/atif_tests.rs
**/*.{rs,py}
📄 CodeRabbit inference engine (AGENTS.md)
Follow binding naming conventions in Rust and Python: use
snake_case.
Files:
crates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/core/tests/unit/subscriber_dispatcher_tests.rscrates/ffi/tests/integration/api_tests.rscrates/core/src/logging/rotation.rscrates/core/tests/unit/plugin_tests.rscrates/core/tests/coverage/logging_rotation_tests.rscrates/adaptive/tests/unit/plugin_component_tests.rscrates/ffi/tests/unit/api_tests.rscrates/python/tests/coverage/py_plugin_coverage_tests.rscrates/adaptive/tests/unit/trie/builder_tests.rscrates/ffi/tests/integration/plugin_activation_tests.rscrates/adaptive/tests/unit/response_cache/store_tests.rscrates/ffi/tests/unit/callable_tests.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/core/tests/unit/codec/openai_responses_tests.rscrates/core/tests/unit/types_tests.rscrates/python/tests/coverage/py_adaptive_coverage_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rscrates/core/tests/unit/llm_api_tests.rscrates/core/tests/unit/observability/atof_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/ffi/tests/unit/types_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/core/tests/unit/codec/anthropic_tests.rscrates/core/tests/unit/codec/openai_chat_tests.rscrates/core/tests/coverage/logging_sink_tests.rscrates/core/tests/unit/dynamic_worker_tests.rscrates/ffi/tests/integration/api/coverage_sweeps_tests.rscrates/core/tests/unit/observability/openinference_tests.rscrates/plugin/tests/typed_callbacks.rscrates/core/tests/unit/plugins/nemo_guardrails/component_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/ffi/tests/unit/api/core_tests.rscrates/core/tests/unit/observability/otel_tests.rscrates/ffi/tests/unit/api/plugin_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/ffi/tests/unit/api/coverage_sweeps_tests.rscrates/core/tests/unit/atif_tests.rscrates/ffi/tests/unit/api/execution_tests.rscrates/ffi/tests/unit/api/registry_tests.rs
**/*.{rs,py,js,mjs,cjs,ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{rs,py,js,mjs,cjs,ts,tsx}: UseJson = serde_json::Valuein Rust-facing runtime APIs where the existing code expects JSON payloads.
UseResult<T>withFlowErrorin 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/adaptive/tests/unit/response_cache/intercept_tests.rscrates/node/tests/llm_tests.mjscrates/core/tests/unit/subscriber_dispatcher_tests.rscrates/ffi/tests/integration/api_tests.rscrates/core/src/logging/rotation.rscrates/node/tests/typed_tests.mjscrates/node/tests/tools_tests.mjscrates/core/tests/unit/plugin_tests.rscrates/core/tests/coverage/logging_rotation_tests.rscrates/adaptive/tests/unit/plugin_component_tests.rscrates/ffi/tests/unit/api_tests.rscrates/python/tests/coverage/py_plugin_coverage_tests.rscrates/adaptive/tests/unit/trie/builder_tests.rscrates/ffi/tests/integration/plugin_activation_tests.rscrates/adaptive/tests/unit/response_cache/store_tests.rscrates/ffi/tests/unit/callable_tests.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/core/tests/unit/codec/openai_responses_tests.rscrates/core/tests/unit/types_tests.rscrates/python/tests/coverage/py_adaptive_coverage_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rscrates/core/tests/unit/llm_api_tests.rscrates/core/tests/unit/observability/atof_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/ffi/tests/unit/types_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/core/tests/unit/codec/anthropic_tests.rscrates/core/tests/unit/codec/openai_chat_tests.rscrates/core/tests/coverage/logging_sink_tests.rscrates/core/tests/unit/dynamic_worker_tests.rscrates/ffi/tests/integration/api/coverage_sweeps_tests.rscrates/core/tests/unit/observability/openinference_tests.rscrates/plugin/tests/typed_callbacks.rscrates/core/tests/unit/plugins/nemo_guardrails/component_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/ffi/tests/unit/api/core_tests.rscrates/core/tests/unit/observability/otel_tests.rscrates/ffi/tests/unit/api/plugin_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/ffi/tests/unit/api/coverage_sweeps_tests.rscrates/core/tests/unit/atif_tests.rscrates/ffi/tests/unit/api/execution_tests.rscrates/ffi/tests/unit/api/registry_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 prefixednemo_relay_, GoPascalCase, Node.jscamelCase, and Pythonsnake_case.
Files:
crates/adaptive/tests/unit/response_cache/intercept_tests.rsgo/nemo_relay/adaptive_plugin_test.gocrates/core/tests/unit/subscriber_dispatcher_tests.rscrates/ffi/tests/integration/api_tests.rscrates/core/src/logging/rotation.rscrates/core/tests/unit/plugin_tests.rscrates/core/tests/coverage/logging_rotation_tests.rscrates/adaptive/tests/unit/plugin_component_tests.rscrates/ffi/tests/unit/api_tests.rscrates/python/tests/coverage/py_plugin_coverage_tests.rscrates/adaptive/tests/unit/trie/builder_tests.rscrates/ffi/tests/integration/plugin_activation_tests.rscrates/adaptive/tests/unit/response_cache/store_tests.rscrates/ffi/tests/unit/callable_tests.rsgo/nemo_relay/test_helpers_test.gogo/nemo_relay/callbacks_test.gocrates/python/tests/coverage/py_api_coverage_tests.rscrates/core/tests/unit/codec/openai_responses_tests.rscrates/core/tests/unit/types_tests.rscrates/python/tests/coverage/py_adaptive_coverage_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rscrates/core/tests/unit/llm_api_tests.rsgo/nemo_relay/coverage_gap_test.gocrates/core/tests/unit/observability/atof_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/ffi/tests/unit/types_tests.rsgo/nemo_relay/context_test.gocrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rsgo/nemo_relay/adaptive_runtime_test.gocrates/core/tests/unit/codec/anthropic_tests.rscrates/core/tests/unit/codec/openai_chat_tests.rscrates/core/tests/coverage/logging_sink_tests.rsgo/nemo_relay/llm_test.gogo/nemo_relay/plugin_activation_test.gocrates/core/tests/unit/dynamic_worker_tests.rscrates/ffi/tests/integration/api/coverage_sweeps_tests.rsgo/nemo_relay/adaptive_test.gocrates/core/tests/unit/observability/openinference_tests.rscrates/plugin/tests/typed_callbacks.rscrates/core/tests/unit/plugins/nemo_guardrails/component_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/ffi/tests/unit/api/core_tests.rscrates/core/tests/unit/observability/otel_tests.rscrates/ffi/tests/unit/api/plugin_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/ffi/tests/unit/api/coverage_sweeps_tests.rscrates/core/tests/unit/atif_tests.rsgo/nemo_relay/otel_test.gocrates/ffi/tests/unit/api/execution_tests.rscrates/ffi/tests/unit/api/registry_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/adaptive/tests/unit/response_cache/intercept_tests.rsgo/nemo_relay/adaptive_plugin_test.gocrates/core/tests/unit/subscriber_dispatcher_tests.rscrates/ffi/tests/integration/api_tests.rscrates/core/src/logging/rotation.rscrates/core/tests/unit/plugin_tests.rscrates/core/tests/coverage/logging_rotation_tests.rscrates/adaptive/tests/unit/plugin_component_tests.rscrates/ffi/tests/unit/api_tests.rscrates/python/tests/coverage/py_plugin_coverage_tests.rscrates/adaptive/tests/unit/trie/builder_tests.rscrates/ffi/tests/integration/plugin_activation_tests.rscrates/adaptive/tests/unit/response_cache/store_tests.rscrates/ffi/tests/unit/callable_tests.rsgo/nemo_relay/test_helpers_test.gogo/nemo_relay/callbacks_test.gocrates/python/tests/coverage/py_api_coverage_tests.rscrates/core/tests/unit/codec/openai_responses_tests.rscrates/core/tests/unit/types_tests.rscrates/python/tests/coverage/py_adaptive_coverage_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rscrates/core/tests/unit/llm_api_tests.rsgo/nemo_relay/coverage_gap_test.gocrates/core/tests/unit/observability/atof_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/ffi/tests/unit/types_tests.rsgo/nemo_relay/context_test.gocrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rsgo/nemo_relay/adaptive_runtime_test.gocrates/core/tests/unit/codec/anthropic_tests.rscrates/core/tests/unit/codec/openai_chat_tests.rscrates/core/tests/coverage/logging_sink_tests.rsgo/nemo_relay/llm_test.gogo/nemo_relay/plugin_activation_test.gocrates/core/tests/unit/dynamic_worker_tests.rscrates/ffi/tests/integration/api/coverage_sweeps_tests.rsgo/nemo_relay/adaptive_test.gocrates/core/tests/unit/observability/openinference_tests.rscrates/plugin/tests/typed_callbacks.rscrates/core/tests/unit/plugins/nemo_guardrails/component_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/ffi/tests/unit/api/core_tests.rscrates/core/tests/unit/observability/otel_tests.rscrates/ffi/tests/unit/api/plugin_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/ffi/tests/unit/api/coverage_sweeps_tests.rscrates/core/tests/unit/atif_tests.rsgo/nemo_relay/otel_test.gocrates/ffi/tests/unit/api/execution_tests.rscrates/ffi/tests/unit/api/registry_tests.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/tests/unit/response_cache/intercept_tests.rscrates/adaptive/tests/unit/plugin_component_tests.rscrates/adaptive/tests/unit/trie/builder_tests.rscrates/adaptive/tests/unit/response_cache/store_tests.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.
Files:
crates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/node/tests/llm_tests.mjsgo/nemo_relay/adaptive_plugin_test.gocrates/core/tests/unit/subscriber_dispatcher_tests.rscrates/ffi/tests/integration/api_tests.rscrates/core/src/logging/rotation.rscrates/node/tests/typed_tests.mjscrates/node/tests/tools_tests.mjscrates/core/tests/unit/plugin_tests.rscrates/core/tests/coverage/logging_rotation_tests.rscrates/adaptive/tests/unit/plugin_component_tests.rscrates/ffi/tests/unit/api_tests.rscrates/python/tests/coverage/py_plugin_coverage_tests.rscrates/adaptive/tests/unit/trie/builder_tests.rscrates/ffi/tests/integration/plugin_activation_tests.rscrates/adaptive/tests/unit/response_cache/store_tests.rscrates/ffi/tests/unit/callable_tests.rsgo/nemo_relay/test_helpers_test.gogo/nemo_relay/callbacks_test.gocrates/python/tests/coverage/py_api_coverage_tests.rscrates/core/tests/unit/codec/openai_responses_tests.rscrates/core/tests/unit/types_tests.rscrates/python/tests/coverage/py_adaptive_coverage_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rscrates/core/tests/unit/llm_api_tests.rsgo/nemo_relay/coverage_gap_test.gocrates/core/tests/unit/observability/atof_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/ffi/tests/unit/types_tests.rsgo/nemo_relay/context_test.gocrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rsgo/nemo_relay/adaptive_runtime_test.gocrates/core/tests/unit/codec/anthropic_tests.rscrates/core/tests/unit/codec/openai_chat_tests.rscrates/core/tests/coverage/logging_sink_tests.rsgo/nemo_relay/llm_test.gogo/nemo_relay/plugin_activation_test.gocrates/core/tests/unit/dynamic_worker_tests.rscrates/ffi/tests/integration/api/coverage_sweeps_tests.rsgo/nemo_relay/adaptive_test.gocrates/core/tests/unit/observability/openinference_tests.rscrates/plugin/tests/typed_callbacks.rscrates/core/tests/unit/plugins/nemo_guardrails/component_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/ffi/tests/unit/api/core_tests.rscrates/core/tests/unit/observability/otel_tests.rscrates/ffi/tests/unit/api/plugin_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/ffi/tests/unit/api/coverage_sweeps_tests.rscrates/core/tests/unit/atif_tests.rsgo/nemo_relay/otel_test.gocrates/ffi/tests/unit/api/execution_tests.rscrates/ffi/tests/unit/api/registry_tests.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/tests/unit/response_cache/intercept_tests.rscrates/core/tests/unit/subscriber_dispatcher_tests.rscrates/core/src/logging/rotation.rscrates/core/tests/unit/plugin_tests.rscrates/core/tests/coverage/logging_rotation_tests.rscrates/adaptive/tests/unit/plugin_component_tests.rscrates/adaptive/tests/unit/trie/builder_tests.rscrates/adaptive/tests/unit/response_cache/store_tests.rscrates/core/tests/unit/codec/openai_responses_tests.rscrates/core/tests/unit/types_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rscrates/core/tests/unit/llm_api_tests.rscrates/core/tests/unit/observability/atof_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/core/tests/unit/codec/anthropic_tests.rscrates/core/tests/unit/codec/openai_chat_tests.rscrates/core/tests/coverage/logging_sink_tests.rscrates/core/tests/unit/dynamic_worker_tests.rscrates/core/tests/unit/observability/openinference_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/component_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/core/tests/unit/observability/otel_tests.rscrates/core/tests/unit/atif_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; 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/adaptive/tests/unit/response_cache/intercept_tests.rsgo/nemo_relay/adaptive_plugin_test.gocrates/core/tests/unit/subscriber_dispatcher_tests.rscrates/ffi/tests/integration/api_tests.rscrates/core/src/logging/rotation.rscrates/core/tests/unit/plugin_tests.rscrates/core/tests/coverage/logging_rotation_tests.rscrates/adaptive/tests/unit/plugin_component_tests.rscrates/ffi/tests/unit/api_tests.rscrates/python/tests/coverage/py_plugin_coverage_tests.rscrates/adaptive/tests/unit/trie/builder_tests.rscrates/ffi/tests/integration/plugin_activation_tests.rscrates/adaptive/tests/unit/response_cache/store_tests.rscrates/ffi/tests/unit/callable_tests.rsgo/nemo_relay/test_helpers_test.gogo/nemo_relay/callbacks_test.gocrates/python/tests/coverage/py_api_coverage_tests.rscrates/core/tests/unit/codec/openai_responses_tests.rscrates/core/tests/unit/types_tests.rscrates/python/tests/coverage/py_adaptive_coverage_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rscrates/core/tests/unit/llm_api_tests.rsgo/nemo_relay/coverage_gap_test.gocrates/core/tests/unit/observability/atof_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/ffi/tests/unit/types_tests.rsgo/nemo_relay/context_test.gocrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rsgo/nemo_relay/adaptive_runtime_test.gocrates/core/tests/unit/codec/anthropic_tests.rscrates/core/tests/unit/codec/openai_chat_tests.rscrates/core/tests/coverage/logging_sink_tests.rsgo/nemo_relay/llm_test.gogo/nemo_relay/plugin_activation_test.gocrates/core/tests/unit/dynamic_worker_tests.rscrates/ffi/tests/integration/api/coverage_sweeps_tests.rsgo/nemo_relay/adaptive_test.gocrates/core/tests/unit/observability/openinference_tests.rscrates/plugin/tests/typed_callbacks.rscrates/core/tests/unit/plugins/nemo_guardrails/component_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/ffi/tests/unit/api/core_tests.rscrates/core/tests/unit/observability/otel_tests.rscrates/ffi/tests/unit/api/plugin_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/ffi/tests/unit/api/coverage_sweeps_tests.rscrates/core/tests/unit/atif_tests.rsgo/nemo_relay/otel_test.gocrates/ffi/tests/unit/api/execution_tests.rscrates/ffi/tests/unit/api/registry_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/adaptive/tests/unit/response_cache/intercept_tests.rsgo/nemo_relay/adaptive_plugin_test.gocrates/core/tests/unit/subscriber_dispatcher_tests.rscrates/ffi/tests/integration/api_tests.rscrates/core/src/logging/rotation.rscrates/core/tests/unit/plugin_tests.rscrates/core/tests/coverage/logging_rotation_tests.rscrates/adaptive/tests/unit/plugin_component_tests.rscrates/ffi/tests/unit/api_tests.rscrates/python/tests/coverage/py_plugin_coverage_tests.rscrates/adaptive/tests/unit/trie/builder_tests.rscrates/ffi/tests/integration/plugin_activation_tests.rscrates/adaptive/tests/unit/response_cache/store_tests.rscrates/ffi/tests/unit/callable_tests.rsgo/nemo_relay/test_helpers_test.gogo/nemo_relay/callbacks_test.gocrates/python/tests/coverage/py_api_coverage_tests.rscrates/core/tests/unit/codec/openai_responses_tests.rscrates/core/tests/unit/types_tests.rscrates/python/tests/coverage/py_adaptive_coverage_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rscrates/core/tests/unit/llm_api_tests.rsgo/nemo_relay/coverage_gap_test.gocrates/core/tests/unit/observability/atof_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/ffi/tests/unit/types_tests.rsgo/nemo_relay/context_test.gocrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rsgo/nemo_relay/adaptive_runtime_test.gocrates/core/tests/unit/codec/anthropic_tests.rscrates/core/tests/unit/codec/openai_chat_tests.rscrates/core/tests/coverage/logging_sink_tests.rsgo/nemo_relay/llm_test.gogo/nemo_relay/plugin_activation_test.gocrates/core/tests/unit/dynamic_worker_tests.rscrates/ffi/tests/integration/api/coverage_sweeps_tests.rsgo/nemo_relay/adaptive_test.gocrates/core/tests/unit/observability/openinference_tests.rscrates/plugin/tests/typed_callbacks.rscrates/core/tests/unit/plugins/nemo_guardrails/component_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/ffi/tests/unit/api/core_tests.rscrates/core/tests/unit/observability/otel_tests.rscrates/ffi/tests/unit/api/plugin_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/ffi/tests/unit/api/coverage_sweeps_tests.rscrates/core/tests/unit/atif_tests.rsgo/nemo_relay/otel_test.gocrates/ffi/tests/unit/api/execution_tests.rscrates/ffi/tests/unit/api/registry_tests.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/tests/unit/response_cache/intercept_tests.rscrates/core/tests/unit/subscriber_dispatcher_tests.rscrates/core/src/logging/rotation.rscrates/core/tests/unit/plugin_tests.rscrates/core/tests/coverage/logging_rotation_tests.rscrates/adaptive/tests/unit/plugin_component_tests.rscrates/adaptive/tests/unit/trie/builder_tests.rscrates/adaptive/tests/unit/response_cache/store_tests.rscrates/core/tests/unit/codec/openai_responses_tests.rscrates/core/tests/unit/types_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rscrates/core/tests/unit/llm_api_tests.rscrates/core/tests/unit/observability/atof_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/core/tests/unit/codec/anthropic_tests.rscrates/core/tests/unit/codec/openai_chat_tests.rscrates/core/tests/coverage/logging_sink_tests.rscrates/core/tests/unit/dynamic_worker_tests.rscrates/core/tests/unit/observability/openinference_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/component_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/core/tests/unit/observability/otel_tests.rscrates/core/tests/unit/atif_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/adaptive/tests/unit/response_cache/intercept_tests.rscrates/node/tests/llm_tests.mjsgo/nemo_relay/adaptive_plugin_test.gocrates/core/tests/unit/subscriber_dispatcher_tests.rscrates/ffi/tests/integration/api_tests.rscrates/node/tests/typed_tests.mjscrates/node/tests/tools_tests.mjscrates/core/tests/unit/plugin_tests.rscrates/core/tests/coverage/logging_rotation_tests.rscrates/adaptive/tests/unit/plugin_component_tests.rscrates/ffi/tests/unit/api_tests.rscrates/python/tests/coverage/py_plugin_coverage_tests.rscrates/adaptive/tests/unit/trie/builder_tests.rscrates/ffi/tests/integration/plugin_activation_tests.rscrates/adaptive/tests/unit/response_cache/store_tests.rscrates/ffi/tests/unit/callable_tests.rsgo/nemo_relay/test_helpers_test.gogo/nemo_relay/callbacks_test.gocrates/python/tests/coverage/py_api_coverage_tests.rscrates/core/tests/unit/codec/openai_responses_tests.rscrates/core/tests/unit/types_tests.rscrates/python/tests/coverage/py_adaptive_coverage_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rscrates/core/tests/unit/llm_api_tests.rsgo/nemo_relay/coverage_gap_test.gocrates/core/tests/unit/observability/atof_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/ffi/tests/unit/types_tests.rsgo/nemo_relay/context_test.gocrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rsgo/nemo_relay/adaptive_runtime_test.gocrates/core/tests/unit/codec/anthropic_tests.rscrates/core/tests/unit/codec/openai_chat_tests.rscrates/core/tests/coverage/logging_sink_tests.rsgo/nemo_relay/llm_test.gogo/nemo_relay/plugin_activation_test.gocrates/core/tests/unit/dynamic_worker_tests.rscrates/ffi/tests/integration/api/coverage_sweeps_tests.rsgo/nemo_relay/adaptive_test.gocrates/core/tests/unit/observability/openinference_tests.rscrates/plugin/tests/typed_callbacks.rscrates/core/tests/unit/plugins/nemo_guardrails/component_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/ffi/tests/unit/api/core_tests.rscrates/core/tests/unit/observability/otel_tests.rscrates/ffi/tests/unit/api/plugin_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/ffi/tests/unit/api/coverage_sweeps_tests.rscrates/core/tests/unit/atif_tests.rsgo/nemo_relay/otel_test.gocrates/ffi/tests/unit/api/execution_tests.rscrates/ffi/tests/unit/api/registry_tests.rs
crates/node/**/*.{js,mjs,cjs,ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Use
camelCasefor Node.js public APIs.
Files:
crates/node/tests/llm_tests.mjscrates/node/tests/typed_tests.mjscrates/node/tests/tools_tests.mjs
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/node/tests/llm_tests.mjscrates/ffi/tests/integration/api_tests.rscrates/node/tests/typed_tests.mjscrates/node/tests/tools_tests.mjscrates/ffi/tests/unit/api_tests.rscrates/python/tests/coverage/py_plugin_coverage_tests.rscrates/ffi/tests/integration/plugin_activation_tests.rscrates/ffi/tests/unit/callable_tests.rscrates/python/tests/coverage/py_api_coverage_tests.rscrates/python/tests/coverage/py_adaptive_coverage_tests.rscrates/ffi/tests/unit/types_tests.rscrates/ffi/tests/integration/api/coverage_sweeps_tests.rscrates/ffi/tests/unit/api/core_tests.rscrates/ffi/tests/unit/api/plugin_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/ffi/tests/unit/api/coverage_sweeps_tests.rscrates/ffi/tests/unit/api/execution_tests.rscrates/ffi/tests/unit/api/registry_tests.rs
go/nemo_relay/**/*.go
📄 CodeRabbit inference engine (.agents/skills/test-go-binding/SKILL.md)
go/nemo_relay/**/*.go: Format changed Go packages withcd go/nemo_relay && go fmt ./...
Run Go tests withjust test-goto build and test the NeMo Relay Go binding
Usejust build-gowhen you want an explicit build-only pass or need the artifact for other work
Usejust ci=true test-gowhen you need the CI-style coverage and JUnit path
On macOS, setDYLD_LIBRARY_PATHto the../../target/releasedirectory before running the rawgo testcommand directlyUse
PascalCasefor public Go APIs.
Files:
go/nemo_relay/adaptive_plugin_test.gogo/nemo_relay/test_helpers_test.gogo/nemo_relay/callbacks_test.gogo/nemo_relay/coverage_gap_test.gogo/nemo_relay/context_test.gogo/nemo_relay/adaptive_runtime_test.gogo/nemo_relay/llm_test.gogo/nemo_relay/plugin_activation_test.gogo/nemo_relay/adaptive_test.gogo/nemo_relay/otel_test.go
**/*.go
📄 CodeRabbit inference engine (CONTRIBUTING.md)
When changing the experimental Go binding, format Go code with
gofmtand keepgo vet ./...passing.
Files:
go/nemo_relay/adaptive_plugin_test.gogo/nemo_relay/test_helpers_test.gogo/nemo_relay/callbacks_test.gogo/nemo_relay/coverage_gap_test.gogo/nemo_relay/context_test.gogo/nemo_relay/adaptive_runtime_test.gogo/nemo_relay/llm_test.gogo/nemo_relay/plugin_activation_test.gogo/nemo_relay/adaptive_test.gogo/nemo_relay/otel_test.go
{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:
go/nemo_relay/adaptive_plugin_test.gogo/nemo_relay/test_helpers_test.gogo/nemo_relay/callbacks_test.gogo/nemo_relay/coverage_gap_test.gogo/nemo_relay/context_test.gogo/nemo_relay/adaptive_runtime_test.gogo/nemo_relay/llm_test.gogo/nemo_relay/plugin_activation_test.gogo/nemo_relay/adaptive_test.gogo/nemo_relay/otel_test.go
{python/nemo_relay/**/*.py,python/nemo_relay/**/*.pyi,go/nemo_relay/**/*.go}
📄 CodeRabbit inference engine (.agents/skills/add-binding-feature/SKILL.md)
Update language wrapper helpers such as Python wrapper modules, Python type stubs, and Go shorthand packages when the new behavior belongs in those helper layers.
Files:
go/nemo_relay/adaptive_plugin_test.gogo/nemo_relay/test_helpers_test.gogo/nemo_relay/callbacks_test.gogo/nemo_relay/coverage_gap_test.gogo/nemo_relay/context_test.gogo/nemo_relay/adaptive_runtime_test.gogo/nemo_relay/llm_test.gogo/nemo_relay/plugin_activation_test.gogo/nemo_relay/adaptive_test.gogo/nemo_relay/otel_test.go
go/nemo_relay/**
📄 CodeRabbit inference engine (.agents/skills/maintain-optimizer/SKILL.md)
Keep shared plugin helpers in
go/nemo_relayaligned with plugin registration, composition, and lifecycle behavior.
Files:
go/nemo_relay/adaptive_plugin_test.gogo/nemo_relay/test_helpers_test.gogo/nemo_relay/callbacks_test.gogo/nemo_relay/coverage_gap_test.gogo/nemo_relay/context_test.gogo/nemo_relay/adaptive_runtime_test.gogo/nemo_relay/llm_test.gogo/nemo_relay/plugin_activation_test.gogo/nemo_relay/adaptive_test.gogo/nemo_relay/otel_test.go
**/*.{md,mdx,py,go,js,ts}
📄 CodeRabbit inference engine (.agents/skills/maintain-observability/SKILL.md)
Examples and documentation must use each exporter's documented flush/deregister order before shutdown.
Files:
go/nemo_relay/adaptive_plugin_test.gogo/nemo_relay/test_helpers_test.gogo/nemo_relay/callbacks_test.gogo/nemo_relay/coverage_gap_test.gogo/nemo_relay/context_test.gogo/nemo_relay/adaptive_runtime_test.gogo/nemo_relay/llm_test.gogo/nemo_relay/plugin_activation_test.gogo/nemo_relay/adaptive_test.gogo/nemo_relay/otel_test.go
go/nemo_relay/**/*
⚙️ CodeRabbit configuration file
go/nemo_relay/**/*: Review Go binding changes for cgo memory ownership, race safety, callback cleanup, idiomatic exported APIs, and parity with Rust/FFI behavior.
Any API change should include focused Go tests and consider race-test behavior.
Files:
go/nemo_relay/adaptive_plugin_test.gogo/nemo_relay/test_helpers_test.gogo/nemo_relay/callbacks_test.gogo/nemo_relay/coverage_gap_test.gogo/nemo_relay/context_test.gogo/nemo_relay/adaptive_runtime_test.gogo/nemo_relay/llm_test.gogo/nemo_relay/plugin_activation_test.gogo/nemo_relay/adaptive_test.gogo/nemo_relay/otel_test.go
crates/core/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/test-go-binding/SKILL.md)
If the change touched
crates/coreor shared runtime semantics, also usevalidate-changefor broader validation
Files:
crates/core/tests/unit/subscriber_dispatcher_tests.rscrates/core/src/logging/rotation.rscrates/core/tests/unit/plugin_tests.rscrates/core/tests/coverage/logging_rotation_tests.rscrates/core/tests/unit/codec/openai_responses_tests.rscrates/core/tests/unit/types_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/local_python_tests.rscrates/core/tests/unit/llm_api_tests.rscrates/core/tests/unit/observability/atof_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/core/tests/unit/codec/anthropic_tests.rscrates/core/tests/unit/codec/openai_chat_tests.rscrates/core/tests/coverage/logging_sink_tests.rscrates/core/tests/unit/dynamic_worker_tests.rscrates/core/tests/unit/observability/openinference_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/component_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/core/tests/unit/observability/otel_tests.rscrates/core/tests/unit/atif_tests.rs
crates/ffi/**
📄 CodeRabbit inference engine (.agents/skills/test-ffi-surface/SKILL.md)
Rebuild the FFI crate in release mode so the shared library and header stay in sync when making changes to crates/ffi
Files:
crates/ffi/tests/integration/api_tests.rscrates/ffi/tests/unit/api_tests.rscrates/ffi/tests/integration/plugin_activation_tests.rscrates/ffi/tests/unit/callable_tests.rscrates/ffi/tests/unit/types_tests.rscrates/ffi/tests/integration/api/coverage_sweeps_tests.rscrates/ffi/tests/unit/api/core_tests.rscrates/ffi/tests/unit/api/plugin_tests.rscrates/ffi/tests/unit/api/coverage_sweeps_tests.rscrates/ffi/tests/unit/api/execution_tests.rscrates/ffi/tests/unit/api/registry_tests.rs
crates/ffi/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/test-go-binding/SKILL.md)
If the change touched
crates/ffi, also usetest-ffi-surfacefor validationUse C FFI export names prefixed with
nemo_relay_in the raw C FFI layer.
Files:
crates/ffi/tests/integration/api_tests.rscrates/ffi/tests/unit/api_tests.rscrates/ffi/tests/integration/plugin_activation_tests.rscrates/ffi/tests/unit/callable_tests.rscrates/ffi/tests/unit/types_tests.rscrates/ffi/tests/integration/api/coverage_sweeps_tests.rscrates/ffi/tests/unit/api/core_tests.rscrates/ffi/tests/unit/api/plugin_tests.rscrates/ffi/tests/unit/api/coverage_sweeps_tests.rscrates/ffi/tests/unit/api/execution_tests.rscrates/ffi/tests/unit/api/registry_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 cratetests/trees, and Python SDK tests belong underpython/tests.
Files:
crates/core/src/logging/rotation.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/plugin/tests/typed_callbacks.rs
{crates/core/src/plugin/dynamic/**/*.rs,crates/plugin/**/*.rs,crates/worker/**/*.rs,crates/worker-proto/**/*.rs,python/plugin/**/*.py}
📄 CodeRabbit inference engine (.agents/skills/maintain-dynamic-plugins/SKILL.md)
Manifest validation must cover kind, compatibility, load contract, integrity, capability mismatch, and disabled-plugin behavior.
Files:
crates/plugin/tests/typed_callbacks.rs
{crates/plugin/**/*.rs,python/plugin/**/*.py}
📄 CodeRabbit inference engine (.agents/skills/maintain-dynamic-plugins/SKILL.md)
Rust and Python SDKs must expose every supported registration surface.
Files:
crates/plugin/tests/typed_callbacks.rs
🧠 Learnings (2)
📚 Learning: 2026-07-28T20:33:25.156Z
Learnt from: willkill07
Repo: NVIDIA/NeMo-Relay PR: 572
File: go/nemo_relay/adaptive_runtime_test.go:214-238
Timestamp: 2026-07-28T20:33:25.156Z
Learning: When adding/adjusting Go unit tests for `BuildCacheRequestFacts` (request-ID validation and related request parsing), set `CacheRequestFactsInput.Provider` to a valid provider in all tests that are intended to isolate request-ID behavior—because `BuildCacheRequestFacts` does not validate `Provider`. Then add separate test coverage for malformed `AnnotatedRequest` JSON so JSON parsing failures are not conflated with `Provider`-related inputs.
Applied to files:
go/nemo_relay/adaptive_plugin_test.gogo/nemo_relay/test_helpers_test.gogo/nemo_relay/callbacks_test.gogo/nemo_relay/coverage_gap_test.gogo/nemo_relay/context_test.gogo/nemo_relay/adaptive_runtime_test.gogo/nemo_relay/llm_test.gogo/nemo_relay/plugin_activation_test.gogo/nemo_relay/adaptive_test.gogo/nemo_relay/otel_test.go
📚 Learning: 2026-07-28T20:07:29.880Z
Learnt from: willkill07
Repo: NVIDIA/NeMo-Relay PR: 571
File: crates/core/src/api/runtime/state.rs:996-1020
Timestamp: 2026-07-28T20:07:29.880Z
Learning: In NeMo Relay (RELAY-509), sanitizer callback failures must be treated as intentional fail-open behavior. When an event/tool (request/response) or LLM (request/response) sanitizer callback fails, the sanitizer chain should retain and publish the last valid event/payload snapshot (rather than dropping/invalidating the data) and log the failure including callback context (e.g., which sanitizer/callback failed and relevant identifiers). Apply this consistently across all sanitizer chains mentioned in the RELAY-509 documentation/migration guide.
Applied to files:
crates/core/src/logging/rotation.rs
Signed-off-by: Will Killian <wkillian@nvidia.com>
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
crates/ffi/tests/integration/plugin_activation_tests.rs (1)
198-204: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winExercise discovery in the one-shot test.
nemo_relay_tool_request_interceptsonly dispatches registered callbacks; it does not discover plugins. The current assertion proves registry stability, not one-shot discovery. Trigger a second activation/discovery attempt after the file mutation, or rename the assertion to cover registry stability only.🤖 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/ffi/tests/integration/plugin_activation_tests.rs` around lines 198 - 204, Update the one-shot discovery test around tool_request_intercepts so it explicitly performs a second activation or plugin-discovery attempt after mutating plugins_toml, then verifies the original discovery state remains unchanged. If discovery cannot be triggered there, rename or adjust the test assertions to describe registry stability rather than one-shot discovery.Source: Path instructions
🤖 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/ffi/tests/integration/plugin_activation_tests.rs`:
- Around line 198-204: Update the one-shot discovery test around
tool_request_intercepts so it explicitly performs a second activation or
plugin-discovery attempt after mutating plugins_toml, then verifies the original
discovery state remains unchanged. If discovery cannot be triggered there,
rename or adjust the test assertions to describe registry stability rather than
one-shot discovery.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Enterprise
Run ID: f5aec402-464f-4312-8cd6-0d0ddaf7ce69
📒 Files selected for processing (5)
crates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/ffi/tests/integration/plugin_activation_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rs
📜 Review details
⏰ Context from checks skipped due to timeout. (2)
- GitHub Check: Check / Run
- GitHub Check: Preview docs
🧰 Additional context used
📓 Path-based instructions (17)
**/*.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 workWhen changing the core Rust runtime or Rust-facing API surface, format Rust code with
cargo fmt(rustfmt defaults), keepcargo clippy -- -D warningsclean, and satisfycargo deny checkperdeny.toml.
**/*.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.
Files:
crates/ffi/tests/integration/plugin_activation_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rs
crates/ffi/**
📄 CodeRabbit inference engine (.agents/skills/test-ffi-surface/SKILL.md)
Rebuild the FFI crate in release mode so the shared library and header stay in sync when making changes to crates/ffi
Files:
crates/ffi/tests/integration/plugin_activation_tests.rs
crates/ffi/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/test-go-binding/SKILL.md)
If the change touched
crates/ffi, also usetest-ffi-surfacefor validationUse C FFI export names prefixed with
nemo_relay_in the raw C FFI layer.
Files:
crates/ffi/tests/integration/plugin_activation_tests.rs
**/*.{rs,py}
📄 CodeRabbit inference engine (AGENTS.md)
Follow binding naming conventions in Rust and Python: use
snake_case.
Files:
crates/ffi/tests/integration/plugin_activation_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rs
**/*.{rs,py,js,mjs,cjs,ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{rs,py,js,mjs,cjs,ts,tsx}: UseJson = serde_json::Valuein Rust-facing runtime APIs where the existing code expects JSON payloads.
UseResult<T>withFlowErrorin 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/ffi/tests/integration/plugin_activation_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/core/tests/unit/observability/plugin_component_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 prefixednemo_relay_, GoPascalCase, Node.jscamelCase, and Pythonsnake_case.
Files:
crates/ffi/tests/integration/plugin_activation_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/core/tests/unit/observability/plugin_component_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/ffi/tests/integration/plugin_activation_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/core/tests/unit/observability/plugin_component_tests.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.
Files:
crates/ffi/tests/integration/plugin_activation_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/core/tests/unit/observability/plugin_component_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; 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/ffi/tests/integration/plugin_activation_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/core/tests/unit/observability/plugin_component_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/ffi/tests/integration/plugin_activation_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/core/tests/unit/observability/plugin_component_tests.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/ffi/tests/integration/plugin_activation_tests.rscrates/python/tests/coverage/py_types_coverage_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/ffi/tests/integration/plugin_activation_tests.rscrates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/python/tests/coverage/py_types_coverage_tests.rscrates/core/tests/unit/observability/plugin_component_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/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/core/tests/unit/observability/plugin_component_tests.rs
crates/core/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/test-go-binding/SKILL.md)
If the change touched
crates/coreor shared runtime semantics, also usevalidate-changefor broader validation
Files:
crates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/core/tests/unit/observability/plugin_component_tests.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/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/core/tests/unit/observability/plugin_component_tests.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/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rscrates/adaptive/tests/unit/response_cache/intercept_tests.rscrates/core/tests/unit/observability/plugin_component_tests.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/tests/unit/response_cache/intercept_tests.rs
🔇 Additional comments (5)
crates/adaptive/tests/unit/response_cache/intercept_tests.rs (1)
89-120: LGTM!Also applies to: 122-147, 149-155, 157-175
crates/core/tests/unit/observability/plugin_component_tests.rs (1)
86-86: LGTM!Also applies to: 138-138, 411-411, 453-465, 637-732, 3034-3036, 3067-3069, 3126-3128, 3200-3202, 3233-3235, 3269-3271, 3326-3328, 3407-3541
crates/core/tests/unit/plugins/nemo_guardrails/remote_coverage_tests.rs (1)
94-111: LGTM!Also applies to: 226-243, 811-857, 934-952
crates/ffi/tests/integration/plugin_activation_tests.rs (1)
101-101: LGTM!Also applies to: 142-142, 163-185, 187-197
crates/python/tests/coverage/py_types_coverage_tests.rs (1)
57-102: LGTM!Also applies to: 155-327, 533-533, 558-629, 631-824, 826-934, 1149-1205, 1255-1301, 1312-1324, 1361-1603, 1968-2005
Signed-off-by: Will Killian <wkillian@nvidia.com>
Overview
Adds the non-CLI test coverage extracted from the combined Sonar and coverage work for release/0.7.
Details
Validation performed:
Where should the reviewer start?
Start with crates/plugin/tests/typed_callbacks.rs for the test-complexity refactors, then crates/core/tests/coverage/logging_rotation_tests.rs for representative new coverage.
Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)
Summary by CodeRabbit