Skip to content

chore: upgrade OpenClaw to 2026.5.22#4260

Merged
ericksoa merged 4 commits into
mainfrom
upgrade/openclaw-2026.5.22
May 26, 2026
Merged

chore: upgrade OpenClaw to 2026.5.22#4260
ericksoa merged 4 commits into
mainfrom
upgrade/openclaw-2026.5.22

Conversation

@ericksoa
Copy link
Copy Markdown
Contributor

@ericksoa ericksoa commented May 26, 2026

Summary

Bump NemoClaw's runtime OpenClaw target from 2026.5.18 to 2026.5.22 across Dockerfile.base, the production Dockerfile, the OpenClaw agent manifest, package metadata, status docs, and version assertions.

The runtime build path now installs OpenClaw 2026.5.22 explicitly and records the expected npm integrity for openclaw@2026.5.22. Stale base images are upgraded during the production image build, so this PR tests the actual 5.22 upgrade path instead of leaving the runtime on the old version.

Important blueprint note: nemoclaw-blueprint/blueprint.yaml now keeps min_openclaw_version as the direct-blueprint compatibility floor, not the NemoClaw runtime pin. It is set to 2026.3.11 because the pinned legacy openshell-community sandbox image digest runs OpenClaw 2026.3.11. Normal NemoClaw onboarding builds from ghcr.io/nvidia/nemoclaw/sandbox-base and uses Dockerfile OPENCLAW_VERSION as the runtime source of truth. Follow-up #4271 tracks resolving or retiring that legacy blueprint image contract.

This also updates the bundled NemoClaw OpenClaw plugin metadata to 5.22 and tightens the chat-send compatibility patch with an executable 2026.5.22 follow-up runner fixture plus a real-package patch check.

Review Feedback

  • Addressed the CodeRabbit blueprint/runtime version feedback by making min_openclaw_version a compatibility floor and requiring Dockerfile runtime targets to be at least that floor instead of exactly equal.
  • Documented the runtime-vs-blueprint split in the schema, release notes, commands reference, and architecture reference.
  • Filed Resolve legacy blueprint sandbox image pin and OpenClaw version floor #4271 to resolve the stale legacy blueprint sandbox image contract instead of hiding it inside this dependency upgrade.

Issue impact

Candidate fixes or meaningful retest coverage from the OpenClaw 2026.5.22 bump:

Related bugs considered but not claimed fixed by this PR: #4238, #4211, #4010, #3947, and #4065. Those involve pre-sandbox Telegram reachability handling, pricing egress defaults, /nemoclaw slash command behavior, local Ollama token accounting, or shields-up filesystem permissions rather than the 2026.5.18 -> 2026.5.22 runtime pin itself.

Validation

Latest local validation on current head:

  • npm run typecheck:cli
  • npx vitest run test/fetch-guard-patch-regression.test.ts test/validate-blueprint.test.ts test/validate-config-schemas.test.ts
  • git diff --check

Earlier validation for the runtime upgrade stack:

  • npm run build:cli
  • npx vitest run test/fetch-guard-patch-regression.test.ts test/openclaw-chat-send-patch.test.ts test/validate-blueprint.test.ts nemoclaw/src/package-metadata.test.ts
  • unpacked openclaw@2026.5.22 and ran:
    • node scripts/patch-openclaw-chat-send.js <openclaw-2026.5.22>/dist
    • node scripts/patch-openclaw-tool-catalog.js <openclaw-2026.5.22>/dist

E2E

Full nightly-e2e for the runtime upgrade head passed: https://github.com/NVIDIA/NemoClaw/actions/runs/26471704158

  • Head: db6c7aa9a98b6dc815b96d6db21b24c1ed2646a1
  • Result: success
  • Matrix: 53 jobs succeeded; 3 jobs skipped by workflow conditions (gpu-e2e, gpu-double-onboard-e2e, notify-on-failure)

The latest follow-up commit keeps the runtime OpenClaw pin at 2026.5.22 and only decouples blueprint compatibility metadata, docs, and the guard test invariant.

Summary by CodeRabbit

  • Chores

    • Pinned the OpenClaw runtime target to v2026.5.22 and added strict integrity verification so builds fail on mismatch.
    • Adjusted blueprint minimum compatibility metadata.
  • Tests

    • Updated and added tests to cover the new pinned version, integrity checks, and upgrade/staleness behavior.
  • Documentation

    • Updated command examples, architecture notes, and release documentation to reference the new OpenClaw pinning and behavior.

Review Change Stack

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 26, 2026

📝 Walkthrough

Walkthrough

Pins OpenClaw to 2026.5.22 across build/config, enforces a pinned npm integrity for that release, updates in-image upgrade logic to validate version bounds and only upgrade when current < target, broadens the chat-send patch to handle new followup-runner shapes, and aligns tests and docs to 2026.5.22.

Changes

OpenClaw 2026.5.22 Version Pin and Compatibility

Layer / File(s) Summary
Configuration and manifest pins
agents/openclaw/manifest.yaml, Dockerfile, Dockerfile.base, nemoclaw-blueprint/blueprint.yaml, nemoclaw/package.json, docs/reference/commands.mdx, docs/about/release-notes.mdx, nemoclaw/src/package-metadata.test.ts, schemas/blueprint.schema.json
Build args, blueprint min_openclaw_version, agent expected_version, package metadata, and reference docs updated to 2026.5.22.
Upgrade logic and integrity verification
Dockerfile, Dockerfile.base, test/fetch-guard-patch-regression.test.ts
Rewrites in-image OpenClaw upgrade to validate OPENCLAW_VERSION against the blueprint minimum, adds a pre-install npm dist.integrity check for 2026.5.22, and only runs npm install -g openclaw@${OPENCLAW_VERSION} when installed version is lower than the target.
Fetch-guard regression and test harness updates
test/fetch-guard-patch-regression.test.ts
Extends reviewed classifier versions to include 2026.5.22, parses Dockerfile pins/integrities in tests, derives blueprint minimum from the Dockerfile runtime pin, and tightens regression assertions requiring classifier review plus matching runtime/base integrity when the build pin changes.
Chat-send patch compatibility & tests
scripts/patch-openclaw-chat-send.js, test/openclaw-chat-send-patch.test.ts
Patch script now checks for opts binding and matches followup-runner upstreamAbortSignal variants; tests add VM-based fixtures and helpers to validate patched runId selection and fail-closed behavior when opts is absent.
Sandbox/deployment probe and e2e updates
src/lib/sandbox/version.test.ts, src/lib/verify-deployment.test.ts, test/e2e/test-openclaw-tui-chat-correlation.sh
Mocks and assertions for sandbox version probes, deployment verification diagnostics, and E2E sandbox-version checks updated to expect 2026.5.22.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • NVIDIA/NemoClaw#3869: Overlaps on fetch-guard classifier and regression-test changes related to OpenClaw pinning and integrity validation.
  • NVIDIA/NemoClaw#4051: Touches the same OpenClaw pinning surfaces (Dockerfile.base, agent manifest, blueprint) with different target/version work.
  • NVIDIA/NemoClaw#3820: Related OpenClaw pin updates across build/metadata surfaces; differs in runtime dependency fixes.

Suggested labels

Docker

Suggested reviewers

  • cv

Poem

🐰 Hop, hop — the pins now sing in tune,
From .18's dusk to .22's noon,
Integrity checked and patches made right,
Tests updated, docs shining bright,
A little rabbit cheers: merge it soon! 🥕

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main objective of this PR, which is to upgrade OpenClaw from version 2026.5.18 to 2026.5.22 across the entire codebase.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ 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 upgrade/openclaw-2026.5.22

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint skipped: no ESLint configuration detected in root package.json. To enable, add eslint to devDependencies.


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

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 26, 2026

E2E Advisor Recommendation

Required E2E: test-e2e-sandbox, cloud-onboard-e2e, openclaw-tui-chat-correlation-e2e, rebuild-openclaw-e2e, network-policy-e2e, inference-routing-e2e
Optional E2E: test-e2e-gateway-isolation, openclaw-inference-switch-e2e, upgrade-stale-sandbox-e2e, cloud-e2e

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

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

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • test-e2e-sandbox (medium): Builds the production sandbox image and fixture image, then runs the in-image sandbox E2E smoke suite. Required because Dockerfile/OpenClaw version and patch application changed.
  • cloud-onboard-e2e (high): Validates the main fresh install/onboard path with a real OpenClaw sandbox, proving the new runtime version, manifest/package metadata, blueprint compatibility floor, gateway health, and baseline inference route work end-to-end.
  • openclaw-tui-chat-correlation-e2e (high): Directly covers the changed OpenClaw chat.send patch and changed live wrapper by creating a fresh sandbox and validating real TUI/webchat run-id correlation and no empty final events.
  • rebuild-openclaw-e2e (high): Required for the version-pin change: validates stale OpenClaw sandboxes rebuild to the current runtime while preserving state, credentials, and policy presets.
  • network-policy-e2e (medium): Required because the OpenClaw runtime bump revalidates Dockerfile fetch-guard/proxy patching at the sandbox network security boundary and could regress allowed/denied egress behavior.
  • inference-routing-e2e (medium): Required because OpenClaw/plugin compatibility and deployment verification changes can affect inference.local routing, credential isolation, and gateway/provider error classification.

Optional E2E

  • test-e2e-gateway-isolation (medium): Useful adjacent confidence for the rebuilt production image’s gateway isolation and security posture, but less targeted than network-policy-e2e for this diff.
  • openclaw-inference-switch-e2e (medium): Optional follow-up to prove OpenClaw 2026.5.22 still supports day-two inference route switching after the provider/plugin compatibility bump.
  • upgrade-stale-sandbox-e2e (high): Optional broader upgrade-path coverage for stale sandbox handling. The required rebuild-openclaw-e2e is the more direct version-pin/state-preservation guard.
  • cloud-e2e (high): Optional full user-journey confidence if maintainers want one broad smoke after the targeted required jobs pass.

New E2E recommendations

  • direct-blueprint-compatibility (medium): This PR intentionally decouples Dockerfile OPENCLAW_VERSION from blueprint min_openclaw_version. Existing required E2Es mainly exercise normal NemoClaw Dockerfile onboarding, not the legacy direct-blueprint image path that consumes min_openclaw_version as a compatibility floor.
    • Suggested test: Add an E2E that creates a sandbox through the direct blueprint/openshell path and asserts the lowered min_openclaw_version remains compatible while normal NemoClaw-built sandboxes still run the Dockerfile OPENCLAW_VERSION.
  • openclaw-npm-integrity-pin (low): The Dockerfiles now gate OpenClaw 2026.5.22 installation on npm dist.integrity. Unit/regression tests cover the shell logic, but there is no dedicated E2E that simulates registry integrity drift during image build.
    • Suggested test: Add a hermetic image-build E2E or build-fixture test that forces an integrity mismatch and verifies the sandbox image build fails closed with the expected diagnostic.

Dispatch hint

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 26, 2026

E2E Scenario Advisor Recommendation

Required scenario E2E: None
Optional scenario E2E: None

Workflow run

Full scenario advisor summary

E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required scenario E2E

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

Optional scenario E2E

  • None.

Relevant changed files

  • None.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 26, 2026

PR Review Advisor

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

Workflow run details

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

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 (3)
Dockerfile.base (1)

181-181: Run the sandbox-impact E2E suite for this base-image pin bump.

Since this changes Dockerfile.base, run the recommended nightly jobs before merge to validate runtime behavior across onboard, recovery, rebuild persistence, and OpenClaw chat correlation:

$ 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

As per coding guidelines: "Dockerfile.base ... changes are only testable with a real container build" and the listed E2E recommendations should be run.

🤖 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.base` at line 181, You changed the base image version ARG
OPENCLAW_VERSION in Dockerfile.base; before merging, run the recommended nightly
E2E jobs to validate runtime behavior by invoking the GitHub workflow
(nightly-e2e.yaml) for the current branch and pass
jobs=cloud-e2e,sandbox-survival-e2e,hermes-e2e,rebuild-openclaw-e2e,openclaw-tui-chat-correlation-e2e
so the sandbox-impact suites (onboard, recovery, rebuild persistence, and
OpenClaw chat correlation) execute and verify the pin bump.
Dockerfile (1)

311-311: Validate this image-layer change path via the recommended E2E jobs.

$ 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

As per coding guidelines: "Dockerfile ... changes are only testable with a real container build" and should use the specified E2E set.

🤖 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 311, The Dockerfile image-layer change must be validated
by running the specified end-to-end job suite; trigger the nightly-e2e.yaml
workflow and run the jobs cloud-e2e, sandbox-survival-e2e, hermes-e2e,
rebuild-openclaw-e2e, and openclaw-tui-chat-correlation-e2e against your branch
to confirm the layer and OpenClaw 2026.5.22 runtime exposure work correctly;
report any failing E2E errors and iterate on the Dockerfile change until all
listed jobs pass.
scripts/patch-openclaw-chat-send.js (1)

107-107: Run the recommended E2E test to verify TUI message correlation.

Changes to this patch script can affect TUI message ordering, duplicate sends, and user/assistant turn correlation when OpenClaw is the active agent.

As per coding guidelines, run the openclaw-tui-chat-correlation-e2e test to validate the change:

$ gh workflow run nightly-e2e.yaml --ref <branch> -f jobs=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 `@scripts/patch-openclaw-chat-send.js` at line 107, Summary: After changing the
block that creates replyOperation and generates runId, verify TUI message
correlation. Instruction: After editing the code around createReplyOperation
(the object with sessionId: run.sessionId, sessionKey: replySessionKey ?? "",
resetTriggered: false, upstreamAbortSignal: queued.abortSignal (??
opts?.abortSignal)) and the runId = crypto.randomUUID() insertion, run the
openclaw-tui-chat-correlation-e2e test via the GH workflow (gh workflow run
nightly-e2e.yaml --ref <branch> -f jobs=openclaw-tui-chat-correlation-e2e) and
confirm TUI ordering, duplicate sends, and user/assistant turn correlation are
correct; if failures occur, adjust the ordering or scoping of replyOperation vs
runId (ensuring createReplyOperation receives the correct
sessionId/sessionKey/resetTriggered/upstreamAbortSignal and runId is generated
at the correct time) until the e2e passes.
🤖 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 `@Dockerfile`:
- Line 311: The Dockerfile image-layer change must be validated by running the
specified end-to-end job suite; trigger the nightly-e2e.yaml workflow and run
the jobs cloud-e2e, sandbox-survival-e2e, hermes-e2e, rebuild-openclaw-e2e, and
openclaw-tui-chat-correlation-e2e against your branch to confirm the layer and
OpenClaw 2026.5.22 runtime exposure work correctly; report any failing E2E
errors and iterate on the Dockerfile change until all listed jobs pass.

In `@Dockerfile.base`:
- Line 181: You changed the base image version ARG OPENCLAW_VERSION in
Dockerfile.base; before merging, run the recommended nightly E2E jobs to
validate runtime behavior by invoking the GitHub workflow (nightly-e2e.yaml) for
the current branch and pass
jobs=cloud-e2e,sandbox-survival-e2e,hermes-e2e,rebuild-openclaw-e2e,openclaw-tui-chat-correlation-e2e
so the sandbox-impact suites (onboard, recovery, rebuild persistence, and
OpenClaw chat correlation) execute and verify the pin bump.

In `@scripts/patch-openclaw-chat-send.js`:
- Line 107: Summary: After changing the block that creates replyOperation and
generates runId, verify TUI message correlation. Instruction: After editing the
code around createReplyOperation (the object with sessionId: run.sessionId,
sessionKey: replySessionKey ?? "", resetTriggered: false, upstreamAbortSignal:
queued.abortSignal (?? opts?.abortSignal)) and the runId = crypto.randomUUID()
insertion, run the openclaw-tui-chat-correlation-e2e test via the GH workflow
(gh workflow run nightly-e2e.yaml --ref <branch> -f
jobs=openclaw-tui-chat-correlation-e2e) and confirm TUI ordering, duplicate
sends, and user/assistant turn correlation are correct; if failures occur,
adjust the ordering or scoping of replyOperation vs runId (ensuring
createReplyOperation receives the correct
sessionId/sessionKey/resetTriggered/upstreamAbortSignal and runId is generated
at the correct time) until the e2e passes.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 4d8aada3-b633-4f7b-aca4-257d1404db2d

📥 Commits

Reviewing files that changed from the base of the PR and between 9d68966 and 85dc176.

📒 Files selected for processing (11)
  • Dockerfile
  • Dockerfile.base
  • agents/openclaw/manifest.yaml
  • docs/reference/commands.mdx
  • nemoclaw-blueprint/blueprint.yaml
  • scripts/patch-openclaw-chat-send.js
  • src/lib/sandbox/version.test.ts
  • src/lib/verify-deployment.test.ts
  • test/e2e/test-openclaw-tui-chat-correlation.sh
  • test/fetch-guard-patch-regression.test.ts
  • test/openclaw-chat-send-patch.test.ts

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26468536223
Target ref: 85dc176c0f26c9b2a13f526b6b1868d035a44d9a
Workflow ref: main
Requested jobs: cloud-onboard-e2e,openclaw-tui-chat-correlation-e2e,rebuild-openclaw-e2e
Summary: 3 passed, 0 failed, 0 skipped

Job Result
cloud-onboard-e2e ✅ success
openclaw-tui-chat-correlation-e2e ✅ success
rebuild-openclaw-e2e ✅ success

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26468476226
Target ref: 85dc176c0f26c9b2a13f526b6b1868d035a44d9a
Workflow ref: upgrade/openclaw-2026.5.22
Requested jobs: all (no filter)
Summary: 47 passed, 1 failed, 2 skipped

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

Failed jobs: rebuild-hermes-e2e. Check run artifacts for logs.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
scripts/patch-openclaw-chat-send.js (1)

90-126: Run the targeted chat-correlation E2E before merge.

This helper directly affects OpenClaw chat-send ordering/correlation behavior, so please run openclaw-tui-chat-correlation-e2e on this branch.

As per coding guidelines "scripts/patch-openclaw-chat-send.js ... changes can affect TUI message ordering, duplicate sends, and user/assistant turn correlation ... E2E test recommendation: 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 `@scripts/patch-openclaw-chat-send.js` around lines 90 - 126, The patch
modifies run-id handling in patchFollowupRunnerFile (changing runId
initialization to use queued.runId ?? opts?.runId ?? crypto.randomUUID()) which
can affect message ordering/correlation—before merging, run the targeted
end-to-end test openclaw-tui-chat-correlation-e2e against this branch and verify
chat/send ordering, duplicate sends, and assistant/user turn correlation; if the
test fails, revert or adjust the runId replacement logic in
patchFollowupRunnerFile and re-run the E2E until it passes.
🤖 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 `@scripts/patch-openclaw-chat-send.js`:
- Around line 90-126: The patch modifies run-id handling in
patchFollowupRunnerFile (changing runId initialization to use queued.runId ??
opts?.runId ?? crypto.randomUUID()) which can affect message
ordering/correlation—before merging, run the targeted end-to-end test
openclaw-tui-chat-correlation-e2e against this branch and verify chat/send
ordering, duplicate sends, and assistant/user turn correlation; if the test
fails, revert or adjust the runId replacement logic in patchFollowupRunnerFile
and re-run the E2E until it passes.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 62622366-3b01-4a80-a37c-fe01598bbcf5

📥 Commits

Reviewing files that changed from the base of the PR and between 85dc176 and 0f86cef.

📒 Files selected for processing (10)
  • Dockerfile
  • Dockerfile.base
  • docs/about/release-notes.mdx
  • docs/reference/commands.mdx
  • nemoclaw-blueprint/blueprint.yaml
  • nemoclaw/package.json
  • nemoclaw/src/package-metadata.test.ts
  • scripts/patch-openclaw-chat-send.js
  • test/fetch-guard-patch-regression.test.ts
  • test/openclaw-chat-send-patch.test.ts
✅ Files skipped from review due to trivial changes (5)
  • nemoclaw/src/package-metadata.test.ts
  • nemoclaw/package.json
  • docs/about/release-notes.mdx
  • docs/reference/commands.mdx
  • nemoclaw-blueprint/blueprint.yaml

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26469418993
Target ref: 0f86cefaede407e193e390109ced08ed0a7733a2
Workflow ref: upgrade/openclaw-2026.5.22
Requested jobs: cloud-e2e,sandbox-survival-e2e,hermes-e2e,rebuild-openclaw-e2e,openclaw-tui-chat-correlation-e2e
Summary: 4 passed, 1 failed, 0 skipped

Job Result
cloud-e2e ✅ success
hermes-e2e ✅ success
openclaw-tui-chat-correlation-e2e ❌ failure
rebuild-openclaw-e2e ✅ success
sandbox-survival-e2e ✅ success

Failed jobs: openclaw-tui-chat-correlation-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26469480317
Target ref: 0f86cefaede407e193e390109ced08ed0a7733a2
Workflow ref: main
Requested jobs: cloud-onboard-e2e,openclaw-tui-chat-correlation-e2e,network-policy-e2e,rebuild-openclaw-e2e
Summary: 4 passed, 0 failed, 0 skipped

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

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26471497587
Target ref: db6c7aa9a0b671559c55471e89f37a78d062b596
Workflow ref: upgrade/openclaw-2026.5.22
Requested jobs: cloud-e2e,sandbox-survival-e2e,hermes-e2e,rebuild-openclaw-e2e,openclaw-tui-chat-correlation-e2e
Summary: 0 passed, 5 failed, 0 skipped

Job Result
cloud-e2e ❌ failure
hermes-e2e ❌ failure
openclaw-tui-chat-correlation-e2e ❌ failure
rebuild-openclaw-e2e ❌ failure
sandbox-survival-e2e ❌ failure

Failed jobs: cloud-e2e, hermes-e2e, openclaw-tui-chat-correlation-e2e, rebuild-openclaw-e2e, sandbox-survival-e2e. Check run artifacts for logs.

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26471546489
Target ref: db6c7aa9a98b6dc815b96d6db21b24c1ed2646a1
Workflow ref: upgrade/openclaw-2026.5.22
Requested jobs: cloud-e2e,sandbox-survival-e2e,hermes-e2e,rebuild-openclaw-e2e,openclaw-tui-chat-correlation-e2e
Summary: 0 passed, 0 failed, 0 skipped

Job Result
cloud-e2e ⚠️ cancelled
hermes-e2e ⚠️ cancelled
openclaw-tui-chat-correlation-e2e ⚠️ cancelled
rebuild-openclaw-e2e ⚠️ cancelled
sandbox-survival-e2e ⚠️ cancelled

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

🤖 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 `@nemoclaw-blueprint/blueprint.yaml`:
- Line 7: The blueprint's min_openclaw_version value was bumped to "2026.5.22"
but the blueprint still points to an immutable sandbox image digest (the pinned
sandbox digest referenced elsewhere in this file), causing a mismatch between
advertised minimum OpenClaw and the actual image; either revert
min_openclaw_version back to the version that matches the pinned digest or
update the sandbox image digest in this same change so the digest-backed image
actually meets "2026.5.22". Locate the min_openclaw_version key and the sandbox
image digest entries (the pinned sandbox image references) and either restore
the previous version string or replace the digest with the new image digest that
was built with OpenClaw 2026.5.22, ensuring both are updated together.

In `@test/fetch-guard-patch-regression.test.ts`:
- Around line 91-93: The test currently hard-sets the synthetic blueprint
minimum to the exact Dockerfile pin by writing openclawVersion into the
blueprint (openclawVersion, openclawIntegrity, fs.writeFileSync(blueprint,...))
and later asserts equality (lines referenced around 246-248); change this so the
blueprint minimum is not forced equal to the runtime target: write a
lower/compatible version or a range into the blueprint (e.g., decrement or use a
semver-min string) and update the assertion that checks the runtime/base target
to assert ">= blueprint min" (use a semver comparison rather than strict
equality) so the test covers the stale-digest path and enforces runtime >=
blueprint minimum instead of ==.
🪄 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: 4242d233-987d-4c84-b0a5-f14cc48edcda

📥 Commits

Reviewing files that changed from the base of the PR and between 0f86cef and db6c7aa.

📒 Files selected for processing (5)
  • Dockerfile
  • docs/about/release-notes.mdx
  • docs/reference/commands.mdx
  • nemoclaw-blueprint/blueprint.yaml
  • test/fetch-guard-patch-regression.test.ts
✅ Files skipped from review due to trivial changes (2)
  • docs/reference/commands.mdx
  • docs/about/release-notes.mdx

Comment thread nemoclaw-blueprint/blueprint.yaml Outdated
Comment thread test/fetch-guard-patch-regression.test.ts Outdated
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26471562073
Target ref: db6c7aa9a98b6dc815b96d6db21b24c1ed2646a1
Workflow ref: main
Requested jobs: cloud-onboard-e2e,openclaw-tui-chat-correlation-e2e,network-policy-e2e,rebuild-openclaw-e2e
Summary: 4 passed, 0 failed, 0 skipped

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

@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26471704158
Target ref: db6c7aa9a98b6dc815b96d6db21b24c1ed2646a1
Workflow ref: upgrade/openclaw-2026.5.22
Requested jobs: all (no filter)
Summary: 50 passed, 0 failed, 2 skipped

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

@ericksoa ericksoa requested a review from cv May 26, 2026 21:49
@ericksoa ericksoa added v0.0.52 Release target dependencies Pull requests that update a dependency file Integration: OpenClaw Support for OpenClaw Integration: Telegram Use this label to identify Telegram bot integration issues with NemoClaw. labels May 26, 2026
@ericksoa ericksoa self-assigned this May 26, 2026
@ericksoa ericksoa added Integration: Discord Use this label to identify Discord bot integration issues with NemoClaw. Integration: Slack Use this label to identify Slack integration issues with NemoClaw. Integration: WeChat Use this label to identify WeChat integration issues with NemoClaw. E2E End-to-end testing — Brev infrastructure, test cases, nightly failures, and coverage gaps Sandbox Use this label to identify issues related to the NemoClaw isolated environment based on OpenShell. labels May 26, 2026
@ericksoa ericksoa added fix status: rfr Ready for review — no conflicts, awaiting maintainer review labels May 26, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Caution

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

⚠️ Outside diff range comments (1)
Dockerfile (1)

93-126: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Install the pinned OpenClaw version when the base is newer, not just when it is stale.

With BASE_IMAGE defaulting to sandbox-base:latest, the >= check lets a newer base image bypass the reinstall and silently ship a different OpenClaw version than OPENCLAW_VERSION. That breaks the runtime pin and can leave the later patch block running against an unreviewed dist shape.

Suggested fix
-    if [ "$(printf '%s\n%s' "$OPENCLAW_VERSION" "$CUR_VER" | sort -V | head -n1)" = "$OPENCLAW_VERSION" ]; then \
-        echo "INFO: OpenClaw $CUR_VER is current (>= $OPENCLAW_VERSION), no upgrade needed"; \
+    if [ "$CUR_VER" = "$OPENCLAW_VERSION" ]; then \
+        echo "INFO: OpenClaw $CUR_VER matches pinned target, no upgrade needed"; \
     else \
-        echo "INFO: Base image has OpenClaw $CUR_VER, upgrading to $OPENCLAW_VERSION"; \
+        echo "INFO: Base image has OpenClaw $CUR_VER, installing pinned $OPENCLAW_VERSION"; \
         # npm 10's atomic-move install can hit EROFS on overlayfs when the
         # prior install spans multiple image layers (e.g. openclaw was
         # baked into sandbox-base, then we upgrade on top here). Clearing
🤖 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 93 - 126, The current version check uses sort -V to
skip reinstall when the base image has a newer OpenClaw (CUR_VER >=
OPENCLAW_VERSION), which allows an unpinned newer runtime; change the logic so
we only skip when CUR_VER equals OPENCLAW_VERSION and always install the
requested OPENCLAW_VERSION otherwise. Update the conditional around
CUR_VER/OPENCLAW_VERSION (the if that echoes "INFO: OpenClaw $CUR_VER is current
(>= $OPENCLAW_VERSION), no upgrade needed") to test equality (CUR_VER =
OPENCLAW_VERSION) and move the rm -rf /usr/local/lib/node_modules/openclaw
/usr/local/bin/openclaw; npm install -g ... "openclaw@${OPENCLAW_VERSION}" into
the else branch for any non-equal case so the pinned version is installed even
when the base is newer.
🧹 Nitpick comments (1)
docs/reference/commands.mdx (1)

410-410: ⚡ Quick win

Use active voice in this sentence.

is declared by is passive. Rephrase with an active subject so it matches the docs style used elsewhere on the page.

As per coding guidelines, "Active voice required. Flag passive constructions."

🤖 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 `@docs/reference/commands.mdx` at line 410, Rewrite the passive sentence to
active voice by making the Dockerfiles the subject; e.g., state that the
NemoClaw Dockerfiles declare the runtime build target using the OPENCLAW_VERSION
variable. Ensure the revised sentence mentions the same identifiers
(OPENCLAW_VERSION and NemoClaw Dockerfiles) and keeps the original meaning while
using active voice.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@Dockerfile`:
- Around line 93-126: The current version check uses sort -V to skip reinstall
when the base image has a newer OpenClaw (CUR_VER >= OPENCLAW_VERSION), which
allows an unpinned newer runtime; change the logic so we only skip when CUR_VER
equals OPENCLAW_VERSION and always install the requested OPENCLAW_VERSION
otherwise. Update the conditional around CUR_VER/OPENCLAW_VERSION (the if that
echoes "INFO: OpenClaw $CUR_VER is current (>= $OPENCLAW_VERSION), no upgrade
needed") to test equality (CUR_VER = OPENCLAW_VERSION) and move the rm -rf
/usr/local/lib/node_modules/openclaw /usr/local/bin/openclaw; npm install -g ...
"openclaw@${OPENCLAW_VERSION}" into the else branch for any non-equal case so
the pinned version is installed even when the base is newer.

---

Nitpick comments:
In `@docs/reference/commands.mdx`:
- Line 410: Rewrite the passive sentence to active voice by making the
Dockerfiles the subject; e.g., state that the NemoClaw Dockerfiles declare the
runtime build target using the OPENCLAW_VERSION variable. Ensure the revised
sentence mentions the same identifiers (OPENCLAW_VERSION and NemoClaw
Dockerfiles) and keeps the original meaning while using active voice.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 6c7aac6a-fe6b-412f-a157-f33165f1241d

📥 Commits

Reviewing files that changed from the base of the PR and between db6c7aa and 51a2d32.

📒 Files selected for processing (7)
  • Dockerfile
  • docs/about/release-notes.mdx
  • docs/reference/architecture.mdx
  • docs/reference/commands.mdx
  • nemoclaw-blueprint/blueprint.yaml
  • schemas/blueprint.schema.json
  • test/fetch-guard-patch-regression.test.ts
✅ Files skipped from review due to trivial changes (3)
  • schemas/blueprint.schema.json
  • docs/reference/architecture.mdx
  • docs/about/release-notes.mdx

@ericksoa ericksoa merged commit 05f3ace into main May 26, 2026
34 checks passed
@ericksoa ericksoa deleted the upgrade/openclaw-2026.5.22 branch May 26, 2026 22:25
@github-actions
Copy link
Copy Markdown
Contributor

Selective E2E Results — ❌ Some jobs failed

Run: 26478183772
Target ref: 51a2d32d705d3031f1f689fdc29a56c7133c7edc
Workflow ref: main
Requested jobs: cloud-onboard-e2e,openclaw-tui-chat-correlation-e2e,rebuild-openclaw-e2e,network-policy-e2e,inference-routing-e2e
Summary: 4 passed, 1 failed, 0 skipped

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

Failed jobs: openclaw-tui-chat-correlation-e2e. Check run artifacts for logs.

cv added a commit that referenced this pull request May 27, 2026
## Summary

Refresh NemoClaw documentation and regenerated user skills for the
v0.0.52 release-prep window. Adds the v0.0.52 release-notes entry and
regenerates `nemoclaw-user-*` skills so the published Fern docs and the
agent-skill references stay in sync.

## Source summary

- #4260 -> `docs/about/release-notes.mdx`: Document the OpenClaw runtime
bump to 2026.5.22 and call out the `min_openclaw_version` compatibility
floor versus `OPENCLAW_VERSION` Dockerfile pin. (Architecture and
commands pages were already updated in #4260 itself.)
- #4272 -> `docs/about/release-notes.mdx`: Document the Hermes v0.14
root-entrypoint sandbox layout repair (precreated runtime dirs, sticky
group-writable `/sandbox/.hermes`, removed `gateway.pid` symlink
precreation, legacy state cleanup at launch).
- #4261 -> `docs/about/release-notes.mdx`: Document the onboard ready
output restoration that points users at `nemoclaw <name> dashboard-url
--quiet`.
- #4200 -> `docs/about/release-notes.mdx`: Document Slack token
validation in onboarding so invalid `SLACK_BOT_TOKEN` values trigger a
re-prompt instead of silent advance.
- #4278 -> `docs/about/release-notes.mdx`: Document the Windows
bootstrap regression fix that restores the separate Ubuntu setup handoff
window, keeps `Ubuntu-24.04` as the default distro, and documents
`-DistroName Ubuntu` to reuse an existing distro. (The
`docs/get-started/windows-preparation.mdx` page was already updated in
#4278 itself.)
- #4092 -> `docs/about/release-notes.mdx`: Document the blueprint
private-network blocklist reload when `private-networks.yaml` changes on
disk.
- Release cleanup -> `.agents/skills/nemoclaw-user-*`: Regenerate user
skills with `scripts/docs-to-skills.py docs/ .agents/skills/ --prefix
nemoclaw-user --doc-platform fern-mdx` so the agent-skill references
pick up the v0.0.52 release-notes update plus the WeChat / WhatsApp doc
changes that already landed in #4276.

## Type of Change

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

## Verification

- `python3 scripts/docs-to-skills.py docs/ .agents/skills/ --prefix
nemoclaw-user --doc-platform fern-mdx` -> 10 skills, 1724 lines, 29
reference files.
- `npm run docs` -> 0 errors, 1 warning (Fern check clean).
- `npm run build:cli` -> success (refreshed `dist/` so the pre-push
TypeScript hook passes).
- Skip-list check against `docs/.docs-skip` `skip-terms`: no "permissive
mode", "shields down", "shields up", "shields status", "config
rotate-token", or "rotate-token" strings in `docs/` or generated skills.

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

* **New Features**
* Experimental WeChat messaging channel added (QR pairing), alongside
Telegram, Discord, Slack, and WhatsApp.

* **Documentation**
* Updated onboarding, messaging-channel, CLI, and troubleshooting docs
to include WeChat/WhatsApp (marked experimental) and new onboarding
flags/notes.
* Clarified provider validation and runtime routing behavior for
OpenAI-compatible endpoints and Google Gemini.
  * Updated Windows bootstrap/WSL guidance to target Ubuntu 24.04.

* **Chores**
* Added v0.0.52 release notes (runtime upgrade, sandbox hardening,
onboarding and network fixes).

<!-- review_stack_entry_start -->

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

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file E2E End-to-end testing — Brev infrastructure, test cases, nightly failures, and coverage gaps fix Integration: Discord Use this label to identify Discord bot integration issues with NemoClaw. Integration: OpenClaw Support for OpenClaw Integration: Slack Use this label to identify Slack integration issues with NemoClaw. Integration: Telegram Use this label to identify Telegram bot integration issues with NemoClaw. Integration: WeChat Use this label to identify WeChat integration issues with NemoClaw. Sandbox Use this label to identify issues related to the NemoClaw isolated environment based on OpenShell. status: rfr Ready for review — no conflicts, awaiting maintainer review v0.0.52 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants