refactor: narrow core runtime registry surface#136
Conversation
Signed-off-by: Will Killian <wkillian@nvidia.com>
WalkthroughThis PR refactors the middleware registry system from Box-based to Arc-based callback ownership and replaces the caller-supplied priority-function approach with self-describing registry entries. The core changes propagate through type aliases, registration macros, chain builders, scope-local registries, language bindings, and test suites. ChangesCore Registry Refactoring
Language Binding Wrapper Updates
Test Suite Updates
Plugin Layer Updates
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@crates/adaptive/tests/unit/runtime_features_tests.rs`:
- Around line 590-591: After calling rollback_registrations(&mut registrations)
assert that all callback collections have been cleared: verify each registration
bucket/field on the registrations value (e.g., on_message/on_response/on_close
or the actual callback collections present in the Registrations struct) is empty
or that a provided helper like has_active_callbacks() returns false; update the
test in runtime_features_tests.rs to explicitly check every callback type the
Registrations struct exposes so rollback_registrations truly removed all
registered callbacks.
🪄 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: 5bb6e79d-aeb2-43c2-8464-73eee330abe5
📒 Files selected for processing (29)
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rscrates/cli/tests/coverage/server_tests.rscrates/core/src/api/llm.rscrates/core/src/api/registry.rscrates/core/src/api/runtime.rscrates/core/src/api/runtime/callbacks.rscrates/core/src/api/runtime/scope_stack.rscrates/core/src/api/runtime/state.rscrates/core/src/api/tool.rscrates/core/src/context/registries.rscrates/core/src/lib.rscrates/core/src/observability/plugin_component.rscrates/core/src/registry.rscrates/core/tests/integration/api_surface_tests.rscrates/core/tests/integration/context_isolation_tests.rscrates/core/tests/integration/middleware_tests.rscrates/core/tests/integration/pipeline_tests.rscrates/core/tests/integration/scope_local_tests.rscrates/core/tests/unit/context_tests.rscrates/core/tests/unit/plugin_tests.rscrates/core/tests/unit/registry_tests.rscrates/core/tests/unit/shared_tests.rscrates/ffi/src/callable.rscrates/node/src/callable.rscrates/python/src/py_callable.rscrates/wasm/src/callable.rs
💤 Files with no reviewable changes (1)
- crates/core/tests/integration/context_isolation_tests.rs
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Check / Run
🧰 Additional context used
📓 Path-based instructions (29)
**/*.rs
📄 CodeRabbit inference engine (.agents/skills/test-ffi-surface/SKILL.md)
**/*.rs: Runcargo fmt --allfor FFI work as it is Rust work
Runjust test-rustfor FFI validation
Runcargo clippy --workspace --all-targets -- -D warningsto enforce warnings-as-errors linting
**/*.rs: Runcargo fmt --allfor Rust code formatting
Runcargo clippy --workspace --all-targets -- -D warningsto enforce Rust linting with no warnings
Runjust test-rustas the shared-runtime build/test wrapper for Rust changesUse Rust snake_case naming convention for Rust code
**/*.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 Rust code formatting when Node changes touch Rust files
Runcargo clippy --workspace --all-targets -- -D warningsto enforce strict linting when Rust files changed as part of Node work
**/*.rs: Always runjust test-rustwhen any Rust code changes
Always runcargo fmt --allwhen any Rust code changes
Always runcargo clippy --workspace --all-targets -- -D warningswhen any Rust code changesIf any Rust files changed as part of the Python work, also run
cargo fmt --all,just test-rust, andcargo clippy --workspace --all-targets -- -D warnings
Files:
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/core/src/observability/plugin_component.rscrates/core/src/api/runtime.rscrates/core/src/api/llm.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/core/src/api/tool.rscrates/cli/tests/coverage/server_tests.rscrates/core/src/api/runtime/scope_stack.rscrates/core/tests/unit/shared_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rscrates/core/tests/unit/plugin_tests.rscrates/core/src/api/runtime/callbacks.rscrates/core/tests/integration/scope_local_tests.rscrates/core/tests/integration/pipeline_tests.rscrates/core/src/lib.rscrates/python/src/py_callable.rscrates/core/tests/unit/context_tests.rscrates/core/tests/unit/registry_tests.rscrates/core/src/api/registry.rscrates/node/src/callable.rscrates/core/tests/integration/api_surface_tests.rscrates/core/src/context/registries.rscrates/ffi/src/callable.rscrates/core/tests/integration/middleware_tests.rscrates/wasm/src/callable.rscrates/core/src/registry.rscrates/core/src/api/runtime/state.rs
**/*.{rs,go,js,ts,tsx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Include SPDX license headers in all Rust, Go, JavaScript, and TypeScript source files using C-style comment syntax
Files:
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/core/src/observability/plugin_component.rscrates/core/src/api/runtime.rscrates/core/src/api/llm.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/core/src/api/tool.rscrates/cli/tests/coverage/server_tests.rscrates/core/src/api/runtime/scope_stack.rscrates/core/tests/unit/shared_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rscrates/core/tests/unit/plugin_tests.rscrates/core/src/api/runtime/callbacks.rscrates/core/tests/integration/scope_local_tests.rscrates/core/tests/integration/pipeline_tests.rscrates/core/src/lib.rscrates/python/src/py_callable.rscrates/core/tests/unit/context_tests.rscrates/core/tests/unit/registry_tests.rscrates/core/src/api/registry.rscrates/node/src/callable.rscrates/core/tests/integration/api_surface_tests.rscrates/core/src/context/registries.rscrates/ffi/src/callable.rscrates/core/tests/integration/middleware_tests.rscrates/wasm/src/callable.rscrates/core/src/registry.rscrates/core/src/api/runtime/state.rs
**/*.{rs,py,go,js,ts,tsx}
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Use
SONAR_IGNORE_START/SONAR_IGNORE_ENDmarkers only for documented false positives that cannot be resolved in code; keep ignored blocks small, add explanatory comments, and require reviewer sign-off
Files:
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/core/src/observability/plugin_component.rscrates/core/src/api/runtime.rscrates/core/src/api/llm.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/core/src/api/tool.rscrates/cli/tests/coverage/server_tests.rscrates/core/src/api/runtime/scope_stack.rscrates/core/tests/unit/shared_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rscrates/core/tests/unit/plugin_tests.rscrates/core/src/api/runtime/callbacks.rscrates/core/tests/integration/scope_local_tests.rscrates/core/tests/integration/pipeline_tests.rscrates/core/src/lib.rscrates/python/src/py_callable.rscrates/core/tests/unit/context_tests.rscrates/core/tests/unit/registry_tests.rscrates/core/src/api/registry.rscrates/node/src/callable.rscrates/core/tests/integration/api_surface_tests.rscrates/core/src/context/registries.rscrates/ffi/src/callable.rscrates/core/tests/integration/middleware_tests.rscrates/wasm/src/callable.rscrates/core/src/registry.rscrates/core/src/api/runtime/state.rs
{crates/adaptive/**,python/nemo_flow/{adaptive,plugin}.py,go/nemo_flow/{adaptive,**}/*.go,**/*.{ts,js,wasm}}
📄 CodeRabbit inference engine (.agents/skills/maintain-optimizer/SKILL.md)
Keep adaptive config schema, plugin lifecycle, and bindings in sync across crates/adaptive, core, bindings, Python (python/nemo_flow/adaptive.py and python/nemo_flow/plugin.py), Go (go/nemo_flow/adaptive and go/nemo_flow), and Node/WebAssembly helpers
Files:
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rs
{crates/adaptive/**/*.rs,python/nemo_flow/adaptive.py,python/nemo_flow/plugin.py,go/nemo_flow/**/*.go,**/{helper,constructor,builder}.{ts,tsx,js}}
📄 CodeRabbit inference engine (.agents/skills/maintain-optimizer/SKILL.md)
Ensure typed helper constructors map cleanly to the same config document without divergence
Files:
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rs
{crates/adaptive/**/*.rs,python/nemo_flow/plugin.py,go/nemo_flow/**/*.go,**/{plugin,lifecycle}.{ts,tsx,js}}
📄 CodeRabbit inference engine (.agents/skills/maintain-optimizer/SKILL.md)
Maintain consistent plugin lifecycle across all language bindings (Rust, Python, Go, Node/WebAssembly)
Files:
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rs
{crates/adaptive/**/*.rs,python/nemo_flow/plugin.py,go/nemo_flow/**/*.go,**/{context,plugin}.{ts,tsx,js,rs}}
📄 CodeRabbit inference engine (.agents/skills/maintain-optimizer/SKILL.md)
Keep plugin context surfaces aligned across all language implementations
Files:
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rs
{docs/**,examples/**,crates/adaptive/**,python/nemo_flow/**,go/nemo_flow/**,**/{example,component}.{ts,tsx,js,rs,py,go}}
📄 CodeRabbit inference engine (.agents/skills/maintain-optimizer/SKILL.md)
Any new adaptive component kind must have documentation, examples, and binding coverage across all supported languages
Files:
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rs
**/*.{js,ts,tsx,jsx,py,rs,go,java,c,cpp,h,cc,cxx,cs,rb,php,swift,kt}
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
Changed files must be formatted with the language-native formatter
Files:
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/core/src/observability/plugin_component.rscrates/core/src/api/runtime.rscrates/core/src/api/llm.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/core/src/api/tool.rscrates/cli/tests/coverage/server_tests.rscrates/core/src/api/runtime/scope_stack.rscrates/core/tests/unit/shared_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rscrates/core/tests/unit/plugin_tests.rscrates/core/src/api/runtime/callbacks.rscrates/core/tests/integration/scope_local_tests.rscrates/core/tests/integration/pipeline_tests.rscrates/core/src/lib.rscrates/python/src/py_callable.rscrates/core/tests/unit/context_tests.rscrates/core/tests/unit/registry_tests.rscrates/core/src/api/registry.rscrates/node/src/callable.rscrates/core/tests/integration/api_surface_tests.rscrates/core/src/context/registries.rscrates/ffi/src/callable.rscrates/core/tests/integration/middleware_tests.rscrates/wasm/src/callable.rscrates/core/src/registry.rscrates/core/src/api/runtime/state.rs
crates/{core,adaptive}/**
📄 CodeRabbit inference engine (.agents/skills/prepare-pr/SKILL.md)
Changes to
crates/coreorcrates/adaptivemust run the full language matrix
Files:
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/core/src/observability/plugin_component.rscrates/core/src/api/runtime.rscrates/core/src/api/llm.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/core/src/api/tool.rscrates/core/src/api/runtime/scope_stack.rscrates/core/tests/unit/shared_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rscrates/core/tests/unit/plugin_tests.rscrates/core/src/api/runtime/callbacks.rscrates/core/tests/integration/scope_local_tests.rscrates/core/tests/integration/pipeline_tests.rscrates/core/src/lib.rscrates/core/tests/unit/context_tests.rscrates/core/tests/unit/registry_tests.rscrates/core/src/api/registry.rscrates/core/tests/integration/api_surface_tests.rscrates/core/src/context/registries.rscrates/core/tests/integration/middleware_tests.rscrates/core/src/registry.rscrates/core/src/api/runtime/state.rs
{crates/core,crates/adaptive}/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/test-wasm-binding/SKILL.md)
If the change touched shared runtime semantics in
crates/coreorcrates/adaptive, also usevalidate-change
Files:
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/core/src/observability/plugin_component.rscrates/core/src/api/runtime.rscrates/core/src/api/llm.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/core/src/api/tool.rscrates/core/src/api/runtime/scope_stack.rscrates/core/tests/unit/shared_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rscrates/core/tests/unit/plugin_tests.rscrates/core/src/api/runtime/callbacks.rscrates/core/tests/integration/scope_local_tests.rscrates/core/tests/integration/pipeline_tests.rscrates/core/src/lib.rscrates/core/tests/unit/context_tests.rscrates/core/tests/unit/registry_tests.rscrates/core/src/api/registry.rscrates/core/tests/integration/api_surface_tests.rscrates/core/src/context/registries.rscrates/core/tests/integration/middleware_tests.rscrates/core/src/registry.rscrates/core/src/api/runtime/state.rs
crates/adaptive/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
When
crates/adaptivechanges, run the full validation matrix across Rust, Python, Go, Node.js, and WebAssembly
Files:
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rs
**/*.{py,js,ts,tsx,go,rs,md}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
Format changed files with the language-native formatter before the final lint/test pass
Files:
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/core/src/observability/plugin_component.rscrates/core/src/api/runtime.rscrates/core/src/api/llm.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/core/src/api/tool.rscrates/cli/tests/coverage/server_tests.rscrates/core/src/api/runtime/scope_stack.rscrates/core/tests/unit/shared_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rscrates/core/tests/unit/plugin_tests.rscrates/core/src/api/runtime/callbacks.rscrates/core/tests/integration/scope_local_tests.rscrates/core/tests/integration/pipeline_tests.rscrates/core/src/lib.rscrates/python/src/py_callable.rscrates/core/tests/unit/context_tests.rscrates/core/tests/unit/registry_tests.rscrates/core/src/api/registry.rscrates/node/src/callable.rscrates/core/tests/integration/api_surface_tests.rscrates/core/src/context/registries.rscrates/ffi/src/callable.rscrates/core/tests/integration/middleware_tests.rscrates/wasm/src/callable.rscrates/core/src/registry.rscrates/core/src/api/runtime/state.rs
**/*.{rs,py,js,ts,tsx,go}
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
During iteration, prefer
uv run pre-commit run --files <changed files...>for targeted validation
Files:
crates/adaptive/src/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/core/src/observability/plugin_component.rscrates/core/src/api/runtime.rscrates/core/src/api/llm.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/core/src/api/tool.rscrates/cli/tests/coverage/server_tests.rscrates/core/src/api/runtime/scope_stack.rscrates/core/tests/unit/shared_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rscrates/core/tests/unit/plugin_tests.rscrates/core/src/api/runtime/callbacks.rscrates/core/tests/integration/scope_local_tests.rscrates/core/tests/integration/pipeline_tests.rscrates/core/src/lib.rscrates/python/src/py_callable.rscrates/core/tests/unit/context_tests.rscrates/core/tests/unit/registry_tests.rscrates/core/src/api/registry.rscrates/node/src/callable.rscrates/core/tests/integration/api_surface_tests.rscrates/core/src/context/registries.rscrates/ffi/src/callable.rscrates/core/tests/integration/middleware_tests.rscrates/wasm/src/callable.rscrates/core/src/registry.rscrates/core/src/api/runtime/state.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/acg_component.rscrates/adaptive/src/adaptive_hints_intercept.rscrates/core/src/observability/plugin_component.rscrates/core/src/api/runtime.rscrates/core/src/api/llm.rscrates/adaptive/tests/integration/runtime_integration_tests.rscrates/core/src/api/tool.rscrates/core/src/api/runtime/scope_stack.rscrates/core/tests/unit/shared_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rscrates/core/tests/unit/plugin_tests.rscrates/core/src/api/runtime/callbacks.rscrates/core/tests/integration/scope_local_tests.rscrates/core/tests/integration/pipeline_tests.rscrates/core/src/lib.rscrates/core/tests/unit/context_tests.rscrates/core/tests/unit/registry_tests.rscrates/core/src/api/registry.rscrates/core/tests/integration/api_surface_tests.rscrates/core/src/context/registries.rscrates/core/tests/integration/middleware_tests.rscrates/core/src/registry.rscrates/core/src/api/runtime/state.rs
crates/core/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/validate-change/SKILL.md)
When
crates/corechanges, run the full validation matrix across Rust, Python, Go, Node.js, and WebAssembly
crates/core/**/*.rs: UseJson = serde_json::Valuein Rust-facing runtime APIs where the existing code expects JSON payloads.
UseResult<T>withFlowErrorin core runtime paths. Keep errors explicit and binding-appropriate at the wrapper layer.
Files:
crates/core/src/observability/plugin_component.rscrates/core/src/api/runtime.rscrates/core/src/api/llm.rscrates/core/src/api/tool.rscrates/core/src/api/runtime/scope_stack.rscrates/core/tests/unit/shared_tests.rscrates/core/tests/unit/plugin_tests.rscrates/core/src/api/runtime/callbacks.rscrates/core/tests/integration/scope_local_tests.rscrates/core/tests/integration/pipeline_tests.rscrates/core/src/lib.rscrates/core/tests/unit/context_tests.rscrates/core/tests/unit/registry_tests.rscrates/core/src/api/registry.rscrates/core/tests/integration/api_surface_tests.rscrates/core/src/context/registries.rscrates/core/tests/integration/middleware_tests.rscrates/core/src/registry.rscrates/core/src/api/runtime/state.rs
crates/core/src/api/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/add-binding-feature/SKILL.md)
crates/core/src/api/**/*.rs: Implement public API changes first incrates/core/src/api/and related core modules such ascrates/core/src/api/runtime/,crates/core/src/codec/, orcrates/core/src/json.rs
Usesnake_casenaming convention for Rust core API implementations
Files:
crates/core/src/api/runtime.rscrates/core/src/api/llm.rscrates/core/src/api/tool.rscrates/core/src/api/runtime/scope_stack.rscrates/core/src/api/runtime/callbacks.rscrates/core/src/api/registry.rscrates/core/src/api/runtime/state.rs
{crates/core/src/api/tool.rs,crates/core/src/api/llm.rs}
📄 CodeRabbit inference engine (.agents/skills/add-middleware/SKILL.md)
Wire middleware chain execution into the appropriate pipeline stage in
crates/core/src/api/tool.rsorcrates/core/src/api/llm.rsby calling the chain method at the correct execution point
Files:
crates/core/src/api/llm.rscrates/core/src/api/tool.rs
**/{integrations,integration,*-integration}/**
📄 CodeRabbit inference engine (.agents/skills/contribute-integration/SKILL.md)
**/{integrations,integration,*-integration}/**: Keep NeMo Flow optional in framework integrations
Preserve the framework's original behavior when NeMo Flow is absent
Wrap tool and LLM paths at the correct framework boundary
Integration pattern must followdocs/integrate-frameworks/adding-scopes.md
Files:
crates/adaptive/tests/integration/runtime_integration_tests.rscrates/core/tests/integration/scope_local_tests.rscrates/core/tests/integration/pipeline_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/core/tests/integration/middleware_tests.rs
{crates/**/tests/**,python/tests/**,go/nemo_flow/**/*_test.go}
⚙️ CodeRabbit configuration file
{crates/**/tests/**,python/tests/**,go/nemo_flow/**/*_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/integration/runtime_integration_tests.rscrates/cli/tests/coverage/server_tests.rscrates/core/tests/unit/shared_tests.rscrates/adaptive/tests/unit/runtime_features_tests.rscrates/core/tests/unit/plugin_tests.rscrates/core/tests/integration/scope_local_tests.rscrates/core/tests/integration/pipeline_tests.rscrates/core/tests/unit/context_tests.rscrates/core/tests/unit/registry_tests.rscrates/core/tests/integration/api_surface_tests.rscrates/core/tests/integration/middleware_tests.rs
crates/core/src/api/runtime/callbacks.rs
📄 CodeRabbit inference engine (.agents/skills/add-middleware/SKILL.md)
Define or reuse callback type aliases in
crates/core/src/api/runtime/callbacks.rswhen adding a new middleware type
Files:
crates/core/src/api/runtime/callbacks.rs
crates/python/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/test-python-binding/SKILL.md)
If the native Rust bridge changed, add the Rust crate tests for
nemo-flow-python
Files:
crates/python/src/py_callable.rs
crates/{python,ffi,node,wasm}/**/*
⚙️ CodeRabbit configuration file
crates/{python,ffi,node,wasm}/**/*: 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_callable.rscrates/node/src/callable.rscrates/ffi/src/callable.rscrates/wasm/src/callable.rs
crates/core/src/api/registry.rs
📄 CodeRabbit inference engine (.agents/skills/add-middleware/SKILL.md)
Use existing
global_*_registry_api!andscope_*_registry_api!macro patterns incrates/core/src/api/registry.rsfor both global and scope-local registration variants
Files:
crates/core/src/api/registry.rs
crates/node/**
📄 CodeRabbit inference engine (.agents/skills/test-node-binding/SKILL.md)
Run
just test-nodefor the normal dev/test loop when working on Node binding changes
Files:
crates/node/src/callable.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
Files:
crates/ffi/src/callable.rs
{crates/ffi/nemo_flow.h,crates/ffi/src/**/*.rs}
📄 CodeRabbit inference engine (.agents/skills/test-ffi-surface/SKILL.md)
Check the generated header diff when any exported symbol or type changed in the FFI surface
Files:
crates/ffi/src/callable.rs
crates/wasm/**/*.rs
📄 CodeRabbit inference engine (.agents/skills/test-wasm-binding/SKILL.md)
crates/wasm/**/*.rs: Runcargo fmt --all,just test-rust, andcargo clippy --workspace --all-targets -- -D warningswhen Rust files changed as part of WebAssembly work
Addcargo test -p nemo-flow-wasmwhen Rust-only WebAssembly helpers changed
Files:
crates/wasm/src/callable.rs
crates/core/src/api/runtime/state.rs
📄 CodeRabbit inference engine (.agents/skills/add-middleware/SKILL.md)
crates/core/src/api/runtime/state.rs: Add registry fields toNemoFlowContextStateincrates/core/src/api/runtime/state.rsusingSortedRegistry<GuardrailEntry<T>>orSortedRegistry<Intercept<T>>patterns when implementing middleware
Add chain execution helper methods toNemoFlowContextStateincrates/core/src/api/runtime/state.rsfollowing the pattern oftool_sanitize_request_chainortool_request_intercepts_chain
Files:
crates/core/src/api/runtime/state.rs
🔇 Additional comments (28)
crates/core/src/observability/plugin_component.rs (1)
24-25: LGTM!crates/core/src/registry.rs (1)
1-143: LGTM!crates/core/src/api/registry.rs (1)
1-685: LGTM!crates/core/src/api/runtime/callbacks.rs (1)
1-310: LGTM!crates/core/src/api/runtime.rs (1)
1-25: LGTM!crates/core/tests/unit/context_tests.rs (1)
13-13: LGTM!Also applies to: 44-52, 100-116, 123-123, 128-150, 157-157, 162-182, 184-229
crates/core/tests/unit/plugin_tests.rs (1)
98-98: LGTM!Also applies to: 650-650, 662-662, 887-887, 893-893, 905-905, 911-911, 962-962, 970-970, 978-978, 985-985, 993-993, 1000-1000, 1023-1023, 1030-1030, 1038-1038, 1045-1045, 1105-1105, 1112-1112, 1149-1149, 1155-1155, 1161-1161, 1173-1173, 1179-1179, 1203-1203
crates/core/tests/unit/registry_tests.rs (1)
9-12: LGTM!Also applies to: 14-30, 34-40, 50-50, 66-66, 73-76, 88-92, 102-102, 108-110, 117-118, 137-143, 153-155, 161-161
crates/core/tests/unit/shared_tests.rs (1)
125-125: LGTM!Also applies to: 153-153
crates/ffi/src/callable.rs (1)
13-17: LGTM!Also applies to: 27-28, 253-255, 299-300, 570-571, 646-649, 663-666
crates/node/src/callable.rs (1)
19-20: LGTM!Also applies to: 101-104, 159-160, 216-217, 282-285, 315-318
crates/python/src/py_callable.rs (1)
29-30: LGTM!Also applies to: 186-187, 241-242, 591-592, 648-649, 821-823
crates/wasm/src/callable.rs (1)
8-10: LGTM!Also applies to: 35-37, 157-159, 162-165, 210-211, 216-217, 267-278, 350-352, 355-358, 894-897, 900-903
crates/adaptive/src/acg_component.rs (1)
597-603: Please confirm full cross-language validation forcrates/adaptivechanges.The listed validation is Rust-focused; this change set also touches
crates/adaptive, which requires the full language matrix before merge.As per coding guidelines,
crates/adaptive/**/*.rs: “Whencrates/adaptivechanges, run the full validation matrix across Rust, Python, Go, Node.js, and WebAssembly.”crates/adaptive/src/adaptive_hints_intercept.rs (1)
174-175: LGTM!crates/adaptive/tests/integration/runtime_integration_tests.rs (1)
721-724: LGTM!Also applies to: 730-735
crates/core/tests/integration/api_surface_tests.rs (1)
345-898: LGTM!crates/core/tests/integration/middleware_tests.rs (1)
99-2193: LGTM!crates/core/tests/integration/pipeline_tests.rs (1)
224-819: LGTM!crates/core/tests/integration/scope_local_tests.rs (1)
74-550: LGTM!crates/adaptive/tests/unit/runtime_features_tests.rs (1)
12-158: LGTM!Also applies to: 306-440, 550-589, 668-705
crates/cli/tests/coverage/server_tests.rs (1)
534-536: LGTM!crates/core/src/api/runtime/state.rs (1)
49-75: LGTM!Also applies to: 85-95, 596-608, 620-633, 644-651, 680-721, 740-755, 768-784, 795-828, 839-847, 874-913, 934-954, 969-1018
crates/core/src/api/runtime/scope_stack.rs (1)
8-9: LGTM!Also applies to: 20-20, 164-172, 183-192, 199-205
crates/core/src/context/registries.rs (1)
12-12: LGTM!Also applies to: 26-52, 60-75, 96-107, 117-128, 141-156
crates/core/src/api/tool.rs (1)
389-389: LGTM!Also applies to: 536-536
crates/core/src/api/llm.rs (1)
535-535: LGTM!Also applies to: 683-683, 825-825
crates/core/src/lib.rs (1)
65-65: Makecrates/core/src/lib.rscrate-rootregistryprivate safely
- No external Rust code outside
crates/corereferences the crate-root module (nemo_flow::registry/crate::registry); downstreams usenemo_flow::api::registry, which remains public (crates/core/src/api/mod.rshaspub mod registry;).SortedRegistryis used withincrates/core(including its tests) as an internal implementation detail, consistent with the visibility change.
Overview
Narrows the public core crate surface for registry internals while preserving the public runtime helpers used by crate consumers and bindings.
Details
api::toolandapi::llm.Arcso guardrail snapshots can clone callbacks without exposing registry implementation details.Validation:
cargo fmt --allcargo test -p nemo-flowcargo test -p nemo-flow-adaptivecargo check -p nemo-flow-adaptivecargo check --workspacecargo clippy --workspace --all-targets -- -D warningsjust test-rustWhere should the reviewer start?
Start with
crates/core/src/api/registry.rsandcrates/core/src/registry.rsfor the narrowed registry model, thencrates/core/src/api/runtime/state.rsfor the remaining crate-private runtime chains and snapshot evaluation.Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)
Summary by CodeRabbit
Bug Fixes
Arc) closures for all middleware callbacks, enabling safer concurrent callback usage.Refactoring