feat(rust): add the embeddable node runtime lifecycle - #116450
Conversation
|
Codex review: needs maintainer review before merge. Reviewed September 16, 2026, 2:20 PM ET / 18:20 UTC (Revision 29). ClawSweeper reviewWhat this changesAdds reusable Rust node connection supervision, platform-owned signing, local command admission, and bounded streaming input/output with cancellation. Merge readiness✅ Ready for maintainer review This remains a useful, distinct follow-up to the now-merged Rust foundation. No blocking introduced defect was found; the foundation merge also resolves the previous concern about introducing these unpublished workspace crates. Priority: P2 Review scores
Verification
How this fits togetherThe Rust node runtime connects native hosts to OpenClaw’s Gateway and dispatches authorized commands to embedding-owned handlers. It returns progress and results while managing reconnects, deadlines, and session cleanup. flowchart TD
A[Native host configuration and signing] --> B[Connection lifecycle]
B --> C[Gateway session]
C --> D[Command manifest and local admission]
D --> E[Native command handler]
E --> F[Progress and final results]
C --> G[Cancellation and session retirement]
G --> E
F --> C
Before mergeNone. Agent review detailsSecurityNone. PR surfaceTests +1278, Other +2081. Total +3359 across 13 files. View PR surface stats
Review metrics
Root-cause clusterRelationship: Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Technical reviewBest possible solution: Keep lifecycle supervision in the existing Rust node-host owner while leaving durable authorization, platform permissions, and credential persistence with their established owners. Do we have a high-confidence way to reproduce the issue? Not applicable as a bug reproduction: this adds an embedding capability, and the inspected socket harnesses exercise its lifecycle and authority boundaries. Is this the best way to solve the issue? Yes. Extending the merged node-host crate and moving the foreground host onto the same lifecycle avoids competing supervision owners without changing shipped configuration or publishing a stable Rust API. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 89b85fd7c733. LabelsLabel justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (28 earlier review cycles; latest 8 shown)
|
10e4e6e to
c533982
Compare
c533982 to
d6eacef
Compare
0aaf017 to
5665723
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review blockedAutomated review did not run, so no review verdict was produced. Reason: The input-safety check could not safely complete for this revision. ClawSweeper will not retry this unchanged revision. Next step: No contributor action is requested. Maintainers should inspect the linked workflow run. |
5665723 to
83c1354
Compare
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2c44506f-c357-47e5-a867-91775df2093d
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2c44506f-c357-47e5-a867-91775df2093d
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2c44506f-c357-47e5-a867-91775df2093d
83c1354 to
e188700
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
Depends on #116050.
Summary
Adds the bounded embeddable Rust node lifecycle on refreshed #116050 and current OpenClaw authority behavior. It does not replay the August node schemas or generated native models: current
mainalready owns cancellation and protocol generation.The generic incubation source is giodl73-repo/openclaw-rust-node#15.
What this adds
DeviceSigningRequest;COMMAND_NOT_ADVERTISEDrejection;Current authority contract
The fixture's TypeScript consumer calls current
resolveRequiredNodeCommandAuthorityandresolveNodeCommandAllowlist. It covers invocable, pending-approval, undeclared, policy-withheld, widening/reapproval, revocation/reconciliation, pairing-generation retirement, and cancellation/deadline/disconnect cleanup behavior.Gateway remains authoritative for durable approvals, committed-policy reconciliation, allowlists, pairing-generation leases, runner declarations, and cancellation delivery. Rust owns deterministic advertisement, post-delivery local narrowing, handler lifecycle, and cleanup.
Position in the series
f9a7f104c22a581b004400b0a7313fff34774016.Boundaries
Worker/session hosting, workspace transfer, plugin duplex, host statistics,
system.run, PTY, MCP, skills, product IPC, credential persistence, and sidecar deployment remain outside bounded v1.Validation
e188700cfe35c2e08a1a9344d71912b5731a802d;f9a7f104c22a581b004400b0a7313fff34774016;-D warnings, rustdoc-D warnings, andgit diff --checkpassed; andAuthority proof
The public
CommandRuntime::runpath proves that a wire-delivered cancellation while local admission is awaiting returnsINVOCATION_CANCELLEDwithout constructing the native handler. Allowed completion and cancellation-driven native-effect suppression are also covered end to end; buffered retired-session and duplex-overflow paths remain fail-closed.