Skip to content

fix(openclaw): unblock scope-upgrade approvals#4468

Merged
cv merged 16 commits into
mainfrom
fix/issue-4462-scope-upgrade-approval
May 29, 2026
Merged

fix(openclaw): unblock scope-upgrade approvals#4468
cv merged 16 commits into
mainfrom
fix/issue-4462-scope-upgrade-approval

Conversation

@ericksoa
Copy link
Copy Markdown
Contributor

@ericksoa ericksoa commented May 28, 2026

Summary

Validation

  • npm run build:cli
  • npx vitest run test/nemoclaw-start.test.ts test/sandbox-connect-inference.test.ts
  • npx vitest run test/validate-e2e-coverage.test.ts test/e2e-script-workflow.test.ts test/e2e-advisor-dispatch.test.ts --testTimeout 60000
  • bash -n test/e2e/test-issue-4462-scope-upgrade-approval.sh
  • shellcheck test/e2e/test-issue-4462-scope-upgrade-approval.sh
  • npx tsx scripts/e2e/lint-conventions.ts
  • git diff --check

Nightly Proofs

Notes

The product fix is in scripts/nemoclaw-start.sh and src/lib/actions/sandbox/connect.ts. The E2E/workflow changes are coverage and proof for the runtime approval behavior.

Summary by CodeRabbit

  • New Features

    • Added two nightly end-to-end jobs for positive approval and legacy repro/recovery of scope-upgrade flows.
  • Bug Fixes

    • Prevent gateway proxy settings from leaking into approval subprocesses and avoid marking timed-out attempts as approved.
    • Harden approval loop to tolerate timeouts/errors and improve deadlock recovery.
  • Tests

    • New E2E and unit tests covering approval, retry behavior, gateway persistence, and recovery scenarios.

Review Change Stack

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 28, 2026

📝 Walkthrough

Walkthrough

Strip OPENCLAW_GATEWAY_URL for in-sandbox approve subprocesses, separate attempted vs successful approval counting, update guard/watcher wiring and tests, add a comprehensive #4462 E2E script, and add two nightly CI jobs to run and report the E2E scenarios.

Changes

Issue #4462 Approval Deadlock Fix

Layer / File(s) Summary
Environment URL stripping for approval operations
scripts/nemoclaw-start.sh, src/lib/actions/sandbox/connect.ts, test/sandbox-connect-inference.test.ts, test/nemoclaw-start.test.ts
Auto-pair watcher, proxy-env guard, and sandbox approval subprocess now clone-and-strip OPENCLAW_GATEWAY_URL before invoking openclaw devices approve. Tests log and assert the env-copy/removal and recorded URL behavior.
Attempt counting and timeout handling refinement
scripts/nemoclaw-start.sh, src/lib/actions/sandbox/connect.ts, test/nemoclaw-start.test.ts
Approval loop tracks attempted approvals separately from successful approvals. Timeout sentinel (rc==124) does not mark requests as handled; only successful approvals (rc==0) are persisted.
Guard test harness for URL environment tracking
test/nemoclaw-start.test.ts, test/sandbox-connect-inference.test.ts
Guard harness extended to log OPENCLAW_GATEWAY_URL for invoked commands, refactors helpers to capture env logs, and adds #4462 assertions that OPENCLAW_GATEWAY_URL is unset only for devices approve.

Issue #4462 E2E Test Suite and Workflow Integration

Layer / File(s) Summary
E2E test for scope-upgrade approval scenarios
test/e2e/test-issue-4462-scope-upgrade-approval.sh
Adds a Bash E2E that provisions a NemoClaw/OpenClaw sandbox, creates/approves a CLI device, triggers a scope-upgrade via an agent, reproduces legacy pinned-approve failure, performs recovery approval via the proxy-env guard, and validates device state and gateway-path execution.
Nightly E2E workflow job integration
.github/workflows/nightly-e2e.yaml
Adds issue-4462-scope-upgrade-approval-e2e and issue-4462-gateway-pinned-approval-characterization-e2e jobs, updates selective-dispatch allowlist/docs, and includes the new jobs in notify-on-failure, report-to-pr, and scorecard aggregations.

Sequence Diagram

sequenceDiagram
  participant Test
  participant Sandbox
  participant Guard as proxy-env guard
  participant OpenClaw

  Test->>Sandbox: provision sandbox & create CLI device
  Test->>Sandbox: trigger agent to request scope-upgrade
  Test->>Sandbox: poll for pending scope-upgrade request
  Test->>Guard: run approval via proxy-env guard
  Guard->>OpenClaw: openclaw devices approve (OPENCLAW_GATEWAY_URL stripped)
  OpenClaw-->>Guard: approval rc / JSON
  Guard-->>Test: success/failure
  Test->>Sandbox: verify request cleared & device scopes updated
  Test->>Sandbox: run approved agent turn & verify gateway-mode output
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • NVIDIA/NemoClaw#4292: Related auto-approval and watcher/connect behavior changes affecting the same approval paths.
  • NVIDIA/NemoClaw#4151: Reusable E2E runner/workflow plumbing used by the new nightly jobs.

Suggested labels

CI/CD

Suggested reviewers

  • jyaunches
  • cv
  • prekshivyas

Poem

🐰 I nudged the gateway URL out of sight,
Approvals retried until they landed right,
Guards whisper "unset" for the approve command,
Nightly tests clap paws across the land,
Scope-upgrade hops through, steady and bright.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'fix(openclaw): unblock scope-upgrade approvals' directly describes the main objective of the PR, which is to fix a scope-upgrade approval deadlock issue (#4462) by modifying how the openclaw approve command handles the OPENCLAW_GATEWAY_URL environment variable.
Linked Issues check ✅ Passed The PR fully addresses all coding requirements from issue #4462: it removes OPENCLAW_GATEWAY_URL only for 'openclaw devices approve' to enable local fallback, preserves gateway-pinned list/read operations, refines handled bookkeeping to allow timeouts to be retryable, updates auto-pair watcher logic, adds comprehensive E2E test coverage for both positive and legacy approval paths, and implements necessary workflow configurations for selective E2E dispatch and reporting.
Out of Scope Changes check ✅ Passed All changes are directly aligned with issue #4462 objectives: modifications to nemoclaw-start.sh and connect.ts address the approval deadlock, the E2E test validates the fix, test updates ensure approval logic correctness, workflow additions support selective E2E verification, and there are no extraneous changes unrelated to the scope-upgrade approval deadlock resolution.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/issue-4462-scope-upgrade-approval

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

Comment thread test/e2e/test-issue-4462-scope-upgrade-approval.sh Fixed
Comment thread test/e2e/test-issue-4462-scope-upgrade-approval.sh Fixed
Comment thread test/e2e/test-issue-4462-scope-upgrade-approval.sh Fixed
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 28, 2026

E2E Advisor Recommendation

Required E2E: issue-4462-scope-upgrade-approval-e2e
Optional E2E: issue-4462-gateway-pinned-approval-characterization-e2e, sandbox-survival-e2e, sandbox-operations-e2e

Dispatch hint: issue-4462-scope-upgrade-approval-e2e,issue-4462-gateway-pinned-approval-characterization-e2e,sandbox-survival-e2e,sandbox-operations-e2e

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • issue-4462-scope-upgrade-approval-e2e (high): Direct regression gate for this PR: builds a real sandbox, validates CLI scope-upgrade approval using the fixed path, and confirms the approved OpenClaw agent run stays on the gateway path.

Optional E2E

  • issue-4462-gateway-pinned-approval-characterization-e2e (high): Useful diagnostic companion for OpenClaw CLI scope-upgrade approval deadlocks and forces openclaw agent into embedded fallback #4462: characterizes the legacy gateway-pinned approval behavior and recovery path. It is marked diagnostic/characterization rather than the primary merge gate.
  • sandbox-survival-e2e (high): Adjacent confidence for changes in the startup script and sandbox environment: verifies a real sandbox remains discoverable, connectable, and capable of live inference across gateway restart.
  • sandbox-operations-e2e (high): Broad sandbox lifecycle and real OpenClaw chat coverage. Useful because the PR changes in-sandbox startup/proxy guard behavior and connect-adjacent authorization handling.

New E2E recommendations

  • connect-time late scope-upgrade approval (medium): The new issue-4462 E2E validates the in-sandbox proxy-env guard and startup watcher/manual approval path, but it does not appear to exercise nemoclaw <sandbox> connect itself as the mechanism that runs runConnectAutoPairApprovalPass. Existing unit coverage checks the generated script, but a future E2E should force a pending allowlisted scope upgrade, invoke nemoclaw <sandbox> connect non-interactively or via a probe mode, and verify the pending request is approved before SSH/session handoff.
    • Suggested test: Add an E2E that validates the connect-time auto-pair approval pass for pending OpenClaw CLI/webchat scope upgrades.

Dispatch hint

  • Workflow: .github/workflows/nightly-e2e.yaml
  • jobs input: issue-4462-scope-upgrade-approval-e2e,issue-4462-gateway-pinned-approval-characterization-e2e,sandbox-survival-e2e,sandbox-operations-e2e

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 28, 2026

E2E Scenario Advisor Recommendation

Required scenario E2E: None
Optional scenario E2E: None

Workflow run

Full scenario advisor summary

E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required scenario E2E

  • None. No scenario workflow, scenario metadata, scenario runtime, or validation-suite files changed.

Optional scenario E2E

  • None.

Relevant changed files

  • None.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 28, 2026

PR Review Advisor

Findings: 1 needs attention, 8 worth checking, 0 nice ideas
Since last review: 3 prior items resolved, 4 still apply, 0 new items found

Review findings

🛠️ Needs attention

🔎 Worth checking

  • Source-of-truth review needed: scripts/nemoclaw-start.sh auto-pair local fallback: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The workaround boundary is documented near `run(..., strip_gateway_url=True)`, but arbitrary/nonexistent request id and unexpected-scope denial are not proven.
  • Source-of-truth review needed: scripts/nemoclaw-start.sh interactive `openclaw devices approve` wrapper: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The wrapper applies to every `openclaw devices approve ...`; no negative tests prove arbitrary/nonexistent ids or unexpected scopes are denied.
  • Source-of-truth review needed: src/lib/actions/sandbox/connect.ts best-effort approval pass: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The generated Python loop is not executed in tests against malformed JSON, duplicate ids, max attempts, unknown clients, nonzero approvals, or timeouts.
  • Source-of-truth review needed: .github/workflows/nightly-e2e.yaml OpenClaw CLI scope-upgrade approval deadlocks and forces openclaw agent into embedded fallback #4462 jobs: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The jobs use `inputs.target_ref || github.ref`, `nvidia_api_key: true`, and raw failure artifacts for install, approval, agent, and state logs.
  • Source-of-truth review needed: test/e2e/test-issue-4462-scope-upgrade-approval.sh legacy repro tolerance: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: Lines around the legacy approval handler pass timeout, replacement request id, generic nonzero, clean success, and already-applied outcomes, so the literal issue clause is not required.
  • Local fallback device approval lacks an equivalent authorization proof (scripts/nemoclaw-start.sh:1769): The sandbox wrapper unsets `OPENCLAW_GATEWAY_URL` for every interactive `openclaw devices approve ...`, and the auto-pair/connect paths also approve through OpenClaw local fallback. The automated paths keep client/mode allowlists, but nearby comments explicitly say those fields are spoofable defense-in-depth, not a trust boundary. The current tests prove env stripping and happy paths, but not that a sandbox process that knows or guesses a request id cannot approve arbitrary clients or unintended scope upgrades.
    • Recommendation: Constrain the wrapper exception to the intended approval scope if possible, or document the OpenClaw local-fallback authorization contract and add negative tests for arbitrary/nonexistent request ids, unknown or spoofed clients, unexpected/admin scopes, and unintended upgrades from inside the sandbox.
    • Evidence: `openclaw() { if [ "${1:-}" = "devices" ] && [ "${2:-}" = "approve" ]; then ( unset OPENCLAW_GATEWAY_URL; command openclaw "$@" ); return $?; fi ... }`; auto-pair/connect use `ALLOWED_CLIENTS` and `ALLOWED_MODES`, while the auto-pair comments state client id/mode are spoofable.
  • New OpenClaw CLI scope-upgrade approval deadlocks and forces openclaw agent into embedded fallback #4462 jobs expand the secret-bearing target-ref and artifact surface (.github/workflows/nightly-e2e.yaml:411): The new nightly jobs execute `inputs.target_ref || github.ref` code with `nvidia_api_key: true` and upload raw install, approval, agent, and device-state logs on failure. `github_token: false`, pinned actions, and `persist-credentials: false` are useful mitigations, but the jobs still expand the trusted-code boundary and may expose request ids, gateway diagnostics, provider output, or accidentally printed secrets in artifacts. The reusable E2E workflow also exposes real messaging E2E secrets to the script environment independent of these new jobs' `nvidia_api_key` setting.
    • Recommendation: Document or enforce that these secret-bearing jobs only dispatch trusted refs, and add redaction or narrower artifact paths for approval, agent, install, and state logs before uploading failure artifacts. Consider limiting reusable workflow secrets to only those requested by each job.
    • Evidence: Both added jobs use `ref: ${{ inputs.target_ref || github.ref }}`, `nvidia_api_key: true`, `github_token: false`, and artifact paths including approval, agent, install, and device-state logs; `.github/workflows/e2e-script.yaml` exports real messaging E2E secrets in the Run E2E script step.
  • Connect approval-pass coverage remains mostly string inspection (test/sandbox-connect-inference.test.ts:1208): The connect-time approval pass is security-sensitive inline shell/Python that parses pending-device JSON, filters clients, strips `OPENCLAW_GATEWAY_URL` only for approve calls, bounds attempts, ignores failures, and proceeds with connect. The current test checks generated script substrings rather than executing the approval loop against representative pending states.
    • Recommendation: Extract the approval helper or execute the generated script with a fake `openclaw` binary. Cover duplicate request ids, unknown clients that must not be approved, max-attempt behavior, env stripping for approve but not list, nonzero approve handling, timeout handling, malformed JSON, and persistent failure/backoff behavior.
    • Evidence: The test asserts `script.toContain(...)` for `approve_env.pop('OPENCLAW_GATEWAY_URL', None)`, allowlist strings, return-code handling, and ordering, but does not run the Python approval loop.

🌱 Nice ideas

  • None.
Since last review details

Current findings:

  • Source-of-truth review needed: scripts/nemoclaw-start.sh auto-pair local fallback: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The workaround boundary is documented near `run(..., strip_gateway_url=True)`, but arbitrary/nonexistent request id and unexpected-scope denial are not proven.
  • Source-of-truth review needed: scripts/nemoclaw-start.sh interactive `openclaw devices approve` wrapper: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The wrapper applies to every `openclaw devices approve ...`; no negative tests prove arbitrary/nonexistent ids or unexpected scopes are denied.
  • Source-of-truth review needed: src/lib/actions/sandbox/connect.ts best-effort approval pass: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The generated Python loop is not executed in tests against malformed JSON, duplicate ids, max attempts, unknown clients, nonzero approvals, or timeouts.
  • Source-of-truth review needed: .github/workflows/nightly-e2e.yaml OpenClaw CLI scope-upgrade approval deadlocks and forces openclaw agent into embedded fallback #4462 jobs: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The jobs use `inputs.target_ref || github.ref`, `nvidia_api_key: true`, and raw failure artifacts for install, approval, agent, and state logs.
  • Source-of-truth review needed: test/e2e/test-issue-4462-scope-upgrade-approval.sh legacy repro tolerance: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: Lines around the legacy approval handler pass timeout, replacement request id, generic nonzero, clean success, and already-applied outcomes, so the literal issue clause is not required.
  • Legacy repro still does not prove the same-request OpenClaw CLI scope-upgrade approval deadlocks and forces openclaw agent into embedded fallback #4462 failure (test/e2e/test-issue-4462-scope-upgrade-approval.sh:506): Issue OpenClaw CLI scope-upgrade approval deadlocks and forces openclaw agent into embedded fallback #4462 says gateway-pinned `openclaw devices approve <requestId> --json` fails with `GatewayClientRequestError: scope upgrade pending approval (requestId: <same-id>)`. The legacy characterization lane still treats timeout, replacement request id, generic nonzero output, clean success, or failure-after-approval as passing outcomes, so it can report the legacy behavior characterized without proving the literal deadlock clause it is meant to cover.
    • Recommendation: Make the legacy-repro success condition require the pending-scope `GatewayClientRequestError` for the target request id when claiming the OpenClaw CLI scope-upgrade approval deadlocks and forces openclaw agent into embedded fallback #4462 repro. Treat timeout, replacement ids, clean success, and failure-after-approval as diagnostics or compatibility observations, not proof of the linked issue clause.
    • Evidence: The legacy function passes `legacy_rc=124` as `legacy gateway-pinned devices approve timed out before approval could complete`, passes replacement request ids, passes generic nonzero output, and also passes when the scope upgrade was already applied.
  • Local fallback device approval lacks an equivalent authorization proof (scripts/nemoclaw-start.sh:1769): The sandbox wrapper unsets `OPENCLAW_GATEWAY_URL` for every interactive `openclaw devices approve ...`, and the auto-pair/connect paths also approve through OpenClaw local fallback. The automated paths keep client/mode allowlists, but nearby comments explicitly say those fields are spoofable defense-in-depth, not a trust boundary. The current tests prove env stripping and happy paths, but not that a sandbox process that knows or guesses a request id cannot approve arbitrary clients or unintended scope upgrades.
    • Recommendation: Constrain the wrapper exception to the intended approval scope if possible, or document the OpenClaw local-fallback authorization contract and add negative tests for arbitrary/nonexistent request ids, unknown or spoofed clients, unexpected/admin scopes, and unintended upgrades from inside the sandbox.
    • Evidence: `openclaw() { if [ "${1:-}" = "devices" ] && [ "${2:-}" = "approve" ]; then ( unset OPENCLAW_GATEWAY_URL; command openclaw "$@" ); return $?; fi ... }`; auto-pair/connect use `ALLOWED_CLIENTS` and `ALLOWED_MODES`, while the auto-pair comments state client id/mode are spoofable.
  • New OpenClaw CLI scope-upgrade approval deadlocks and forces openclaw agent into embedded fallback #4462 jobs expand the secret-bearing target-ref and artifact surface (.github/workflows/nightly-e2e.yaml:411): The new nightly jobs execute `inputs.target_ref || github.ref` code with `nvidia_api_key: true` and upload raw install, approval, agent, and device-state logs on failure. `github_token: false`, pinned actions, and `persist-credentials: false` are useful mitigations, but the jobs still expand the trusted-code boundary and may expose request ids, gateway diagnostics, provider output, or accidentally printed secrets in artifacts. The reusable E2E workflow also exposes real messaging E2E secrets to the script environment independent of these new jobs' `nvidia_api_key` setting.
    • Recommendation: Document or enforce that these secret-bearing jobs only dispatch trusted refs, and add redaction or narrower artifact paths for approval, agent, install, and state logs before uploading failure artifacts. Consider limiting reusable workflow secrets to only those requested by each job.
    • Evidence: Both added jobs use `ref: ${{ inputs.target_ref || github.ref }}`, `nvidia_api_key: true`, `github_token: false`, and artifact paths including approval, agent, install, and device-state logs; `.github/workflows/e2e-script.yaml` exports real messaging E2E secrets in the Run E2E script step.
  • Connect approval-pass coverage remains mostly string inspection (test/sandbox-connect-inference.test.ts:1208): The connect-time approval pass is security-sensitive inline shell/Python that parses pending-device JSON, filters clients, strips `OPENCLAW_GATEWAY_URL` only for approve calls, bounds attempts, ignores failures, and proceeds with connect. The current test checks generated script substrings rather than executing the approval loop against representative pending states.
    • Recommendation: Extract the approval helper or execute the generated script with a fake `openclaw` binary. Cover duplicate request ids, unknown clients that must not be approved, max-attempt behavior, env stripping for approve but not list, nonzero approve handling, timeout handling, malformed JSON, and persistent failure/backoff behavior.
    • Evidence: The test asserts `script.toContain(...)` for `approve_env.pop('OPENCLAW_GATEWAY_URL', None)`, allowlist strings, return-code handling, and ordering, but does not run the Python approval loop.

Workflow run details

This is an automated advisory review. A human maintainer must make the final merge decision.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26604218244
Target ref: 9c956cf4e53767155fd2caf82d2642c082e3cc4a
Workflow ref: fix/issue-4462-scope-upgrade-approval
Requested jobs: issue-4462-scope-upgrade-approval-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
issue-4462-scope-upgrade-approval-e2e ✅ success

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 28, 2026

Actionable comments posted: 0

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 28, 2026

Actionable comments posted: 0

@cv cv self-assigned this May 28, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26604659560
Target ref: 6cc9fd54df2489e96d6053e7625195128e459351
Workflow ref: fix/issue-4462-scope-upgrade-approval
Requested jobs: issue-4462-scope-upgrade-approval-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
issue-4462-scope-upgrade-approval-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26604744502
Target ref: 6cc9fd54df2489e96d6053e7625195128e459351
Workflow ref: main
Requested jobs: sandbox-operations-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
sandbox-operations-e2e ✅ success

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 28, 2026

Actionable comments posted: 0

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26605221785
Target ref: 59a0f2410923f7000f944ac35fc17de326eb359e
Workflow ref: fix/issue-4462-scope-upgrade-approval
Requested jobs: issue-4462-scope-upgrade-approval-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
issue-4462-scope-upgrade-approval-e2e ✅ success

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 28, 2026

Actionable comments posted: 0

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26605540893
Target ref: d0b23f3ecac43e1e0568b9305cd41aabd83fd75a
Workflow ref: fix/issue-4462-scope-upgrade-approval
Requested jobs: issue-4462-scope-upgrade-approval-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
issue-4462-scope-upgrade-approval-e2e ✅ success

@cv
Copy link
Copy Markdown
Collaborator

cv commented May 28, 2026

Follow-up pushed at aa609d2e:

Local validation:

  • bash -n test/e2e/test-issue-4462-scope-upgrade-approval.sh
  • npx vitest run test/nemoclaw-start.test.ts test/sandbox-connect-inference.test.ts -t "#4462|auto-pair|#4263|approval pass"

Dispatched fresh selective E2E for both #4462 lanes against aa609d2e: https://github.com/NVIDIA/NemoClaw/actions/runs/26605795773

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 28, 2026

Actionable comments posted: 0

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26605795773
Target ref: aa609d2e327db326245771a4df496c8312ed5e58
Workflow ref: fix/issue-4462-scope-upgrade-approval
Requested jobs: issue-4462-scope-upgrade-approval-e2e,issue-4462-scope-upgrade-deadlock-repro-e2e
Summary: 1 passed, 1 failed, 0 skipped

Job Result
issue-4462-scope-upgrade-approval-e2e ✅ success
issue-4462-scope-upgrade-deadlock-repro-e2e ❌ failure

Failed jobs: issue-4462-scope-upgrade-deadlock-repro-e2e. Check run artifacts for logs.

@cv
Copy link
Copy Markdown
Collaborator

cv commented May 28, 2026

Pushed 2ff2f677 to keep the #4462 repro strict while accepting OpenClaw replacement request IDs. The failing aa609d2e repro showed the legacy approve command was invoked for one pending request but OpenClaw reported a fresh replacement request id in the pending-scope error; the test now requires the #4462 signature and a reported request id, but no longer requires it to equal the originally observed pending id.

Local validation repeated:

  • bash -n test/e2e/test-issue-4462-scope-upgrade-approval.sh
  • npx vitest run test/nemoclaw-start.test.ts test/sandbox-connect-inference.test.ts -t "#4462|auto-pair|#4263|approval pass"

Fresh selective E2E for both #4462 lanes against 2ff2f677: https://github.com/NVIDIA/NemoClaw/actions/runs/26606354890

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26606354890
Target ref: 2ff2f677c
Workflow ref: fix/issue-4462-scope-upgrade-approval
Requested jobs: issue-4462-scope-upgrade-approval-e2e,issue-4462-scope-upgrade-deadlock-repro-e2e
Summary: 0 passed, 2 failed, 0 skipped

Job Result
issue-4462-scope-upgrade-approval-e2e ❌ failure
issue-4462-scope-upgrade-deadlock-repro-e2e ❌ failure

Failed jobs: issue-4462-scope-upgrade-approval-e2e, issue-4462-scope-upgrade-deadlock-repro-e2e. Check run artifacts for logs.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26606399473
Target ref: 2ff2f677c970b844826bf0867754c64ecd2dac81
Workflow ref: main
Requested jobs: device-auth-health-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
device-auth-health-e2e ✅ success

@ericksoa ericksoa added v0.0.54 Release target bug Something isn't working fix Integration: OpenClaw Support for OpenClaw OpenShell Support for OpenShell, a safe, private runtime for autonomous AI agents Sandbox Use this label to identify issues related to the NemoClaw isolated environment based on OpenShell. NemoClaw CLI Use this label to identify issues with the NemoClaw command-line interface (CLI). E2E End-to-end testing — Brev infrastructure, test cases, nightly failures, and coverage gaps nightly-e2e Nightly E2E test failures enhancement: testing Use this label to identify requests to improve NemoClaw test coverage. labels May 29, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26609778207
Target ref: 0dd685136ab6920d4563805b8459c49b62b7c84b
Workflow ref: fix/issue-4462-scope-upgrade-approval
Requested jobs: all (no filter)
Summary: 26 passed, 6 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ✅ success
brave-search-e2e ✅ success
channels-add-remove-e2e ⚠️ cancelled
channels-stop-start-e2e ⚠️ cancelled
cloud-e2e ⚠️ cancelled
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
credential-migration-e2e ✅ success
credential-sanitization-e2e ✅ success
device-auth-health-e2e ✅ success
diagnostics-e2e ⚠️ cancelled
docs-validation-e2e ✅ success
double-onboard-e2e ⚠️ cancelled
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-dashboard-e2e ❌ failure
hermes-discord-e2e ✅ success
hermes-e2e ❌ failure
hermes-inference-switch-e2e ✅ success
hermes-onboard-security-posture-e2e ❌ failure
hermes-root-entrypoint-smoke-e2e ✅ success
hermes-slack-e2e ✅ success
inference-routing-e2e ✅ success
issue-2478-crash-loop-recovery-e2e ⚠️ cancelled
issue-3600-gpu-proof-optional-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success
issue-4462-scope-upgrade-deadlock-repro-e2e ❌ failure
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ⚠️ cancelled
network-policy-e2e ⚠️ cancelled
onboard-negative-paths-e2e ⚠️ cancelled
onboard-repair-e2e ⚠️ cancelled
onboard-resume-e2e ⚠️ cancelled
openclaw-discord-pairing-e2e ✅ success
openclaw-inference-switch-e2e ⚠️ cancelled
openclaw-onboard-security-posture-e2e ✅ success
openclaw-slack-pairing-e2e ⚠️ cancelled
openclaw-tui-chat-correlation-e2e ⚠️ cancelled
openshell-gateway-upgrade-e2e ⚠️ cancelled
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ❌ failure
rebuild-hermes-stale-base-e2e ❌ failure
rebuild-openclaw-e2e ⚠️ cancelled
runtime-overrides-e2e ⚠️ cancelled
sandbox-operations-e2e ⚠️ cancelled
sandbox-survival-e2e ✅ success
shields-config-e2e ⚠️ cancelled
skill-agent-e2e ⚠️ cancelled
snapshot-commands-e2e ✅ success
state-backup-restore-e2e ⚠️ cancelled
telegram-injection-e2e ✅ success
token-rotation-e2e ⚠️ cancelled
tunnel-lifecycle-e2e ✅ success
upgrade-stale-sandbox-e2e ⚠️ cancelled
vm-driver-privileged-exec-routing-e2e ✅ success

Failed jobs: hermes-dashboard-e2e, hermes-e2e, hermes-onboard-security-posture-e2e, issue-4462-scope-upgrade-deadlock-repro-e2e, rebuild-hermes-e2e, rebuild-hermes-stale-base-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26609807234
Target ref: 0dd685136ab6920d4563805b8459c49b62b7c84b
Workflow ref: main
Requested jobs: cloud-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
cloud-e2e ✅ success

@cv
Copy link
Copy Markdown
Collaborator

cv commented May 29, 2026

Proposed way to resolve the remaining #4462 repro ambiguity before we make more changes:

The positive lane is now the stable fix signal: it builds the real sandbox, gets from low-scope CLI pairing through scope-upgrade approval, and verifies the next openclaw agent turn stays on the gateway path with no embedded fallback. That should be the required gate for the NemoClaw workaround.

The legacy deadlock-repro lane is proving useful, but recent runs show it is characterizing multiple upstream OpenClaw gateway-pinned approval behaviors rather than one deterministic issue shape:

  • exact pending-scope failure can happen;
  • OpenClaw may report a replacement request id;
  • OpenClaw may return the pending-scope failure while still applying the approval;
  • timeout/unexpected-success are possible diagnostic outcomes.

Because issue #4462 originally described a same-request deadlock, requiring the legacy lane to pass as an exact repro is making the PR brittle and is what the advisor is flagging. I suggest we re-scope that lane as a characterization/diagnostic lane rather than a required merge gate, and stop claiming it proves the same-request deadlock unless the logs actually show that subcase.

Concrete planned changes, pending agreement:

  1. Keep issue-4462-scope-upgrade-approval-e2e as the required OpenClaw CLI scope-upgrade approval deadlocks and forces openclaw agent into embedded fallback #4462 fix gate.
  2. Remove issue-4462-scope-upgrade-deadlock-repro-e2e from the required E2E recommendation/dispatch hint, or rename/comment it as legacy gateway-pinned approval characterization.
  3. Update comments/PR wording to say the source issue is OpenClaw gateway/device approval semantics; NemoClaw’s workaround is to strip OPENCLAW_GATEWAY_URL only for approval calls and use local fallback.
  4. Keep the removal condition documented: drop the workaround once OpenClaw devices approve <scope-upgrade> can complete through the gateway using only operator.pairing and exits 0 with valid approval JSON.

I want to clear this with @ericksoa before editing the workflow/test naming further.

@cv
Copy link
Copy Markdown
Collaborator

cv commented May 29, 2026

Implemented the agreed re-scope in 06f5c91fa:

Also fixed the CodeRabbit nit by removing the unused SKIP counter from the E2E summary.

Validation run locally:

  • bash -n test/e2e/test-issue-4462-scope-upgrade-approval.sh
  • npx vitest run test/e2e-script-workflow.test.ts test/validate-e2e-coverage.test.ts test/nemoclaw-start.test.ts test/sandbox-connect-inference.test.ts -t "4462|auto-pair|approval pass|nightly|e2e"

Fresh selective E2E against 06f5c91fa for the fix gate plus characterization lane: https://github.com/NVIDIA/NemoClaw/actions/runs/26611223063

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26610174331
Target ref: 734124b6cb74740256ff6c242b7b8cc891819eb4
Workflow ref: fix/issue-4462-scope-upgrade-approval
Requested jobs: all (no filter)
Summary: 50 passed, 4 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ✅ success
brave-search-e2e ✅ success
channels-add-remove-e2e ✅ success
channels-stop-start-e2e ⚠️ cancelled
cloud-e2e ✅ success
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
credential-migration-e2e ✅ success
credential-sanitization-e2e ✅ success
device-auth-health-e2e ✅ success
diagnostics-e2e ✅ success
docs-validation-e2e ✅ success
double-onboard-e2e ✅ success
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-dashboard-e2e ❌ failure
hermes-discord-e2e ✅ success
hermes-e2e ✅ success
hermes-inference-switch-e2e ✅ success
hermes-onboard-security-posture-e2e ✅ success
hermes-root-entrypoint-smoke-e2e ✅ success
hermes-slack-e2e ✅ success
inference-routing-e2e ✅ success
issue-2478-crash-loop-recovery-e2e ✅ success
issue-3600-gpu-proof-optional-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success
issue-4462-scope-upgrade-deadlock-repro-e2e ❌ failure
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ✅ success
network-policy-e2e ✅ success
onboard-negative-paths-e2e ✅ success
onboard-repair-e2e ✅ success
onboard-resume-e2e ✅ success
openclaw-discord-pairing-e2e ✅ success
openclaw-inference-switch-e2e ✅ success
openclaw-onboard-security-posture-e2e ✅ success
openclaw-slack-pairing-e2e ✅ success
openclaw-tui-chat-correlation-e2e ✅ success
openshell-gateway-upgrade-e2e ✅ success
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ❌ failure
rebuild-hermes-stale-base-e2e ❌ failure
rebuild-openclaw-e2e ✅ success
runtime-overrides-e2e ✅ success
sandbox-operations-e2e ✅ success
sandbox-survival-e2e ✅ success
shields-config-e2e ✅ success
skill-agent-e2e ✅ success
snapshot-commands-e2e ✅ success
state-backup-restore-e2e ✅ success
telegram-injection-e2e ✅ success
token-rotation-e2e ✅ success
tunnel-lifecycle-e2e ✅ success
upgrade-stale-sandbox-e2e ✅ success
vm-driver-privileged-exec-routing-e2e ✅ success

Failed jobs: hermes-dashboard-e2e, issue-4462-scope-upgrade-deadlock-repro-e2e, rebuild-hermes-e2e, rebuild-hermes-stale-base-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26611223063
Target ref: 06f5c91fa
Workflow ref: fix/issue-4462-scope-upgrade-approval
Requested jobs: issue-4462-scope-upgrade-approval-e2e,issue-4462-gateway-pinned-approval-characterization-e2e
Summary: 0 passed, 2 failed, 0 skipped

Job Result
issue-4462-gateway-pinned-approval-characterization-e2e ❌ failure
issue-4462-scope-upgrade-approval-e2e ❌ failure

Failed jobs: issue-4462-gateway-pinned-approval-characterization-e2e, issue-4462-scope-upgrade-approval-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26610174331
Target ref: 734124b6cb74740256ff6c242b7b8cc891819eb4
Workflow ref: fix/issue-4462-scope-upgrade-approval
Requested jobs: all (no filter)
Summary: 50 passed, 0 failed, 2 skipped

Job Result
bedrock-runtime-compatible-anthropic-e2e ✅ success
brave-search-e2e ✅ success
channels-add-remove-e2e ✅ success
channels-stop-start-e2e ⚠️ cancelled
cloud-e2e ✅ success
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
credential-migration-e2e ✅ success
credential-sanitization-e2e ✅ success
device-auth-health-e2e ✅ success
diagnostics-e2e ✅ success
docs-validation-e2e ✅ success
double-onboard-e2e ✅ success
gpu-double-onboard-e2e ⏭️ skipped
gpu-e2e ⏭️ skipped
hermes-dashboard-e2e ⚠️ cancelled
hermes-discord-e2e ✅ success
hermes-e2e ✅ success
hermes-inference-switch-e2e ✅ success
hermes-onboard-security-posture-e2e ✅ success
hermes-root-entrypoint-smoke-e2e ✅ success
hermes-slack-e2e ✅ success
inference-routing-e2e ✅ success
issue-2478-crash-loop-recovery-e2e ✅ success
issue-3600-gpu-proof-optional-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success
issue-4462-scope-upgrade-deadlock-repro-e2e ⚠️ cancelled
kimi-inference-compat-e2e ✅ success
launchable-smoke-e2e ✅ success
messaging-compatible-endpoint-e2e ✅ success
messaging-providers-e2e ✅ success
network-policy-e2e ✅ success
onboard-negative-paths-e2e ✅ success
onboard-repair-e2e ✅ success
onboard-resume-e2e ✅ success
openclaw-discord-pairing-e2e ✅ success
openclaw-inference-switch-e2e ✅ success
openclaw-onboard-security-posture-e2e ✅ success
openclaw-slack-pairing-e2e ✅ success
openclaw-tui-chat-correlation-e2e ✅ success
openshell-gateway-upgrade-e2e ✅ success
overlayfs-autofix-e2e ✅ success
rebuild-hermes-e2e ⚠️ cancelled
rebuild-hermes-stale-base-e2e ⚠️ cancelled
rebuild-openclaw-e2e ✅ success
runtime-overrides-e2e ✅ success
sandbox-operations-e2e ✅ success
sandbox-survival-e2e ✅ success
shields-config-e2e ✅ success
skill-agent-e2e ✅ success
snapshot-commands-e2e ✅ success
state-backup-restore-e2e ✅ success
telegram-injection-e2e ✅ success
token-rotation-e2e ✅ success
tunnel-lifecycle-e2e ✅ success
upgrade-stale-sandbox-e2e ✅ success
vm-driver-privileged-exec-routing-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26611223063
Target ref: 06f5c91fa
Workflow ref: fix/issue-4462-scope-upgrade-approval
Requested jobs: issue-4462-scope-upgrade-approval-e2e,issue-4462-gateway-pinned-approval-characterization-e2e
Summary: 0 passed, 2 failed, 0 skipped

Job Result
issue-4462-gateway-pinned-approval-characterization-e2e ❌ failure
issue-4462-scope-upgrade-approval-e2e ❌ failure

Failed jobs: issue-4462-gateway-pinned-approval-characterization-e2e, issue-4462-scope-upgrade-approval-e2e. Check run artifacts for logs.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/nightly-e2e.yaml (1)

433-458: ⚠️ Potential issue | 🟠 Major

Add missing .coderabbit.yaml path_instructions mapping for the new issue-4462 nightly E2E job
.github/workflows/nightly-e2e.yaml job issue-4462-gateway-pinned-approval-characterization-e2e runs test/e2e/test-issue-4462-scope-upgrade-approval.sh, but .coderabbit.yaml only maps the issue-specific test/e2e/test-issue-2478-crash-loop-recovery.sh under test/e2e/test-issue* and has no corresponding entry (or covering wildcard) for the issue-4462 script.

🤖 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 @.github/workflows/nightly-e2e.yaml around lines 433 - 458, Add a mapping in
.coderabbit.yaml's path_instructions so the new nightly job's script is
recognized: the job issue-4462-gateway-pinned-approval-characterization-e2e in
.github/workflows/nightly-e2e.yaml executes
test/e2e/test-issue-4462-scope-upgrade-approval.sh, but .coderabbit.yaml
currently only maps test/e2e/test-issue-2478-crash-loop-recovery.sh under
test/e2e/test-issue*; update path_instructions to include either an explicit
entry for test/e2e/test-issue-4462-scope-upgrade-approval.sh or broaden the
existing wildcard to cover test/e2e/test-issue-*.sh so the new script is picked
up by code rabbit.
🤖 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 @.github/workflows/nightly-e2e.yaml:
- Around line 433-458: Add a mapping in .coderabbit.yaml's path_instructions so
the new nightly job's script is recognized: the job
issue-4462-gateway-pinned-approval-characterization-e2e in
.github/workflows/nightly-e2e.yaml executes
test/e2e/test-issue-4462-scope-upgrade-approval.sh, but .coderabbit.yaml
currently only maps test/e2e/test-issue-2478-crash-loop-recovery.sh under
test/e2e/test-issue*; update path_instructions to include either an explicit
entry for test/e2e/test-issue-4462-scope-upgrade-approval.sh or broaden the
existing wildcard to cover test/e2e/test-issue-*.sh so the new script is picked
up by code rabbit.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: d3f216ae-871c-4d65-808a-1daaed471590

📥 Commits

Reviewing files that changed from the base of the PR and between b52d70a and 06f5c91.

📒 Files selected for processing (2)
  • .github/workflows/nightly-e2e.yaml
  • test/e2e/test-issue-4462-scope-upgrade-approval.sh

@cv
Copy link
Copy Markdown
Collaborator

cv commented May 29, 2026

Re-dispatched the #4462 selective E2E with the full target SHA (the previous manual run used a short SHA and failed at checkout before executing tests).

Run: https://github.com/NVIDIA/NemoClaw/actions/runs/26611504524
Target: 06f5c91fa83714e50be6c3e17a663d1342e5e094
Jobs: issue-4462-scope-upgrade-approval-e2e, issue-4462-gateway-pinned-approval-characterization-e2e

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26611504524
Target ref: 06f5c91fa83714e50be6c3e17a663d1342e5e094
Workflow ref: fix/issue-4462-scope-upgrade-approval
Requested jobs: issue-4462-scope-upgrade-approval-e2e,issue-4462-gateway-pinned-approval-characterization-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
issue-4462-gateway-pinned-approval-characterization-e2e ✅ success
issue-4462-scope-upgrade-approval-e2e ✅ success

@cv cv merged commit e3c8d11 into main May 29, 2026
207 of 211 checks passed
@cv cv deleted the fix/issue-4462-scope-upgrade-approval branch May 29, 2026 01:45
@miyoungc miyoungc mentioned this pull request May 29, 2026
12 tasks
miyoungc added a commit that referenced this pull request May 29, 2026
## Summary
Refreshes the NemoClaw documentation for the v0.0.54 release and
regenerates user skills from the Fern MDX source. Also keeps the Fern
CLI pin current so local docs checks use the upgraded Fern version.

## Related Issue
<!-- No single related issue. This is release-prep documentation
catch-up. -->

## Changes
- #4403 -> `docs/manage-sandboxes/messaging-channels.mdx`,
`docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Document
Telegram, Discord, and Slack post-rebuild bridge verification and
summarize channel activation fixes.
- #4222 -> `docs/about/release-notes.mdx`: Include Slack generated
channel enablement in the v0.0.54 messaging summary.
- #4346 -> `docs/get-started/windows-preparation.mdx`,
`docs/about/release-notes.mdx`: Document safer Windows bootstrap
behavior for Ubuntu first-run and Docker Desktop WSL integration.
- #4416 -> `docs/inference/use-local-inference.mdx`,
`docs/about/release-notes.mdx`: Document the Docker Desktop WSL
requirement for Windows-host Ollama.
- #4442 -> `docs/about/release-notes.mdx`: Summarize the optional
NemoHermes native web dashboard and related environment variables.
- #4426 -> `docs/about/release-notes.mdx`: Summarize copy-paste recovery
hints for invalid sandbox names and missing NVIDIA API keys.
- #4459 -> `docs/about/release-notes.mdx`: Summarize the Linuxbrew
prefix fix for sandbox Homebrew usage.
- #4450 -> `docs/about/release-notes.mdx`: Summarize `/nemoclaw` slash
command startup activation.
- #4468 -> `docs/about/release-notes.mdx`: Summarize scope-upgrade
approval recovery.
- #4325 -> `docs/about/release-notes.mdx`: Summarize the narrowed
`web_fetch` host-gateway allowance.
- #4474 -> `docs/about/release-notes.mdx`: Summarize Hermes Provider
smoke-check behavior for OAuth versus Nous API key setup.
- Refresh generated `.agents/skills/nemoclaw-user-*` references from
`docs/` and update `fern/fern.config.json` to Fern `5.41.2`.

## Type of Change
- [ ] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [x] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Verification
<!-- Check each item you ran and confirmed. Leave unchecked items you
skipped. Doc-only changes do not require npm test unless you ran it. -->
- [ ] `npx prek run --all-files` passes
- [ ] `npm test` passes
- [ ] Tests added or updated for new or changed behavior
- [x] No secrets, API keys, or credentials committed
- [x] Docs updated for user-facing behavior changes
- [ ] `npm run docs` builds without warnings (doc changes only)
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

---
<!-- DCO sign-off required by CI. Run: git config user.name && git
config user.email -->
Signed-off-by: Miyoung Choi <miyoungc@nvidia.com>

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
  * Optional NemoHermes native web dashboard (configurable port and TUI)
* GPU memory cleanup now unloads Ollama models when switching providers
or stopping services

* **Bug Fixes**
  * Improved sandbox name validation with suggested slug recovery
* Windows-host Ollama now requires Docker Desktop WSL integration and
exits with remediation guidance when unsupported

* **Documentation**
* Clarified quickstart/onboard flow, installer TTY/non‑TTY guidance,
Hermes Docker prerequisites, sandbox hardening, and channels add rebuild
checks

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/NVIDIA/NemoClaw/pull/4539?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working E2E End-to-end testing — Brev infrastructure, test cases, nightly failures, and coverage gaps enhancement: testing Use this label to identify requests to improve NemoClaw test coverage. fix Integration: OpenClaw Support for OpenClaw NemoClaw CLI Use this label to identify issues with the NemoClaw command-line interface (CLI). nightly-e2e Nightly E2E test failures OpenShell Support for OpenShell, a safe, private runtime for autonomous AI agents Sandbox Use this label to identify issues related to the NemoClaw isolated environment based on OpenShell. v0.0.54 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

OpenClaw CLI scope-upgrade approval deadlocks and forces openclaw agent into embedded fallback

4 participants