Skip to content

test: prove OpenClaw 2026.5.27 resolves #4434 unreachable inference TUI error#4437

Merged
cv merged 10 commits into
mainfrom
issue-4434-openclaw-2026-5-27-proof
Jun 4, 2026
Merged

test: prove OpenClaw 2026.5.27 resolves #4434 unreachable inference TUI error#4437
cv merged 10 commits into
mainfrom
issue-4434-openclaw-2026-5-27-proof

Conversation

@ericksoa
Copy link
Copy Markdown
Contributor

@ericksoa ericksoa commented May 28, 2026

Release target

Refs #4434. This PR targets v0.0.55; #4434 should remain open until this OpenClaw upgrade is merged, tagged, and verified in the shipped .55 release.

Why this resolves #4434

NemoClaw #4434 reports that openclaw tui keeps an active spinner and connected status with no visible terminal error when the NVIDIA inference endpoint is unreachable. This branch moves the sandbox OpenClaw pin from 2026.5.22 to 2026.5.27 with npm integrity:

sha512-2N93zhdAo88KAbHt6T7KvYXf4s7XIkYXBgv1npYpn7e1Y9FvrtgtpsA38my9rtFW+70uXEojRPX5/OqnuDqJPw==

Upstream proof:

Changes

  • Bumps Dockerfile, Dockerfile.base, agents/openclaw/manifest.yaml, and package metadata to OpenClaw 2026.5.27.
  • Updates OpenClaw pin/integrity tests, deployment/version tests, and the existing TUI chat-correlation E2E assertion.
  • Updates scripts/patch-openclaw-chat-send.js so NemoClaw's chat-send run-id preservation shim still recognizes the compiled OpenClaw 2026.5.27 followup-runner admission shape.
  • Adds a CI-safe Vitest contract harness for the [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 TUI failure signature and expected visible-error behavior.
  • Adds the privileged live repro: test/e2e/test-issue-4434-tui-unreachable-inference.sh.
  • Wires that live repro into nightly-e2e.yaml as issue-4434-tui-unreachable-inference-e2e, including selective dispatch, public-install target-ref handling, failure artifacts, aggregate reporting coverage, and trusted workflow-script checkout for the secret/sudo firewall job.

Local validation

  • npm ci
  • npm ci --include=dev
  • npm run build:cli
  • npm run typecheck:cli
  • npm test -- test/fetch-guard-patch-regression.test.ts test/openclaw-chat-send-patch.test.ts test/openclaw-tui-chat-correlation.test.ts test/issue-4434-tui-unreachable-inference.test.ts
  • npm test -- src/lib/sandbox/version.test.ts src/lib/verify-deployment.test.ts
  • npm test -- test/validate-e2e-coverage.test.ts test/e2e-advisor-dispatch.test.ts test/e2e-script-workflow.test.ts test/issue-4434-tui-unreachable-inference.test.ts nemoclaw/src/package-metadata.test.ts
  • shellcheck test/e2e/test-issue-4434-tui-unreachable-inference.sh
  • bash -n test/e2e/test-issue-4434-tui-unreachable-inference.sh
  • bash -n test/e2e/test-openclaw-tui-chat-correlation.sh
  • NEMOCLAW_ISSUE_4434_LIVE=0 bash test/e2e/test-issue-4434-tui-unreachable-inference.sh
  • git diff --check
  • Fresh npm pack openclaw@2026.5.27 dist smoke with node scripts/patch-openclaw-chat-send.js "$tmp/package/dist"
  • Runtime Docker smoke: docker build -f Dockerfile --build-arg BASE_IMAGE=ghcr.io/nvidia/nemoclaw/sandbox-base:latest -t nemoclaw-issue4434-openclaw-runtime-smoke:2026-5-27 .
  • Runtime image version smoke: docker run --rm --entrypoint openclaw nemoclaw-issue4434-openclaw-runtime-smoke:2026-5-27 --version -> OpenClaw 2026.5.27 (27ae826)
  • Base-style OpenClaw install smoke in Docker for the 2026.5.27 npm integrity and install path.
  • Pre-commit suite on 98e0a763efe0925f26cf89129cd4ab63cb0b05f3: passed, including CLI/plugin coverage hooks.
  • Pre-push suite reran CLI/plugin coverage; one unrelated test/nemoclaw-start.test.ts case timed out during the full concurrent run, then passed directly with npx vitest run --project cli test/nemoclaw-start.test.ts -t "captures baseline snapshot when openclaw.json is valid and no baseline exists".

Nightly proof

Targeted nightly E2E passed on the final PR head:

The live job runs the requested end-to-end flow on Linux with the repository NVIDIA_API_KEY secret: public install from this PR ref, cloud onboard with NVIDIA Endpoints and nvidia/nemotron-3-super-120b-a12b, pre-block nemoclaw <sandbox> status, pre-block nemoclaw <sandbox> connect --probe-only, exact DOCKER-USER DROP rules for 75.2.113.119 and 99.83.136.103, in-sandbox endpoint-block verification, openclaw tui, hello, and final TUI assertion.

The passing assertion was:

PASS: openclaw tui surfaced a visible unreachable-inference error and stopped the spinner

The dispatch command for reruns while this job only exists on the PR branch is:

gh workflow run nightly-e2e.yaml --repo NVIDIA/NemoClaw \
  --ref issue-4434-openclaw-2026-5-27-proof \
  -f target_ref=5f549f661fe81b485f75903146512af4225d4698 \
  -f pr_number=4437 \
  -f jobs=issue-4434-tui-unreachable-inference-e2e

Remaining release note

Summary by CodeRabbit

  • Tests

    • Added an opt-in live E2E repro and new unit/integration tests for TUI behavior when inference endpoints are unreachable, validating visible error reporting, spinner shutdown, and compatibility with updated runtime/followup-runner shapes.
  • Chores

    • Bumped OpenClaw/runtime to 2026.5.27 across builds, manifests, docs, and test expectations.
  • Chores / CI

    • Added a selective/nightly E2E job to run the repro, include its results in aggregated reports, and upload sanitized logs with sensitive tokens redacted.

@copy-pr-bot
Copy link
Copy Markdown

copy-pr-bot Bot commented May 28, 2026

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 28, 2026

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 40bd164a-2b2e-4940-b1af-989155f9bc34

📥 Commits

Reviewing files that changed from the base of the PR and between 5f549f6 and bbd1a97.

📒 Files selected for processing (5)
  • .coderabbit.yaml
  • .github/workflows/nightly-e2e.yaml
  • Dockerfile
  • Dockerfile.base
  • docs/reference/commands.mdx
💤 Files with no reviewable changes (1)
  • docs/reference/commands.mdx
🚧 Files skipped from review as they are similar to previous changes (3)
  • .coderabbit.yaml
  • Dockerfile.base
  • .github/workflows/nightly-e2e.yaml

📝 Walkthrough

Walkthrough

Bumps OpenClaw to 2026.5.27 across builds, manifests, package metadata, tests and docs; widens followup-runner patching and fixtures for admission-shaped runners; adds Vitest and opt-in E2E tests reproducing TUI unreachable-inference behavior; and adds a selective nightly E2E job with CI wiring.

Changes

OpenClaw 2026.5.27 upgrade with issue #4434 TUI error handling

Layer / File(s) Summary
OpenClaw version pin upgrade to 2026.5.27
Dockerfile, Dockerfile.base, agents/openclaw/manifest.yaml, nemoclaw/package.json, nemoclaw/src/package-metadata.test.ts, docs/reference/commands.mdx
Build ARG defaults, integrity args, agent manifest expected_version, package metadata, and example docs updated to 2026.5.27 and corresponding in-file review markers adjusted.
Chat-send patch script updates for 2026.5.27 admission flow
scripts/patch-openclaw-chat-send.js
Widen followup-runner detection and apply a two-stage runId-preservation patch to match createReplyOperation and admission-shaped replyOperation patterns.
Followup-runner fixture & tests
test/openclaw-chat-send-patch.test.ts
Add fixture writer and VM context stubs for the 2026.5.27 admission-shaped followup runner and tests verifying runId preservation across admitted/queued/fallback flows.
Sandbox/version and deployment verification tests
src/lib/sandbox/version.test.ts, src/lib/verify-deployment.test.ts
Mocked outputs and assertions updated to expect OpenClaw 2026.5.27 across version-detection and verification tests.
Fetch-guard patch regression tests for 2026.5.27
test/fetch-guard-patch-regression.test.ts
Reviewed patch-classifier versions, SSRF policy shape, integrity constants, loaders, and Dockerfile parsing updated to 2026.5.27 shapes and hashes.
E2E bash test for TUI firewall block scenario
test/e2e/test-issue-4434-tui-unreachable-inference.sh
New opt-in E2E script provisions or reuses a sandbox, adds iptables DOCKER-USER drops for NVIDIA IPs, runs openclaw tui under expect, normalizes capture, and asserts visible error and spinner-stop behavior.
Unit tests for TUI error visibility on unreachable inference
test/issue-4434-tui-unreachable-inference.test.ts
Vitest suite adding ANSI-stripping, capture classification, TUI rendering, event simulation, and three cases validating error visibility and spinner state under unreachable endpoint scenarios.
Nightly/selective E2E job and CI wiring
.github/workflows/nightly-e2e.yaml, .coderabbit.yaml, test/validate-e2e-coverage.test.ts
New issue-4434-tui-unreachable-inference-e2e job added and allowlisted for selective/manual dispatch; job installs expect/iptables, validates trusted checkout/ref reachability, runs the new E2E script with artifact redaction on failure, is aggregated into notify-on-failure, report-to-pr, and scorecard, and coverage validation updated to support privileged trusted-script jobs.

Sequence Diagram(s)

(The changes do not introduce a new multi-component runtime flow beyond tests and CI wiring that would benefit from a sequence diagram, so no diagrams are included here.)

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • NVIDIA/NemoClaw#4119: touches the same scripts/patch-openclaw-chat-send.js path and is related to followup-runner patching and wiring.

Suggested labels

E2E, Docker

Suggested reviewers

  • cv
  • cjagwani

"I hopped where spinners used to spin,
I nudged the logs so truth gets in.
From 5.22 we leap to 5.27,
The TUI now will shout—be driven!
Logs redacted, tests pass—hip, hop, hooray!"

🚥 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 PR title accurately summarizes the main change: upgrading OpenClaw to 2026.5.27 to resolve the #4434 TUI error issue, which is the primary objective across all file modifications.
Linked Issues check ✅ Passed The PR comprehensively addresses #4434 requirements: includes E2E proof that OpenClaw 2026.5.27 resolves the unreachable inference TUI error with visible error surfacing and spinner-stopping behavior via live repro testing.
Out of Scope Changes check ✅ Passed All changes are directly scoped to issue #4434 resolution: OpenClaw version bumps (2026.5.22→2026.5.27), test updates for new version, E2E validation scripts, and CI/workflow wiring for the nightly repro job.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue-4434-openclaw-2026-5-27-proof

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 28, 2026

E2E Advisor Recommendation

Required E2E: cloud-onboard-e2e, cloud-inference-e2e, openclaw-tui-chat-correlation-e2e, issue-4434-tui-unreachable-inference-e2e, rebuild-openclaw-e2e, inference-routing-e2e, network-policy-e2e
Optional E2E: messaging-providers-e2e, docs-validation-e2e, upgrade-stale-sandbox-e2e, openclaw-onboard-security-posture-e2e

Dispatch hint: cloud-onboard-e2e,cloud-inference-e2e,openclaw-tui-chat-correlation-e2e,issue-4434-tui-unreachable-inference-e2e,rebuild-openclaw-e2e,inference-routing-e2e,network-policy-e2e

Auto-dispatched E2E: cloud-onboard-e2e, cloud-inference-e2e, openclaw-tui-chat-correlation-e2e, rebuild-openclaw-e2e, inference-routing-e2e, network-policy-e2e via nightly-e2e.yaml at bbd1a97c3c89dafe2a94c2f65d995259d88db49fnightly run

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • cloud-onboard-e2e (medium): Validates a fresh OpenClaw cloud onboarding path with the new pinned OpenClaw version and updated sandbox image metadata. This is the baseline deployment check for Dockerfile/Dockerfile.base/runtime-version changes.
  • cloud-inference-e2e (medium): The pinned OpenClaw runtime and TUI/inference-facing patch changes can affect real cloud inference. Run the live cloud inference lane to prove the upgraded sandbox can route requests successfully.
  • openclaw-tui-chat-correlation-e2e (high): Directly covers the changed scripts/patch-openclaw-chat-send.js behavior against a real sandbox and verifies correlated user/assistant turns with OpenClaw 2026.5.27.
  • issue-4434-tui-unreachable-inference-e2e (high): This PR adds the live privileged repro for unreachable NVIDIA inference. Run it to validate the new workflow job and prove the TUI surfaces a visible error and stops the spinner when the endpoint is firewalled.
  • rebuild-openclaw-e2e (high): The PR bumps the expected OpenClaw version in the image and manifest. This lane verifies stale OpenClaw sandboxes rebuild to the current pinned version while preserving state, credentials, policy presets, and gateway token behavior.
  • inference-routing-e2e (medium): OpenClaw runtime and deployment verification changes can affect inference route setup, credential isolation, and transport/credential error classification. This PR-safe lane covers those routing boundaries.
  • network-policy-e2e (medium): The OpenClaw version bump exercises updated upstream fetch-guard/runtime code that NemoClaw patches for proxy-only sandbox egress. Run the network policy lane to ensure deny-by-default, allowlist, hot-reload, and SSRF boundaries remain intact.

Optional E2E

  • messaging-providers-e2e (high): OpenClaw fetch/proxy behavior and the sandbox image upgrade can affect messaging media/provider placeholder paths. Useful adjacent confidence for Telegram/Discord/Slack credential rewrite and L7 proxy behavior, but not the primary changed user flow.
  • docs-validation-e2e (low): docs/reference/commands.mdx changed the documented OpenClaw version. Run if you want validation that command reference snippets and docs checks still pass.
  • upgrade-stale-sandbox-e2e (high): Adjacent confidence for stale-sandbox upgrade behavior after the OpenClaw pin bump. Rebuild-openclaw-e2e is the merge-blocking version-specific lane; this broader upgrade lane is useful but redundant for this PR.
  • openclaw-onboard-security-posture-e2e (high): Optional defense-in-depth for the rebuilt OpenClaw image under the non-root host security posture. The PR does not directly change posture scripts, but Dockerfile/base-image changes make this a useful extra check.

New E2E recommendations

  • None.

Dispatch hint

  • Workflow: nightly-e2e.yaml
  • jobs input: cloud-onboard-e2e,cloud-inference-e2e,openclaw-tui-chat-correlation-e2e,issue-4434-tui-unreachable-inference-e2e,rebuild-openclaw-e2e,inference-routing-e2e,network-policy-e2e

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 28, 2026

E2E Scenario Advisor Recommendation

Required scenario E2E: ubuntu-repo-cloud-openclaw
Optional scenario E2E: wsl-repo-cloud-openclaw, gpu-repo-local-ollama-openclaw, macos-repo-cloud-openclaw

Dispatch required scenario E2E:

  • gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw

Workflow run

Full scenario advisor summary

E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required scenario E2E

  • ubuntu-repo-cloud-openclaw: OpenClaw sandbox image/version metadata and the OpenClaw chat.send patch helper changed. The primary Ubuntu repo-current cloud OpenClaw scenario exercises Docker-based onboarding, gateway/sandbox smoke, cloud inference through inference.local, credentials, and baseline onboarding on the default runner.
    • Dispatch: gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=ubuntu-repo-cloud-openclaw

Optional scenario E2E

  • wsl-repo-cloud-openclaw: Optional adjacent platform coverage for the same repo-current cloud OpenClaw onboarding/build surface on WSL. Recommended only if the OpenClaw version bump or image changes are suspected to be platform-sensitive.
    • Dispatch: gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=wsl-repo-cloud-openclaw
  • gpu-repo-local-ollama-openclaw: Optional adjacent onboarding coverage for the same OpenClaw sandbox image on the local Ollama/GPU path. This uses a special GPU runner, so keep it optional unless local-provider or GPU-specific risk is a concern.
    • Dispatch: gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=gpu-repo-local-ollama-openclaw
  • macos-repo-cloud-openclaw: Optional adjacent platform smoke for repo-current cloud OpenClaw on macOS. GitHub-hosted macOS lacks Docker-dependent scenario coverage, so this is lower-value platform-only validation.
    • Dispatch: gh workflow run e2e-scenarios.yaml --ref <pr-head-ref> --field scenarios=macos-repo-cloud-openclaw

Relevant changed files

  • Dockerfile
  • Dockerfile.base
  • agents/openclaw/manifest.yaml
  • nemoclaw/package.json
  • scripts/patch-openclaw-chat-send.js

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 28, 2026

PR Review Advisor

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

Review findings

🛠️ Needs attention

  • Privileged [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 job lacks an explicit trusted workflow-ref gate (.github/workflows/nightly-e2e.yaml:412): The new [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 job receives NVIDIA_API_KEY and GITHUB_TOKEN, installs host packages, uses passwordless sudo, mutates DOCKER-USER iptables rules, and runs Docker/OpenShell flows, but it checks out and executes workflow code from `${{ github.ref }}` without first proving that the workflow ref is a trusted default/protected ref. The target_ref SHA and ancestry checks constrain the product-under-test commit; they do not prove that the workflow YAML and shell script receiving secrets and host privileges are trusted code.
    • Recommendation: Before any secrets, apt installs, Docker access, or sudo/iptables use, require the workflow ref to be a trusted ref such as `refs/heads/main`, or split the job so trusted main workflow code performs the privileged proof while any PR/product code runs without repository secrets and host privileges. Add a regression test in `test/validate-e2e-coverage.test.ts` that fails if this privileged job lacks the workflow-ref trust gate.
    • Evidence: The job checks out `ref: ${{ github.ref }}` and later runs `test/e2e/test-issue-4434-tui-unreachable-inference.sh` with `NVIDIA_API_KEY`, `GITHUB_TOKEN`, apt-installed tools, sudo firewall access, and Docker/OpenShell access. The resolver validates `inputs.target_ref` as a full SHA reachable from the checkout head, but no step rejects a non-main or otherwise untrusted workflow ref before privileged execution.
  • [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 live proof does not assert structured cause, reporting layer, or recovery hint (test/e2e/test-issue-4434-tui-unreachable-inference.sh:24): Issue [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 requires the TUI to surface a structured error within the gateway timeout that includes an HTTP status or concrete cause, the layer that reported it, and a one-line recovery hint. The live proof can pass on a generic error-looking token plus a final `| error` status, so it does not prove the user receives the required actionability.
    • Recommendation: Tighten the visible TUI capture assertions to require each literal issue clause independently: an HTTP status or concrete network cause such as `HTTP 503`, `ETIMEDOUT`, `connection refused`, or `fetch failed`; a gateway/proxy/upstream/API layer indicator; and a one-line recovery hint such as checking egress policy, checking the API key, retrying, or restoring endpoint access. Keep the final `| error` status assertion as a separate condition.
    • Evidence: `VISIBLE_ERROR_RE` is `error|failed|timeout|timed out|unavailable|fetch failed|ETIMEDOUT|ECONN|upstream`; the expect block uses the same broad alternatives; the final status assertion only requires `| error`. The unit mock contains a richer `upstream ... ETIMEDOUT ... Check network connectivity...` string, but the live script does not require that shape from the real TUI.

🔎 Worth checking

  • Source-of-truth review needed: test/e2e/test-issue-4434-tui-unreachable-inference.sh tolerant TUI capture parsing: 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: `VISIBLE_ERROR_RE` accepts broad tokens and the final assertion only requires `| error`; there is no source-boundary or removal-criteria comment near the parser.
  • Source-of-truth review needed: .github/workflows/nightly-e2e.yaml trusted workflow/product ref split: The advisor marked localized patch analysis as missing.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The resolver checks `git merge-base --is-ancestor` for `target_ref`, but no step rejects a non-main or unprotected workflow ref before installing packages and running the secret-bearing sudo/iptables script.
  • Source-of-truth review needed: .github/workflows/nightly-e2e.yaml [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 artifact redaction: 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 E2E creates `CAPTURE_DIR` with `mktemp -d`; the workflow redaction loop skips directories via `[ -f "$file" ] || continue` while upload includes `/tmp/nemoclaw-issue-4434.*`.
  • [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 failure artifact redaction skips nested capture files (.github/workflows/nightly-e2e.yaml:472): The sanitizer only redacts regular files directly matched by `/tmp/nemoclaw-issue-4434.*`, but the E2E creates that path as a directory and writes expect, status, blocked-probe, and TUI capture logs inside it. The upload step uses the same directory glob, so nested logs from a secret-bearing run can be uploaded without recursive redaction.
    • Recommendation: Redact recursively before upload, for example by finding all regular files under `/tmp/nemoclaw-issue-4434.*` directories and applying the same replacements, or copy only sanitized files into a separate artifact directory and upload that directory. Add a workflow/unit validation that models a nested capture file containing token-shaped data.
    • Evidence: `CAPTURE_DIR` is created with `mktemp -d .../nemoclaw-issue-4434.XXXXXX`; the workflow sanitizer runs `for file in /tmp/nemoclaw-e2e-issue-4434-install.log /tmp/nemoclaw-issue-4434.*; do [ -f "$file" ] || continue`; the artifact upload path includes `/tmp/nemoclaw-issue-4434.*`.
  • Record dependency-review evidence for the high-trust OpenClaw bump (Dockerfile:31): OpenClaw is a high-trust sandbox/gateway dependency involved in inference, chat handling, SSRF-sensitive fetch paths, network policy behavior, and runtime patching. The PR pins `openclaw@2026.5.27` and verifies npm integrity, which is good, but the changed files do not record OSV/GHSA/CVE or equivalent advisory-review evidence for the new version. Global npm installs also continue to allow lifecycle scripts, and the privileged [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 job installs floating host packages immediately before running with secrets and sudo.
    • Recommendation: Record the vulnerability/advisory review result for `openclaw@2026.5.27` in a release or dependency-review artifact, add an explicit lifecycle-script exception rationale or constraints where global installs require scripts, and either pin/constrain the [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 job's host packages or document why floating runner apt packages are acceptable for this secret-bearing proof.
    • Evidence: `Dockerfile` and `Dockerfile.base` set `OPENCLAW_VERSION=2026.5.27` with npm integrity `sha512-2N93...`; global installs use `npm install -g`; `.github/workflows/nightly-e2e.yaml` runs `sudo apt-get update` and `sudo apt-get install -y expect iptables` before passing `NVIDIA_API_KEY` and `GITHUB_TOKEN` to the live E2E script.
  • Generated assistant references still show the old OpenClaw version (docs/reference/commands.mdx:579): The public command reference was updated to show `OpenClaw v2026.5.27`, but generated assistant/user reference copies still show `OpenClaw v2026.5.22`. If those references are consumed by assistant or user-facing answers, they will drift from the runtime pin changed by this PR.
    • Recommendation: Refresh the generated/reference skill copies or document why they are intentionally not updated in this PR.
    • Evidence: `docs/reference/commands.mdx` now shows `Agent: OpenClaw v2026.5.27`, while `skills/nemoclaw-user-reference/references/commands.md` and `.agents/skills/nemoclaw-user-reference/references/commands.md` still contain `Agent: OpenClaw v2026.5.22`.

🌱 Nice ideas

  • None.
Since last review details

Current findings:

  • Source-of-truth review needed: test/e2e/test-issue-4434-tui-unreachable-inference.sh tolerant TUI capture parsing: 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: `VISIBLE_ERROR_RE` accepts broad tokens and the final assertion only requires `| error`; there is no source-boundary or removal-criteria comment near the parser.
  • Source-of-truth review needed: .github/workflows/nightly-e2e.yaml trusted workflow/product ref split: The advisor marked localized patch analysis as missing.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: The resolver checks `git merge-base --is-ancestor` for `target_ref`, but no step rejects a non-main or unprotected workflow ref before installing packages and running the secret-bearing sudo/iptables script.
  • Source-of-truth review needed: .github/workflows/nightly-e2e.yaml [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 artifact redaction: 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 E2E creates `CAPTURE_DIR` with `mktemp -d`; the workflow redaction loop skips directories via `[ -f "$file" ] || continue` while upload includes `/tmp/nemoclaw-issue-4434.*`.
  • Privileged [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 job lacks an explicit trusted workflow-ref gate (.github/workflows/nightly-e2e.yaml:412): The new [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 job receives NVIDIA_API_KEY and GITHUB_TOKEN, installs host packages, uses passwordless sudo, mutates DOCKER-USER iptables rules, and runs Docker/OpenShell flows, but it checks out and executes workflow code from `${{ github.ref }}` without first proving that the workflow ref is a trusted default/protected ref. The target_ref SHA and ancestry checks constrain the product-under-test commit; they do not prove that the workflow YAML and shell script receiving secrets and host privileges are trusted code.
    • Recommendation: Before any secrets, apt installs, Docker access, or sudo/iptables use, require the workflow ref to be a trusted ref such as `refs/heads/main`, or split the job so trusted main workflow code performs the privileged proof while any PR/product code runs without repository secrets and host privileges. Add a regression test in `test/validate-e2e-coverage.test.ts` that fails if this privileged job lacks the workflow-ref trust gate.
    • Evidence: The job checks out `ref: ${{ github.ref }}` and later runs `test/e2e/test-issue-4434-tui-unreachable-inference.sh` with `NVIDIA_API_KEY`, `GITHUB_TOKEN`, apt-installed tools, sudo firewall access, and Docker/OpenShell access. The resolver validates `inputs.target_ref` as a full SHA reachable from the checkout head, but no step rejects a non-main or otherwise untrusted workflow ref before privileged execution.
  • [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 live proof does not assert structured cause, reporting layer, or recovery hint (test/e2e/test-issue-4434-tui-unreachable-inference.sh:24): Issue [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 requires the TUI to surface a structured error within the gateway timeout that includes an HTTP status or concrete cause, the layer that reported it, and a one-line recovery hint. The live proof can pass on a generic error-looking token plus a final `| error` status, so it does not prove the user receives the required actionability.
    • Recommendation: Tighten the visible TUI capture assertions to require each literal issue clause independently: an HTTP status or concrete network cause such as `HTTP 503`, `ETIMEDOUT`, `connection refused`, or `fetch failed`; a gateway/proxy/upstream/API layer indicator; and a one-line recovery hint such as checking egress policy, checking the API key, retrying, or restoring endpoint access. Keep the final `| error` status assertion as a separate condition.
    • Evidence: `VISIBLE_ERROR_RE` is `error|failed|timeout|timed out|unavailable|fetch failed|ETIMEDOUT|ECONN|upstream`; the expect block uses the same broad alternatives; the final status assertion only requires `| error`. The unit mock contains a richer `upstream ... ETIMEDOUT ... Check network connectivity...` string, but the live script does not require that shape from the real TUI.
  • [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 failure artifact redaction skips nested capture files (.github/workflows/nightly-e2e.yaml:472): The sanitizer only redacts regular files directly matched by `/tmp/nemoclaw-issue-4434.*`, but the E2E creates that path as a directory and writes expect, status, blocked-probe, and TUI capture logs inside it. The upload step uses the same directory glob, so nested logs from a secret-bearing run can be uploaded without recursive redaction.
    • Recommendation: Redact recursively before upload, for example by finding all regular files under `/tmp/nemoclaw-issue-4434.*` directories and applying the same replacements, or copy only sanitized files into a separate artifact directory and upload that directory. Add a workflow/unit validation that models a nested capture file containing token-shaped data.
    • Evidence: `CAPTURE_DIR` is created with `mktemp -d .../nemoclaw-issue-4434.XXXXXX`; the workflow sanitizer runs `for file in /tmp/nemoclaw-e2e-issue-4434-install.log /tmp/nemoclaw-issue-4434.*; do [ -f "$file" ] || continue`; the artifact upload path includes `/tmp/nemoclaw-issue-4434.*`.
  • Record dependency-review evidence for the high-trust OpenClaw bump (Dockerfile:31): OpenClaw is a high-trust sandbox/gateway dependency involved in inference, chat handling, SSRF-sensitive fetch paths, network policy behavior, and runtime patching. The PR pins `openclaw@2026.5.27` and verifies npm integrity, which is good, but the changed files do not record OSV/GHSA/CVE or equivalent advisory-review evidence for the new version. Global npm installs also continue to allow lifecycle scripts, and the privileged [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 job installs floating host packages immediately before running with secrets and sudo.
    • Recommendation: Record the vulnerability/advisory review result for `openclaw@2026.5.27` in a release or dependency-review artifact, add an explicit lifecycle-script exception rationale or constraints where global installs require scripts, and either pin/constrain the [DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable #4434 job's host packages or document why floating runner apt packages are acceptable for this secret-bearing proof.
    • Evidence: `Dockerfile` and `Dockerfile.base` set `OPENCLAW_VERSION=2026.5.27` with npm integrity `sha512-2N93...`; global installs use `npm install -g`; `.github/workflows/nightly-e2e.yaml` runs `sudo apt-get update` and `sudo apt-get install -y expect iptables` before passing `NVIDIA_API_KEY` and `GITHUB_TOKEN` to the live E2E script.
  • Generated assistant references still show the old OpenClaw version (docs/reference/commands.mdx:579): The public command reference was updated to show `OpenClaw v2026.5.27`, but generated assistant/user reference copies still show `OpenClaw v2026.5.22`. If those references are consumed by assistant or user-facing answers, they will drift from the runtime pin changed by this PR.
    • Recommendation: Refresh the generated/reference skill copies or document why they are intentionally not updated in this PR.
    • Evidence: `docs/reference/commands.mdx` now shows `Agent: OpenClaw v2026.5.27`, while `skills/nemoclaw-user-reference/references/commands.md` and `.agents/skills/nemoclaw-user-reference/references/commands.md` still contain `Agent: OpenClaw v2026.5.22`.

Workflow run details

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

@copy-pr-bot
Copy link
Copy Markdown

copy-pr-bot Bot commented May 28, 2026

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26579419772
Target ref: 8b747f31a9a91527f2146dcce1d5346212105f1b
Workflow ref: issue-4434-openclaw-2026-5-27-proof
Requested jobs: issue-4434-tui-unreachable-inference-e2e
Summary: 0 passed, 1 failed, 0 skipped

Job Result
issue-4434-tui-unreachable-inference-e2e ❌ failure

Failed jobs: issue-4434-tui-unreachable-inference-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26580021337
Target ref: 00a9a185863a68fb81b96a9b8cb00ef32ca9e5b5
Workflow ref: issue-4434-openclaw-2026-5-27-proof
Requested jobs: issue-4434-tui-unreachable-inference-e2e
Summary: 0 passed, 1 failed, 0 skipped

Job Result
issue-4434-tui-unreachable-inference-e2e ❌ failure

Failed jobs: issue-4434-tui-unreachable-inference-e2e. Check run artifacts for logs.

@ericksoa ericksoa changed the title draft: prove OpenClaw 2026.5.27 resolves #4434 unreachable inference TUI error test: prove OpenClaw 2026.5.27 resolves #4434 unreachable inference TUI error May 28, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26580885137
Target ref: 6e94679363fb6f33c8f5a72a7a3126c379ade2f7
Workflow ref: issue-4434-openclaw-2026-5-27-proof
Requested jobs: issue-4434-tui-unreachable-inference-e2e
Summary: 0 passed, 1 failed, 0 skipped

Job Result
issue-4434-tui-unreachable-inference-e2e ❌ failure

Failed jobs: issue-4434-tui-unreachable-inference-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26581483934
Target ref: 84fcd3d3b355e68d31faa640dbedfd160ed6c2fe
Workflow ref: issue-4434-openclaw-2026-5-27-proof
Requested jobs: issue-4434-tui-unreachable-inference-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
issue-4434-tui-unreachable-inference-e2e ✅ success

@ericksoa ericksoa marked this pull request as ready for review May 28, 2026 15:23
@ericksoa
Copy link
Copy Markdown
Contributor Author

/nvskills-ci

@ericksoa
Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 28, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26584199493
Target ref: 98e0a763efe0925f26cf89129cd4ab63cb0b05f3
Workflow ref: issue-4434-openclaw-2026-5-27-proof
Requested jobs: issue-4434-tui-unreachable-inference-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
issue-4434-tui-unreachable-inference-e2e ✅ success

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: 3

🤖 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 @.github/workflows/nightly-e2e.yaml:
- Around line 354-362: The checkout step currently leaves default git
credentials in the workspace; update the Checkout action configuration (the step
named "Checkout" that uses
actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd) to disable persisted
credentials by adding persist-credentials: false under its with: block so the
privileged job does not retain Git credentials in the workspace.
- Around line 345-350: The .coderabbit.yaml is missing a path_instructions entry
for the workflow job issue-4434-tui-unreachable-inference-e2e; add a mapping
under path_instructions that references the workflow/job key
(issue-4434-tui-unreachable-inference-e2e) and points to the relevant test
script paths (e.g., test-issue-4434-tui-unreachable-inference or the actual e2e
test directory/files), ensuring the key matches the job name used in the
workflow and the path glob patterns match where the test scripts live so
coderabbit can trigger correct instructions for that job.

In `@test/e2e/test-openclaw-tui-chat-correlation.sh`:
- Line 49: The version check uses regex-style grep which treats "." as any char;
change the command used in the conditional that references openclaw_version to
use fixed-string matching (e.g., replace grep -q "2026.5.27" with grep -Fq
"2026.5.27") so the literal string "2026.5.27" is matched exactly (update the if
condition around the grep invocation).
🪄 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: a2107b9a-8f01-4ffa-bfe2-206858d44df8

📥 Commits

Reviewing files that changed from the base of the PR and between 0c108ae and 98e0a76.

📒 Files selected for processing (15)
  • .github/workflows/nightly-e2e.yaml
  • Dockerfile
  • Dockerfile.base
  • agents/openclaw/manifest.yaml
  • nemoclaw/package.json
  • nemoclaw/src/package-metadata.test.ts
  • scripts/patch-openclaw-chat-send.js
  • src/lib/sandbox/version.test.ts
  • src/lib/verify-deployment.test.ts
  • test/e2e/test-issue-4434-tui-unreachable-inference.sh
  • test/e2e/test-openclaw-tui-chat-correlation.sh
  • test/fetch-guard-patch-regression.test.ts
  • test/issue-4434-tui-unreachable-inference.test.ts
  • test/openclaw-chat-send-patch.test.ts
  • test/validate-e2e-coverage.test.ts

Comment thread .github/workflows/nightly-e2e.yaml
Comment thread .github/workflows/nightly-e2e.yaml
Comment thread test/e2e/test-openclaw-tui-chat-correlation.sh Outdated
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26584355281
Target ref: 98e0a763efe0925f26cf89129cd4ab63cb0b05f3
Workflow ref: main
Requested jobs: cloud-onboard-e2e,cloud-inference-e2e,inference-routing-e2e,network-policy-e2e,rebuild-openclaw-e2e,openclaw-tui-chat-correlation-e2e
Summary: 6 passed, 0 failed, 0 skipped

Job Result
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
inference-routing-e2e ✅ success
network-policy-e2e ✅ success
openclaw-tui-chat-correlation-e2e ✅ success
rebuild-openclaw-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26585206489
Target ref: 260a808ce0d4d05c5c51db8bb54854c4d63f474c
Workflow ref: issue-4434-openclaw-2026-5-27-proof
Requested jobs: issue-4434-tui-unreachable-inference-e2e
Summary: 0 passed, 1 failed, 0 skipped

Job Result
issue-4434-tui-unreachable-inference-e2e ❌ failure

Failed jobs: issue-4434-tui-unreachable-inference-e2e. Check run artifacts for logs.

@wscurran
Copy link
Copy Markdown
Contributor

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26652959641
Target ref: 5f549f661fe81b485f75903146512af4225d4698
Workflow ref: issue-4434-openclaw-2026-5-27-proof
Requested jobs: openclaw-inference-switch-e2e,inference-routing-e2e,hermes-e2e
Summary: 3 passed, 0 failed, 0 skipped

Job Result
hermes-e2e ✅ success
inference-routing-e2e ✅ success
openclaw-inference-switch-e2e ✅ success

Copy link
Copy Markdown
Contributor

@jyaunches jyaunches left a comment

Choose a reason for hiding this comment

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

Approving on regression-risk grounds.

Regression-risk review

Surface area is small: only one product-code change (scripts/patch-openclaw-chat-send.js, +16/−3) plus version/integrity bumps and test fixture alignment. The rest of the behavior change comes from upstream OpenClaw 2026.5.222026.5.27.

Past OpenClaw bumps have rolled back in production (e.g. #3820 reverted by #4051 in <5h), so I wanted breadth of E2E rather than just count of green checks before approving.

E2E coverage on head 5f549f66

All 5 advisor-required jobs green via auto-dispatch + the live privileged job:

  • cloud-e2e
  • openclaw-tui-chat-correlation-e2e (direct proof the chat-send shim still applies on the new admitReplyTurn shape)
  • rebuild-openclaw-e2e
  • sandbox-survival-e2e
  • issue-4434-tui-unreachable-inference-e2e (live privileged repro on Linux w/ NVIDIA_API_KEY)

The advisor also flagged three optional adjacent surfaces that weren't auto-dispatched. I dispatched them manually against this PR head (run 26652959641):

  • openclaw-inference-switch-e2e
  • inference-routing-e2e
  • hermes-e2e

8/8 advisor-recommended E2Es now green on 5f549f66.

Non-blocking follow-ups (PR Review Advisor)

The PR Review Advisor only ran once on the initial commit (924c1d52) and never re-evaluated after the "harden review gates" / "address review feedback" commits. Verifying each finding directly against HEAD:

  • 🛠 Privileged job lacks explicit trusted workflow-ref gate (if: github.ref == 'refs/heads/main') — partially mitigated by persist-credentials: false and SHA-pinned + ancestor-checked target_ref, but workflow YAML/script ref itself isn't gated.
  • 🛠 Live proof's VISIBLE_ERROR_RE and final-status assertion are still broad; the synthetic Vitest covers the structured-error shape, so regression-guard quality lives mostly there.
  • 🔎 Failure-artifact sanitizer is non-recursive into CAPTURE_DIR/; tokens are still env-redacted.
  • 🔎 Adjacent items: pin expect/iptables host packages, record OSV/GHSA advisory review evidence for openclaw@2026.5.27, refresh .agents/skills/nemoclaw-user-reference/references/commands.md (still shows v2026.5.22), and document tolerant-parser source-of-truth/removal contract.

CodeRabbit's three actionable items (path_instructions mapping, persist-credentials: false, fixed-string version match) are all addressed.

These are CI hygiene / assertion rigor, not product correctness, and reasonable to track as a follow-up issue.

Verdict

LGTM — approving. Recommend opening one tracking issue for the advisor follow-ups before merging.

@jyaunches jyaunches added R2 v0.0.56 Release target and removed v0.0.55 labels May 29, 2026
@cv cv marked this pull request as draft May 30, 2026 18:21
@cv
Copy link
Copy Markdown
Collaborator

cv commented May 30, 2026

Converting to draft so we don't merge a new OpenClaw without discussing first.

@cv cv added v0.0.57 Release target v0.0.58 Release target and removed v0.0.56 Release target v0.0.57 Release target labels Jun 1, 2026
@wscurran wscurran added area: cli Command line interface, flags, terminal UX, or output bug-fix PR fixes a bug or regression and removed NemoClaw CLI labels Jun 3, 2026
@cv cv added v0.0.59 Release target and removed v0.0.58 Release target labels Jun 4, 2026
@cjagwani
Copy link
Copy Markdown
Contributor

cjagwani commented Jun 4, 2026

Got the green light from Carlos. Did a pass on the upstream changelog. Channel SDK alias removal, node approvals now require admin, and tighter CLI numeric parsing all check out, none of it touches our surface.

@cjagwani cjagwani marked this pull request as ready for review June 4, 2026 19:09
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)
Dockerfile (1)

888-946: 💤 Low value

Healthcheck logic has grown significantly more complex.

The updated healthcheck now includes a three-tier probe with namespace-aware fallback logic to handle deployments where the dashboard port lives in a different network namespace (#3975). While this addresses real operational issues, the conditional branching and marker-file dependency make this healthcheck harder to reason about and test.

The logic is well-documented, but consider:

  • Whether this complexity could be encapsulated in a dedicated script (e.g., /usr/local/bin/nemoclaw-healthcheck) for better testability
  • Adding unit/integration tests for the healthcheck logic variations
  • Monitoring for false positives/negatives in E2E tests

As per coding guidelines, this Dockerfile change should be validated with the full E2E test suite:

gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=cloud-e2e,sandbox-survival-e2e,hermes-e2e,rebuild-openclaw-e2e,openclaw-tui-chat-correlation-e2e
🤖 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 `@Dockerfile` around lines 888 - 946, Extract the complex HEALTHCHECK shell
block into a standalone, testable script (e.g.,
/usr/local/bin/nemoclaw-healthcheck) and update the Dockerfile HEALTHCHECK to
invoke that script; specifically move the probe logic that computes port
(python3 urlparse snippet), curl checks, rc handling (0/7/other), marker check
(/tmp/nemoclaw-gateway-local), process existence check (pgrep --ignore-ancestors
-f 'openclaw[ -]gateway') and gateway log size test ([ -s /tmp/gateway.log ])
into the script, preserve the same exit codes/behavior, add unit/integration
tests covering the three probe outcomes and the marker-present/absent branches,
and ensure scripts/nemoclaw-start.sh remains the producer of
/tmp/nemoclaw-gateway-local so the script’s marker check remains valid.
🤖 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 `@Dockerfile`:
- Line 621: The explicit setting "'loopbackMode': 'gateway-only'" in the
Dockerfile should be clarified: either add a short inline comment in the
Dockerfile next to the "'loopbackMode': 'gateway-only'" entry explaining why we
must force gateway-only for issue `#4434` (describe the observed behavior change
vs prior runs and what breaks if omitted), or remove the line if OpenClaw
already defaults to gateway-only and update the PR description to state that
confirmation; locate the "'loopbackMode': 'gateway-only'" token in the
Dockerfile and implement one of these two actions so the intent and impact on
loopback/egress behavior are clear.

---

Nitpick comments:
In `@Dockerfile`:
- Around line 888-946: Extract the complex HEALTHCHECK shell block into a
standalone, testable script (e.g., /usr/local/bin/nemoclaw-healthcheck) and
update the Dockerfile HEALTHCHECK to invoke that script; specifically move the
probe logic that computes port (python3 urlparse snippet), curl checks, rc
handling (0/7/other), marker check (/tmp/nemoclaw-gateway-local), process
existence check (pgrep --ignore-ancestors -f 'openclaw[ -]gateway') and gateway
log size test ([ -s /tmp/gateway.log ]) into the script, preserve the same exit
codes/behavior, add unit/integration tests covering the three probe outcomes and
the marker-present/absent branches, and ensure scripts/nemoclaw-start.sh remains
the producer of /tmp/nemoclaw-gateway-local so the script’s marker check remains
valid.
🪄 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: 40bd164a-2b2e-4940-b1af-989155f9bc34

📥 Commits

Reviewing files that changed from the base of the PR and between 5f549f6 and bbd1a97.

📒 Files selected for processing (5)
  • .coderabbit.yaml
  • .github/workflows/nightly-e2e.yaml
  • Dockerfile
  • Dockerfile.base
  • docs/reference/commands.mdx
💤 Files with no reviewable changes (1)
  • docs/reference/commands.mdx
🚧 Files skipped from review as they are similar to previous changes (3)
  • .coderabbit.yaml
  • Dockerfile.base
  • .github/workflows/nightly-e2e.yaml

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

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 1

🧹 Nitpick comments (1)
Dockerfile (1)

888-946: 💤 Low value

Healthcheck logic has grown significantly more complex.

The updated healthcheck now includes a three-tier probe with namespace-aware fallback logic to handle deployments where the dashboard port lives in a different network namespace (#3975). While this addresses real operational issues, the conditional branching and marker-file dependency make this healthcheck harder to reason about and test.

The logic is well-documented, but consider:

  • Whether this complexity could be encapsulated in a dedicated script (e.g., /usr/local/bin/nemoclaw-healthcheck) for better testability
  • Adding unit/integration tests for the healthcheck logic variations
  • Monitoring for false positives/negatives in E2E tests

As per coding guidelines, this Dockerfile change should be validated with the full E2E test suite:

gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=cloud-e2e,sandbox-survival-e2e,hermes-e2e,rebuild-openclaw-e2e,openclaw-tui-chat-correlation-e2e
🤖 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 `@Dockerfile` around lines 888 - 946, Extract the complex HEALTHCHECK shell
block into a standalone, testable script (e.g.,
/usr/local/bin/nemoclaw-healthcheck) and update the Dockerfile HEALTHCHECK to
invoke that script; specifically move the probe logic that computes port
(python3 urlparse snippet), curl checks, rc handling (0/7/other), marker check
(/tmp/nemoclaw-gateway-local), process existence check (pgrep --ignore-ancestors
-f 'openclaw[ -]gateway') and gateway log size test ([ -s /tmp/gateway.log ])
into the script, preserve the same exit codes/behavior, add unit/integration
tests covering the three probe outcomes and the marker-present/absent branches,
and ensure scripts/nemoclaw-start.sh remains the producer of
/tmp/nemoclaw-gateway-local so the script’s marker check remains valid.
🤖 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 `@Dockerfile`:
- Line 621: The explicit setting "'loopbackMode': 'gateway-only'" in the
Dockerfile should be clarified: either add a short inline comment in the
Dockerfile next to the "'loopbackMode': 'gateway-only'" entry explaining why we
must force gateway-only for issue `#4434` (describe the observed behavior change
vs prior runs and what breaks if omitted), or remove the line if OpenClaw
already defaults to gateway-only and update the PR description to state that
confirmation; locate the "'loopbackMode': 'gateway-only'" token in the
Dockerfile and implement one of these two actions so the intent and impact on
loopback/egress behavior are clear.

---

Nitpick comments:
In `@Dockerfile`:
- Around line 888-946: Extract the complex HEALTHCHECK shell block into a
standalone, testable script (e.g., /usr/local/bin/nemoclaw-healthcheck) and
update the Dockerfile HEALTHCHECK to invoke that script; specifically move the
probe logic that computes port (python3 urlparse snippet), curl checks, rc
handling (0/7/other), marker check (/tmp/nemoclaw-gateway-local), process
existence check (pgrep --ignore-ancestors -f 'openclaw[ -]gateway') and gateway
log size test ([ -s /tmp/gateway.log ]) into the script, preserve the same exit
codes/behavior, add unit/integration tests covering the three probe outcomes and
the marker-present/absent branches, and ensure scripts/nemoclaw-start.sh remains
the producer of /tmp/nemoclaw-gateway-local so the script’s marker check remains
valid.
🪄 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: 40bd164a-2b2e-4940-b1af-989155f9bc34

📥 Commits

Reviewing files that changed from the base of the PR and between 5f549f6 and bbd1a97.

📒 Files selected for processing (5)
  • .coderabbit.yaml
  • .github/workflows/nightly-e2e.yaml
  • Dockerfile
  • Dockerfile.base
  • docs/reference/commands.mdx
💤 Files with no reviewable changes (1)
  • docs/reference/commands.mdx
🚧 Files skipped from review as they are similar to previous changes (3)
  • .coderabbit.yaml
  • Dockerfile.base
  • .github/workflows/nightly-e2e.yaml
🛑 Comments failed to post (1)
Dockerfile (1)

621-621: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🌐 Web query:

OpenClaw 2026.5.27 proxy configuration loopbackMode gateway-only

💡 Result:

In OpenClaw, proxy.loopbackMode is a configuration setting used to define how loopback-based traffic (such as Gateway WebSocket connections on 127.0.0.1:18789) is handled when a managed outbound proxy is enabled [1][2]. The gateway-only setting is the default mode [1][2]. In this mode, OpenClaw registers the specific Gateway loopback authority in its managed bypass policy [1][2]. This allows local Gateway WebSocket traffic, as well as connections from bundled browser plugins and local embedding providers (e.g., Ollama), to connect directly to the service without being routed through the configured outbound proxy [1][2]. Other available modes include: proxy: Disables the automatic registration of Gateway and Ollama loopback bypasses, forcing this local traffic to be sent through the managed proxy [1][2]. This is generally only useful if the remote proxy is specifically configured to map or tunnel these loopback requests [1][2]. block: Explicitly denies any loopback Gateway connections [1][2]. This configuration is typically defined in your configuration file under the proxy object [1][2]: proxy: enabled: true proxyUrl: http://127.0.0.1:3128 loopbackMode: gateway-only # gateway-only, proxy, or block Note that for reverse proxy setups (e.g., using nginx in front of the gateway), you should bind the gateway to a loopback address and ensure your reverse proxy configuration includes proper WebSocket upgrade headers (Upgrade, Connection, proxy_http_version 1.1) and a sufficient proxy_read_timeout (e.g., 86400) [3]. If using gateway.auth.mode: "trusted-proxy" for a same-host reverse proxy, you must also set gateway.auth.trustedProxy.allowLoopback: true and explicitly include the loopback address in gateway.trustedProxies [4][5].

Citations:


Clarify intent of proxy.loopbackMode: 'gateway-only' (loopback bypass behavior)

This sets proxy.loopbackMode to gateway-only.

OpenClaw’s proxy configuration docs list gateway-only as the default mode and describe it as registering the Gateway loopback bypass so local Gateway WebSocket/loopback traffic connects directly instead of being routed through the managed outbound proxy. If loopbackMode previously defaulted to gateway-only when omitted, this change is likely just making the default explicit; otherwise, it could alter loopback egress behavior.

Please either:

  • document why this needs to be explicitly set for #4434 (and what behavior would differ), or
  • confirm that prior OpenClaw behavior (when loopbackMode was absent) already defaulted to gateway-only.
    'loopbackMode': 'gateway-only', \
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Dockerfile` at line 621, The explicit setting "'loopbackMode':
'gateway-only'" in the Dockerfile should be clarified: either add a short inline
comment in the Dockerfile next to the "'loopbackMode': 'gateway-only'" entry
explaining why we must force gateway-only for issue `#4434` (describe the observed
behavior change vs prior runs and what breaks if omitted), or remove the line if
OpenClaw already defaults to gateway-only and update the PR description to state
that confirmation; locate the "'loopbackMode': 'gateway-only'" token in the
Dockerfile and implement one of these two actions so the intent and impact on
loopback/egress behavior are clear.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 4, 2026

Selective E2E Results — ✅ All requested jobs passed

Run: 26973754311
Target ref: bbd1a97c3c89dafe2a94c2f65d995259d88db49f
Workflow ref: main
Requested jobs: cloud-onboard-e2e,cloud-inference-e2e,openclaw-tui-chat-correlation-e2e,rebuild-openclaw-e2e,inference-routing-e2e,network-policy-e2e
Summary: 6 passed, 0 failed, 0 skipped

Job Result
cloud-inference-e2e ✅ success
cloud-onboard-e2e ✅ success
inference-routing-e2e ✅ success
network-policy-e2e ✅ success
openclaw-tui-chat-correlation-e2e ✅ success
rebuild-openclaw-e2e ✅ success

@cv cv merged commit 5c54e41 into main Jun 4, 2026
27 checks passed
@cv cv deleted the issue-4434-openclaw-2026-5-27-proof branch June 4, 2026 21:09
cv pushed a commit that referenced this pull request Jun 5, 2026
## Summary
- Add the v0.0.59 release notes from the GitHub announcement discussion.
- Refresh local inference and credential-storage guidance for the
current release behavior.
- Regenerate the user skills from the updated Fern docs.
- Tighten release-prep and docs review guidance for generated skills, PR
labels, and shared `$$nemoclaw` command placeholders.

## Verification
- `python3 scripts/docs-to-skills.py docs/ .agents/skills/ --prefix
nemoclaw-user --doc-platform fern-mdx`
- `rg "permissive mode|shields down|shields up|shields status|config
rotate-token|rotate-token" --glob '*.{md,mdx}'`
- `git diff --check`
- `npm run docs` (rerun outside sandbox after sandbox-only `tsx` IPC
permission failure)
- `npm run typecheck:cli`
- Pre-commit hooks during commit passed, including markdownlint,
docs-to-skills verification, gitleaks, commitlint, and skills YAML
tests.

## Source Summary
- #3679, #4437, #4681, #4766, #4772, #4775, #4786 ->
`docs/about/release-notes.mdx`, `docs/reference/commands.mdx`,
`docs/reference/troubleshooting.mdx`: Summarize OpenClaw 2026.5.27
compatibility, runtime path pinning, plugin registry recovery, live
gateway reconciliation, and clearer host-alias/startup diagnostics.
- #4332, #4402, #4769, #4776, #4779 -> `docs/about/release-notes.mdx`,
`docs/inference/inference-options.mdx`,
`docs/inference/use-local-inference.mdx`,
`docs/inference/switch-inference-providers.mdx`: Document the release
inference changes covering Local NIM waits, Hermes Anthropic routing,
Nemotron 3 Ultra, the current Ollama starter fallback, and Spark
managed-vLLM context length.
- #4628, #4652, #4733, #4745 -> `docs/about/release-notes.mdx`,
`docs/security/credential-storage.mdx`,
`docs/manage-sandboxes/messaging-channels.mdx`,
`docs/reference/troubleshooting.mdx`: Capture permission healing,
gateway-stored credential reuse, cross-sandbox messaging credential
conflict checks, and CDI preflight diagnostics.
- #4728, #4737, #4743, #4744, #4782 -> `.agents/skills/nemoclaw-user-*`:
Regenerate the user skill references from the updated source docs.
- Follow-up maintenance ->
`.agents/skills/nemoclaw-contributor-update-docs/SKILL.md`,
`.coderabbit.yaml`: Add release-prep area labels for docs and skills
PRs, and teach docs review guidance that `$$nemoclaw` is the correct
shared command placeholder for examples that work across agent aliases.

Note: the `documentation` label was not present in the repository, so
this PR is labeled with `v0.0.59` only.

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

* **Documentation**
  * Updated default model for local Ollama inference setup to qwen3.5:9b
  * Added Nemotron 3 Ultra 550B as an NVIDIA Endpoints model option
* Clarified credential storage and reuse behavior for post-deployment
(day-two) operations
* Added v0.0.59 release notes covering OpenClaw compatibility, inference
options, Hermes messaging sync, and troubleshooting
* Clarified CLI selection guidance and updated OpenClaw version example
in status output
* Revised release-prep instructions and docs review guidance for CLI
alias usage
<!-- 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

area: cli Command line interface, flags, terminal UX, or output bug-fix PR fixes a bug or regression integration: openclaw OpenClaw integration behavior v0.0.59 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[DGX Spark][CLI&UX] openclaw tui shows indefinite spinner with no error when inference endpoint is unreachable

5 participants