Skip to content

fix(onboard): suppress 'No active forward found' from best-effort forward stop#3997

Merged
ericksoa merged 2 commits into
mainfrom
fix/onboard-noisy-forward-stop-3971
May 21, 2026
Merged

fix(onboard): suppress 'No active forward found' from best-effort forward stop#3997
ericksoa merged 2 commits into
mainfrom
fix/onboard-noisy-forward-stop-3971

Conversation

@laitingsheng
Copy link
Copy Markdown
Contributor

@laitingsheng laitingsheng commented May 21, 2026

Summary

Onboard prints a stray ! No active forward found for port 18789 warning between the ✓ Dashboard is live and ✓ Sandbox '...' created lines on a clean first run. Route the dozen unconditional openshell forward stop cleanup calls through a single quiet-stop helper so unsolicited chatter from a stop with no active forward is hidden, while real failures still surface from the following forward start.

Related Issue

Fixes #3971

Changes

  • src/lib/onboard/forward-cleanup.ts (new): exports bestEffortForwardStop(runOpenshell, port) — wraps runOpenshell(["forward", "stop", port], { ignoreError: true, suppressOutput: true }). Lives under the onboard sub-module dir so the entrypoint-budget check stays net-neutral on src/lib/onboard.ts.
  • src/lib/onboard.ts: import the helper and route all 12 best-effort cleanup call sites through it (was the unconditional stop between Dashboard is live and Sandbox created lines).
  • src/lib/actions/sandbox/process-recovery.ts: same noise class on the sandbox-recovery forward stop path — pass stdio: "ignore" so the ! No active forward found warning does not surface through nemoclaw <name> connect recovery either.
  • test/onboard-forward-stop-quiet.test.ts: regression test — imports the helper directly with a callback runner stub and asserts the args, ignoreError: true, and suppressOutput: true are passed through. Plus port-coercion assertion for numeric and string inputs.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Verification

  • npx prek run --all-files passes
  • npm test passes
  • Tests added or updated for new or changed behavior
  • No secrets, API keys, or credentials committed
  • Docs updated for user-facing behavior changes
  • make docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: Tinson Lai tinsonl@nvidia.com

Summary by CodeRabbit

  • Refactor

    • Consolidated port-forward shutdown logic into a single helper and applied it across onboarding, gateway reuse, and dashboard startup flows for more consistent behavior.
  • Bug Fix

    • Suppress and ignore stop-command output during recovery to prevent noisy or confusing terminal output.
  • Tests

    • Added unit tests verifying port-stop calls, argument coercion, and quiet/error-suppressed execution.

Review Change Stack

…ward stop

Onboard issues best-effort `openshell forward stop` calls before every
`forward start` to clear stale forwards. On a clean first onboard the
target port has never been forwarded, so openshell emits a yellow
'! No active forward found for port N' warning that surfaces between
the 'Dashboard is live' and 'Sandbox created' lines.

Centralise the cleanup through a single `bestEffortForwardStop` helper
that passes `suppressOutput: true` alongside the existing
`ignoreError: true` — real failures are still surfaced by the
following `forward start`, only the unsolicited cleanup chatter is
hidden.

Fixes #3971

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 21, 2026

📝 Walkthrough

Walkthrough

Adds a new helper bestEffortForwardStop that calls a provided runner to stop an OpenShell forward with ignoreError and suppressOutput, replaces direct forward-stop calls across onboarding cleanup and forward-management paths to use the helper, and adds unit tests verifying invocation and port coercion.

Changes

Dashboard Forward Stop Consolidation

Layer / File(s) Summary
Helper definition and types
src/lib/onboard/forward-cleanup.ts
Adds ForwardStopRunner type and bestEffortForwardStop(runOpenshell, port) which calls the runner with ["forward","stop", "<port>"] and forces { ignoreError: true, suppressOutput: true }.
Helper adoption across onboarding flows
src/lib/onboard.ts, src/lib/actions/sandbox/process-recovery.ts
Replaces direct openshell forward stop invocations with bestEffortForwardStop(runOpenshell, port) in recorded sandbox repair, legacy gateway retirement, multiple preflight cleanup branches, stopAllDashboardForwards(), ensureDashboardForward() preferred/stale-forward handling (including background retry release), main onboarding gateway reuse validation branches, and sanitizes sandbox forward-stop stdio during sandbox port-forward recovery.
Unit tests validating invocation & coercion
test/onboard-forward-stop-quiet.test.ts
Adds Vitest tests that require the built dist/lib/onboard/forward-cleanup module, stub a runner to capture calls, assert a single ["forward","stop","<port>"] invocation with ignoreError and suppressOutput true, and verify numeric and string port inputs produce string argv elements.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • NVIDIA/NemoClaw#3313: Overlaps changes to src/lib/onboard.ts's dashboard-forward lifecycle and forward-start rollback behaviour.
  • NVIDIA/NemoClaw#3622: Also modifies ensureDashboardForward port-conflict/rollback handling in the same onboarding codepaths.

Suggested labels

NemoClaw CLI, fix, Sandbox

Suggested reviewers

  • cv
  • ericksoa
  • jyaunches

Poem

🐰 I tiptoe in code, so quiet and neat,
I hush the loud forwards with one gentle beat.
Ports now sleep softly, no warnings to crop,
The dashboard can bloom — shh, don't wake the swap! 🎀

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 30.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
Title check ✅ Passed The title accurately and concisely describes the main change: suppressing the 'No active forward found' warning from best-effort forward stop operations during onboarding.
Linked Issues check ✅ Passed The PR addresses issue #3971 by adding bestEffortForwardStop helper with suppressed output and applying it across ~12 cleanup call sites, preventing the spurious 'No active forward found' warning while preserving port-forward functionality.
Out of Scope Changes check ✅ Passed All changes are directly related to fixing issue #3971: the new forward-cleanup module, its integration into onboard.ts, sandbox recovery, and regression tests are all scoped to suppressing noisy forward-stop warnings.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ 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/onboard-noisy-forward-stop-3971

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

@laitingsheng laitingsheng added the enhancement: ui Use this label to identify requests to improve NemoClaw web interface. label May 21, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 21, 2026

E2E Advisor Recommendation

Required E2E: double-onboard-e2e, sandbox-operations-e2e, onboard-repair-e2e
Optional E2E: onboard-resume-e2e, sandbox-survival-e2e, tunnel-lifecycle-e2e

Dispatch hint: double-onboard-e2e,sandbox-operations-e2e,onboard-repair-e2e

Auto-dispatched E2E: double-onboard-e2e, sandbox-operations-e2e, onboard-repair-e2e via nightly-e2e.yaml at 624f236ca9c2cc2719b487b32d996845cbb4d6c2nightly run

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • double-onboard-e2e (high): Directly exercises repeated onboarding, healthy gateway reuse, dashboard port conflict avoidance, multi-sandbox dashboard port allocation, stopping a dashboard forward, and probe-only connect recovery of the recorded forward. This is the closest existing E2E for the changed ensureDashboardForward and best-effort forward-stop paths.
  • sandbox-operations-e2e (high): Covers sandbox status/connect/logs plus process recovery after killing the in-sandbox OpenClaw gateway and gateway auto-recovery. This validates the changed process-recovery.ts forward re-establishment path in a real sandbox.
  • onboard-repair-e2e (medium): Exercises resume repair and missing recorded sandbox recreation, which uses the changed repairRecordedSandbox cleanup path now routed through bestEffortForwardStop.

Optional E2E

  • onboard-resume-e2e (medium): Useful adjacent coverage for interrupted onboard and resume output/flow, but the direct repair cleanup path is better covered by onboard-repair-e2e.
  • sandbox-survival-e2e (medium): Validates sandbox survival across gateway restart and post-restart status/connect/inference. It is adjacent to the process-recovery change, but sandbox-operations-e2e provides more targeted process/forward recovery coverage.
  • tunnel-lifecycle-e2e (medium): Checks local dashboard readiness before tunneling and can catch dashboard forward regressions, but it does not specifically exercise the changed quiet cleanup/recovery paths.

New E2E recommendations

  • quiet dashboard forward cleanup (medium): Existing E2E tests validate forward recovery and re-onboard behavior, but none appears to assert that benign openshell forward stop misses such as No active forward found stay out of user-visible onboard/connect output.
    • Suggested test: Add an E2E assertion to an existing dashboard-forward lifecycle flow that forces a missing/stale forward before onboard or connect recovery and fails if the user-visible log contains benign forward-stop warnings.

Dispatch hint

  • Workflow: nightly-e2e.yaml
  • jobs input: double-onboard-e2e,sandbox-operations-e2e,onboard-repair-e2e

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 21, 2026

PR Review Advisor

Recommendation: blocked
Confidence: high
Analyzed HEAD: 624f236ca9c2cc2719b487b32d996845cbb4d6c2
Findings: 2 blocker(s), 3 warning(s), 0 suggestion(s)

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

Limitations: This advisory review used the provided deterministic context and diff; it did not execute tests, package-manager commands, PR scripts, or E2E workflows.; The E2E pass evidence in issue comments targets 30ae093, not the requested head SHA 624f236.; Several CI contexts were still IN_PROGRESS/QUEUED/PENDING in the trusted status rollup for the current head SHA.; Issue #3971 has no comments; acceptance mapping is based on the issue body only.; PR-provided title/body/checklist claims were treated as untrusted evidence only.

Workflow run

Full advisor summary

PR Review Advisor

Base: origin/main
Head: HEAD
Analyzed SHA: 624f236ca9c2cc2719b487b32d996845cbb4d6c2
Recommendation: blocked
Confidence: high

The helper extraction is small and aligned with #3971, but merge is blocked by pending CI/blocked merge state and required E2E evidence is not available for the current head SHA.

Gate status

  • CI: pending — Current GraphQL statusCheckRollup for head 624f236 shows multiple IN_PROGRESS/QUEUED/PENDING contexts including cli-parity, E2E recommendation, wsl-e2e, macos-e2e, CodeQL, checks, unit-vitest-linux, build-sandbox-images, build-sandbox-images-arm64, ShellCheck SARIF, PR review advisor, and CodeRabbit.
  • Mergeability: fail — mergeStateStatus=BLOCKED for PR fix(onboard): suppress 'No active forward found' from best-effort forward stop #3997 at headRefOid 624f236; reviewDecision=REVIEW_REQUIRED.
  • Review threads: pass — GraphQL reports 1 review thread and it is resolved; CodeRabbit comment says the prior onboard-entrypoint-budget issue was addressed in commit 624f236.
  • Risky code tested: warning — Risky area detected: onboarding/host glue. A focused unit test was added for the new forward-stop helper, but runtime/sandbox lifecycle paths require E2E confirmation for the current head SHA.

🔴 Blockers

  • Current head SHA still has pending CI and blocked merge state: The PR cannot be considered ready while required status contexts are still running/queued/pending and GitHub reports the merge state as blocked for the requested head SHA.
    • Recommendation: Wait for all required CI contexts to complete successfully for 624f236 and resolve the blocked merge state before merge consideration.
    • Evidence: GraphQL statusCheckRollup includes many non-completed contexts for headRefOid 624f236; mergeStateStatus=BLOCKED.
  • Required E2E jobs passed only for an older SHA, not the current head (src/lib/onboard.ts:550): The change touches onboarding/host glue and OpenShell forward cleanup. The E2E Advisor requires onboard-repair-e2e and double-onboard-e2e, but the provided selective E2E pass report targets 30ae093, while this review is for 624f236.
    • Recommendation: Confirm the E2E Advisor-required jobs pass for the current head SHA 624f236.
    • Evidence: E2E Advisor required onboard-repair-e2e and double-onboard-e2e. Selective E2E Results show target ref 30ae093, not 624f236; current statusCheckRollup shows E2E recommendation, wsl-e2e, and macos-e2e IN_PROGRESS.

🟡 Warnings

🔵 Suggestions

  • None.

Acceptance coverage

  • partial — During nemoclaw onboard on WSL2, after the sandbox container is created and the dashboard is confirmed live, the onboard output prints a warning: ! No active forward found for port 18789.: Diff routes many best-effort forward-stop calls through bestEffortForwardStop with suppressOutput:true, and the test asserts the helper sets suppressOutput. No current-head WSL2 onboard output is complete.
  • partial — Onboarding completes successfully despite the warning, but the port forward state is unclear and may affect external dashboard access.: The helper suppresses noisy cleanup output without changing forward start logic. E2E required jobs passed only for older SHA 30ae093, so current-head dashboard access remains unproven.
  • unknown — Device: Windows PC (x86_64) + WSL2 Ubuntu 24.04.4 LTS: No trusted completed WSL2 Ubuntu 24.04.4 run is available for head SHA 624f236.
  • unknown — OS: Ubuntu 24.04.4 LTS (Noble Numbat), WSL2: Current statusCheckRollup shows wsl-e2e IN_PROGRESS; no completed result for this SHA is provided.
  • unknown — Architecture: x86_64: The unit test is architecture-agnostic and no trusted x86_64 WSL2 runtime result is complete for this SHA.
  • unknown — Node.js: v22.22.2: PR body claims verification are untrusted; current unit-vitest-linux is IN_PROGRESS in trusted status data.
  • unknown — npm: 10.9.7: No completed trusted npm/test result for the current head SHA is provided.
  • unknown — Docker: Docker version 29.4.3, build 055a478 (docker-ce): No Docker-backed onboard run result is complete for the current head SHA.
  • partial — OpenShell CLI: openshell 0.0.39: The helper contract matches an OpenShell forward stop call, but tests stub the runner and do not execute openshell 0.0.39.
  • unknown — NemoClaw: v0.0.47: The PR changes source/tests on HEAD; no trusted reproduction against released v0.0.47 is included.
  • unknown — OpenClaw: 2026.4.24: No OpenClaw runtime execution is shown for current head SHA.
  • unknown — 1. Install NemoClaw v0.0.47 on WSL2 Ubuntu 24.04:: No trusted install-on-WSL2 run is complete for the current head SHA.
  • unknown — 2. Run onboard:: The new test calls bestEffortForwardStop directly with a stub runner; it does not run nemoclaw onboard --no-gpu.
  • unknown — 3. Complete all 8 onboard steps (inference, messaging, sandbox build, policy).: No current-head end-to-end onboarding run has completed in the provided trusted status.
  • partial — 4. Observe terminal output after sandbox creation in step [6/8].: The helper-level regression verifies suppressOutput option use, but does not observe real step [6/8] terminal output.
  • partial — No port forward warnings printed during onboard.: The helper sets suppressOutput:true and migrated call sites use it, but no full onboard log assertion exists for the current head.
  • unknown — Dashboard port 18789 is accessible after onboarding completes.: No current-head E2E/dashboard accessibility evidence is complete.
  • partial — ✓ Dashboard is live
    ! No active forward found for port 18789
    ✓ Sandbox 'my-assistant' created: The code suppresses output on best-effort forward-stop calls likely responsible for this line, but the surrounding real onboard sequence is not reproduced by the unit test.
  • unknown — Not captured.: Issue [WSL2][Onboard] nemoclaw onboard prints "No active forward found for port 18789" after sandbox creation #3971 has no comments and no additional logs were provided.

Security review

  • pass — 1. Secrets and Credentials: No hardcoded secrets, API keys, passwords, tokens, PEM files, credential JSON, or .env files are introduced. The change only adjusts OpenShell forward-stop invocation and adds a unit test stub.
  • pass — 2. Input Validation and Data Sanitization: The helper converts the port to String and passes it as an argv element, not through shell-string execution. No new URL/header/file/deserialization handling is introduced.
  • pass — 3. Authentication and Authorization: No endpoints, auth checks, token validation, scopes, authorization decisions, or dashboard credential handling are modified.
  • pass — 4. Dependencies and Third-Party Libraries: No new dependencies are added. The test uses existing Vitest and Node built-ins.
  • warning — 5. Error Handling and Logging: The change intentionally suppresses all output from best-effort openshell forward stop calls. This removes expected benign noise but may hide unexpected stop diagnostics in cleanup paths that already ignore errors; later forward-start failures should still surface, but current-head E2E is needed.
  • pass — 6. Cryptography and Data Protection: Not applicable — no cryptographic operations, hashing, key handling, encryption, or data-protection logic is changed.
  • pass — 7. Configuration and Security Headers: No Dockerfile, workflow, HTTP header, CSP/CORS, port exposure, container privilege, or security configuration change is introduced.
  • warning — 8. Security Testing: A focused unit test covers the helper contract, but no current-head runtime/security E2E evidence is complete for onboarding/host glue and sandbox lifecycle behavior.
  • warning — 9. Holistic Security Posture: No direct sandbox escape, SSRF bypass, credential leakage, blueprint tampering, installer trust, or workflow trusted-code-boundary issue is evident. However, the diff touches sandbox/onboarding lifecycle cleanup in a highly active monolith and current-head CI/E2E gates are incomplete.

Test / E2E status

  • Test depth: e2e_required — Runtime/sandbox/infrastructure paths are affected: src/lib/actions/sandbox/process-recovery.ts changes forward-stop output handling, and src/lib/onboard.ts routes multiple onboarding cleanup paths through a new helper. The unit test is useful but cannot prove WSL/OpenShell/dashboard lifecycle behavior.
  • E2E Advisor: missing
  • Required E2E jobs: onboard-repair-e2e, double-onboard-e2e
  • Missing for analyzed SHA: onboard-repair-e2e, double-onboard-e2e

✅ What looks good

  • The patch reduces onboard.ts growth by extracting the helper to src/lib/onboard/forward-cleanup.ts, satisfying the entrypoint budget according to the current completed onboard-entrypoint-budget SUCCESS context.
  • The helper uses argv-based command invocation rather than shell-string execution.
  • The new unit test directly verifies ignoreError:true, suppressOutput:true, and port stringification for the helper.
  • No secrets, dependency additions, Dockerfile changes, workflow changes, or credential-handling changes are present in the diff.
  • The previous CodeRabbit review thread is resolved and marked addressed in commit 624f236.

Review completeness

  • This advisory review used the provided deterministic context and diff; it did not execute tests, package-manager commands, PR scripts, or E2E workflows.
  • The E2E pass evidence in issue comments targets 30ae093, not the requested head SHA 624f236.
  • Several CI contexts were still IN_PROGRESS/QUEUED/PENDING in the trusted status rollup for the current head SHA.
  • Issue [WSL2][Onboard] nemoclaw onboard prints "No active forward found for port 18789" after sandbox creation #3971 has no comments; acceptance mapping is based on the issue body only.
  • PR-provided title/body/checklist claims were treated as untrusted evidence only.
  • Human maintainer review required: yes

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.

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/lib/onboard.ts (1)

8561-8566: Run the onboarding E2E matrix for this core-flow change.

Since this touches core onboarding cleanup behavior, I recommend running the listed onboarding-focused nightly jobs (at least cloud-e2e, sandbox-operations-e2e, rebuild-openclaw-e2e, and channels-stop-start-e2e) before merge.

As per coding guidelines, "src/lib/onboard.ts: This file contains core onboarding logic. Changes here affect the full sandbox creation and configuration flow." and the provided E2E test recommendation list.

Also applies to: 8571-8573

🤖 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 `@src/lib/onboard.ts` around lines 8561 - 8566, This change modifies core
onboarding cleanup behavior in src/lib/onboard.ts (notably the
bestEffortForwardStop function and the nearby cleanup calls around lines
~8571-8573), so before merging run the onboarding-focused E2E matrix: at minimum
execute cloud-e2e, sandbox-operations-e2e, rebuild-openclaw-e2e, and
channels-stop-start-e2e to validate sandbox creation/cleanup and port-forward
teardown; if any failures occur, capture logs from
bestEffortForwardStop/runOpenshell invocations and iterate until the cleanup
flow is stable across these jobs.
🤖 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 `@src/lib/onboard.ts`:
- Around line 8561-8566: The new helper function bestEffortForwardStop increases
onboard.ts size and breaks the file-size budget; either remove or compress this
change or update the budget policy in the same PR: either delete or inline the
logic where bestEffortForwardStop is used (replace calls with
runOpenshell([...], {ignoreError:true, suppressOutput:true} ) to avoid adding
lines) or add a corresponding adjustment to the size/budget policy configuration
in this PR so CI accepts the net growth.

---

Nitpick comments:
In `@src/lib/onboard.ts`:
- Around line 8561-8566: This change modifies core onboarding cleanup behavior
in src/lib/onboard.ts (notably the bestEffortForwardStop function and the nearby
cleanup calls around lines ~8571-8573), so before merging run the
onboarding-focused E2E matrix: at minimum execute cloud-e2e,
sandbox-operations-e2e, rebuild-openclaw-e2e, and channels-stop-start-e2e to
validate sandbox creation/cleanup and port-forward teardown; if any failures
occur, capture logs from bestEffortForwardStop/runOpenshell invocations and
iterate until the cleanup flow is stable across these jobs.
🪄 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: CHILL

Plan: Enterprise

Run ID: 1d9e9662-d9e2-45a6-8e9e-69cb0da35de8

📥 Commits

Reviewing files that changed from the base of the PR and between 18c7265 and 30ae093.

📒 Files selected for processing (2)
  • src/lib/onboard.ts
  • test/onboard-forward-stop-quiet.test.ts

Comment thread src/lib/onboard.ts Outdated
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26220671624
Target ref: 30ae09329011bf3444f533b612fe7a76f31d6681
Workflow ref: main
Requested jobs: onboard-repair-e2e,double-onboard-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
double-onboard-e2e ✅ success
onboard-repair-e2e ✅ success

…ypoint budget

Move bestEffortForwardStop into src/lib/onboard/forward-cleanup.ts with
runOpenshell injected as a parameter so the helper has no implicit
dependency on the onboard.ts entry point. Keeps onboard.ts net-neutral
under the entrypoint budget while preserving the single quiet-stop call
path across all 12 best-effort cleanup sites.

Also suppress the same noisy 'No active forward found' warning on the
sandbox recovery code path (forward stop before re-establish) by
forwarding stdio=ignore through adapters/openshell runOpenshell.

Rewrite the regression test to import the helper directly from the
sub-module with a callback runner stub, dropping the spawnSync
subprocess pattern (which depended on a real openshell binary being on
PATH and failed in unit-vitest-linux CI).

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
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.

🧹 Nitpick comments (1)
src/lib/onboard.ts (1)

3559-3622: Run the onboarding forward-lifecycle E2Es on this helper fan-out.

These replacements now sit on reuse, rollback, and retry cleanup paths inside core onboarding, so I'd validate at least cloud-e2e, sandbox-operations-e2e, and channels-stop-start-e2e before merging.

As per coding guidelines, src/lib/onboard.ts: This file contains core onboarding logic. Changes here affect the full sandbox creation and configuration flow.

Also applies to: 8562-8690, 9441-9480

🤖 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 `@src/lib/onboard.ts` around lines 3559 - 3622, Run the onboarding
forward-lifecycle E2E suites against the helper fan-out that touches
src/lib/onboard.ts; specifically exercise the reuse/rollback/retry cleanup paths
that call waitForGatewayHttpReady, bestEffortForwardStop,
destroyGatewayForReuse, getGatewayLocalEndpoint, getGatewayClusterImageDrift and
retireLegacyGatewayForDockerDriverUpgrade. Validate at minimum cloud-e2e,
sandbox-operations-e2e, and channels-stop-start-e2e (and the regions covering
the other affected ranges noted: 8562-8690 and 9441-9480) to ensure the
replacements behave correctly during reuse, abort, recreate, and cleanup flows
before merging.
🤖 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.

Nitpick comments:
In `@src/lib/onboard.ts`:
- Around line 3559-3622: Run the onboarding forward-lifecycle E2E suites against
the helper fan-out that touches src/lib/onboard.ts; specifically exercise the
reuse/rollback/retry cleanup paths that call waitForGatewayHttpReady,
bestEffortForwardStop, destroyGatewayForReuse, getGatewayLocalEndpoint,
getGatewayClusterImageDrift and retireLegacyGatewayForDockerDriverUpgrade.
Validate at minimum cloud-e2e, sandbox-operations-e2e, and
channels-stop-start-e2e (and the regions covering the other affected ranges
noted: 8562-8690 and 9441-9480) to ensure the replacements behave correctly
during reuse, abort, recreate, and cleanup flows before merging.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 8344a758-8a5d-4c50-aed0-2327a4c6349a

📥 Commits

Reviewing files that changed from the base of the PR and between 30ae093 and 624f236.

📒 Files selected for processing (4)
  • src/lib/actions/sandbox/process-recovery.ts
  • src/lib/onboard.ts
  • src/lib/onboard/forward-cleanup.ts
  • test/onboard-forward-stop-quiet.test.ts
✅ Files skipped from review due to trivial changes (1)
  • src/lib/actions/sandbox/process-recovery.ts

@laitingsheng laitingsheng added the v0.0.49 Release target label May 21, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26224683198
Target ref: 624f236ca9c2cc2719b487b32d996845cbb4d6c2
Workflow ref: main
Requested jobs: double-onboard-e2e,sandbox-operations-e2e,onboard-repair-e2e
Summary: 3 passed, 0 failed, 0 skipped

Job Result
double-onboard-e2e ✅ success
onboard-repair-e2e ✅ success
sandbox-operations-e2e ✅ success

@ericksoa ericksoa added bug Something isn't working fix NemoClaw CLI Use this label to identify issues with the NemoClaw command-line interface (CLI). Platform: Windows/WSL Support for Windows Subsystem for Linux Networking and removed enhancement: ui Use this label to identify requests to improve NemoClaw web interface. labels May 21, 2026
Copy link
Copy Markdown
Contributor

@ericksoa ericksoa left a comment

Choose a reason for hiding this comment

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

Reviewed for v0.0.49 feature freeze: scoped WSL/onboard forward cleanup bugfix, CodeRabbit finding addressed, checks and selective E2E green.

@ericksoa ericksoa merged commit d9d4510 into main May 21, 2026
35 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working fix NemoClaw CLI Use this label to identify issues with the NemoClaw command-line interface (CLI). Networking Platform: Windows/WSL Support for Windows Subsystem for Linux v0.0.49 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[WSL2][Onboard] nemoclaw onboard prints "No active forward found for port 18789" after sandbox creation

2 participants