Skip to content

fix(security): upgrade Node.js 22 runtime - #8858

Merged
senthilr-nv merged 7 commits into
mainfrom
codex/security-node-22-23-2
Aug 12, 2026
Merged

fix(security): upgrade Node.js 22 runtime#8858
senthilr-nv merged 7 commits into
mainfrom
codex/security-node-22-23-2

Conversation

@senthilr-nv

@senthilr-nv senthilr-nv commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

Summary

Upgrade the managed OpenClaw and Deep Agents Code Node.js 22 runtime from 22.23.1 to the official 22.23.2 security release. Keep the production image, reviewed audit environment, WSL bootstrap, CI, E2E fixtures, and tests on the same verified runtime.

Changes

  • Pin node:22-trixie-slim to the multi-architecture digest for Node.js 22.23.2.
  • Update the reviewed npm-audit and WSL runtime pins, including the official x64 and arm64 archive checksums.
  • Update current runtime expectations and the trusted E2E workflow contract hash.
  • Validate every OpenClaw, Hermes, and Deep Agents Code Node.js base reference independently against the reviewed bundled npm-tar patch registry.
  • Reject an isolated unreviewed Deep Agents Code base digest in the security contract.

Type of Change

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

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification: The public host requirement remains Node.js 22.19 or later; this changes internal managed-image and validation pins only.
  • Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging)
  • Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Reviewed the official Node.js 22.23.2 image, release artifacts, checksums, and all active NemoClaw consumers of the exact runtime pin.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: no-docs-needed
  • Evidence: The documented Node.js 22.19+ host requirement and user-facing interfaces are unchanged; the new test strengthens only the internal per-image digest contract.
  • Agent: Codex Desktop

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit:
  • Station profile/scenario:
  • Result:
  • Supporting evidence:

Verification

  • PR description includes a Signed-off-by: line and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run validate:pr passed after refreshing origin/main when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: 29 integration assertions passed with 1 skipped; 104 image and security-contract assertions passed; 44 E2E support assertions passed; the expanded npm-tar contract passes all 14 assertions; the source-shape security contract passes.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result:
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: Senthil Ravichandran senthilr@nvidia.com

Summary by CodeRabbit

  • Maintenance

    • Updated the bundled Node.js 22 runtime to version 22.23.2, including WSL installation support and runtime validation.
    • Refreshed pinned container image versions used by builds, compatibility checks, and end-to-end workflows.
  • Security

    • Strengthened validation to ensure approved container image versions are used across supported build configurations.
  • Tests

    • Updated checksums, workflow contracts, and compatibility tests for the refreshed Node.js and container image versions.

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv senthilr-nv self-assigned this Aug 12, 2026
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

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

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: dc072d4c-feee-4783-85fa-bc009b6bc33f

📥 Commits

Reviewing files that changed from the base of the PR and between 6c4789b and 8bcafa1.

📒 Files selected for processing (2)
  • .github/workflows/e2e.yaml
  • tools/e2e/cli-artifact-workflow-boundary.mts
🚧 Files skipped from review as they are similar to previous changes (2)
  • .github/workflows/e2e.yaml
  • tools/e2e/cli-artifact-workflow-boundary.mts

📝 Walkthrough

Walkthrough

Updated Node.js from 22.23.1 to 22.23.2. Refreshed archive checksums and replaced pinned node:22-trixie-slim image digests across Dockerfiles, CI workflows, E2E contracts, scripts, and tests.

Changes

Node.js and image pin refresh

Layer / File(s) Summary
Node.js runtime version contracts
.github/actions/..., ci/..., tools/wsl/..., test/...
Updated Node.js version references, WSL archive checksums, audit metadata, and runtime validation fixtures.
Base image and build pin updates
Dockerfile, Dockerfile.base, agents/.../Dockerfile.base, scripts/..., test/node-tar-dockerfile-contract.test.ts, ci/source-shape-test-budget.json
Updated immutable node:22-trixie-slim digests and extended Dockerfile pin validation to all configured base Dockerfiles, including Deep Agents Code.
CI and E2E image contract updates
.github/workflows/..., test/e2e/..., tools/e2e/...
Updated workflow image pins, live test references, boundary expectations, and the CLI artifact workflow contract digest.

Estimated code review effort: 2 (Simple) | ~10 minutes

🚥 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 clearly and concisely describes the Node.js 22 runtime security upgrade, which is the primary change.
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.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/security-node-22-23-2

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

@github-code-quality

github-code-quality Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit 8bcafa1 in the codex/security-node-... branch remains at 96%, unchanged from commit ac6adac in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit 8bcafa1 in the codex/security-node-... branch remains at 82%, unchanged from commit ac6adac in the main branch.

Show a code coverage summary of the most impacted files.
File main ac6adac codex/security-node-... 8bcafa1 +/-
src/lib/state/registry/lock.ts 48% 39% -9%
src/lib/messagi...annel-config.ts 99% 92% -7%
src/lib/onboard...age/contract.ts 93% 89% -4%
src/lib/state/registry.ts 89% 87% -2%
src/lib/messagi.../token-paste.ts 94% 92% -2%
src/lib/securit...ate-endpoint.ts 97% 95% -2%
src/lib/messagi...reachability.ts 83% 81% -2%
src/lib/adapter...tp/curl-args.ts 99% 98% -1%
src/lib/policy/index.ts 68% 68% 0%
src/lib/policy/...ne-exclusion.ts 87% 92% +5%

Updated August 12, 2026 14:40 UTC

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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 `@scripts/patch-bundled-npm-tar.mts`:
- Line 42: Add agents/langchain-deepagents-code/Dockerfile.base to the
pinnedBaseSources contract used by the npm-tar remediation validation, ensuring
its Node 22 base-image pin is checked alongside the existing root and Hermes
sources.
🪄 Autofix

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: fc830a00-b1a1-474f-89eb-c46690a58dd2

📥 Commits

Reviewing files that changed from the base of the PR and between 6174550 and 3395c55.

📒 Files selected for processing (19)
  • .github/actions/ci-reviewed-npm-audit/action.yaml
  • .github/workflows/candidate-compatibility.yaml
  • .github/workflows/e2e.yaml
  • Dockerfile
  • Dockerfile.base
  • agents/langchain-deepagents-code/Dockerfile.base
  • ci/reviewed-npm-audit.json
  • scripts/patch-bundled-npm-tar.mts
  • test/e2e/live/openclaw-plugin-runtime-exdev.test.ts
  • test/e2e/live/openshell-gateway-auth-source-contract-helpers.ts
  • test/e2e/support/openclaw-plugin-runtime-exdev-workflow-boundary.test.ts
  • test/e2e/support/openshell-gateway-auth-contract-workflow-boundary.test.ts
  • test/openclaw-real-patched-dist-harness.test.ts
  • test/platform-vitest-main-workflow.test.ts
  • test/reviewed-npm-audit-workflow.test.ts
  • tools/e2e/cli-artifact-workflow-boundary.mts
  • tools/e2e/openclaw-plugin-runtime-exdev-workflow-boundary.mts
  • tools/e2e/openshell-gateway-auth-contract-workflow-boundary.mts
  • tools/wsl/ci-helper.ps1

Comment thread scripts/patch-bundled-npm-tar.mts
@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings reported

Advisor assessment: No blocking advisor findings reported
Next action: No advisor follow-up needed.
Findings: 0 blockers · 0 warnings · 0 suggestions

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 1 blocker · 0 warnings · 0 suggestions
  • Model comparison: normalized findings differ; normalized terminology decisions differ; normalized E2E selections differ; Nemotron reported 1 more blocker, the same number of warnings, the same number of suggestions.
1 terminology difference from the second opinion

Advisory only. These are normalized differences from the primary terminology receipt.

  • isolated unreviewed at test/node-tar-dockerfile-contract.test.ts:86: selected only by the second-opinion lane as justified.
2 additional E2E selections from the second opinion

Advisory only. The primary lane did not select these E2E jobs or targets.

  • hermes-e2e: The completed second-opinion lane identified E2E coverage that the primary lane omitted.
  • openclaw-tui-chat-correlation: The completed second-opinion lane identified E2E coverage that the primary lane omitted.

Second-opinion terminology and E2E selections are advisory. Live E2E does not run automatically for pull requests.

2 semantic terminology decisions

Terminology decisions are advisory. They affect the assessment only when a separate finding identifies concrete semantic impact.

  • established — reviewed Node base at test/node-tar-dockerfile-contract.test.ts:85: Use “reviewed Node base” for a registered Node base-image digest.
  • justified — isolated unreviewed Deep Agents Code Node base pin at test/node-tar-dockerfile-contract.test.ts:86: Retain the term in the test title because it identifies one divergent Deep Agents Code base-image digest.

E2E guidance

Advisory only. A maintainer can dispatch the default E2E suite for the commit under review.

Recommended E2E: None

Manual-only E2E: cloud-inference, cloud-onboard, full-e2e, managed-image-multiarch-startup, security-posture, openclaw-plugin-runtime-exdev, openclaw-plugin-runtime-exdev-release, ubuntu-repo-cloud-langchain-deepagents-code
The manual PR workflow does not run these selectors for the commit under review. Run them from reviewed code on main.

Workflow run details

This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge.

cv and others added 2 commits August 11, 2026 23:01
@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

Addressed the review finding in 03ea1ee: the npm-tar base-image contract now also covers the Deep Agents Code Node.js 22 Dockerfile. The focused contract test (13 tests) and repository checks pass.

cv
cv previously requested changes Aug 12, 2026

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

test/node-tar-dockerfile-contract.test.ts:51-63 concatenates all three base Dockerfiles and only checks that each allowlisted image appears somewhere. Because Dockerfile.base and the Deep Agents base currently share the Node.js 22 digest, changing only agents/langchain-deepagents-code/Dockerfile.base to an unlisted digest still passes this assertion. This can let Deep Agents ship an unreviewed bundled npm tar tree after a future base update. Assert that every relevant unique Node base reference from each managed base Dockerfile belongs to NODE_BASES_REQUIRING_BUNDLED_NPM_TAR_PATCH, preferably by comparing sets. Add regression evidence that an isolated Deep Agents digest change to an unlisted value fails the contract.

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

Addressed the maintainer finding in 7e0cbc5. The contract now validates each managed base Dockerfile independently against the reviewed Node base set, verifies the complete observed set, and includes a negative regression proving an isolated unreviewed Deep Agents Code digest is rejected. The focused test passes all 14 assertions, and the source-shape security gate passes.

@cv
cv dismissed their stale review August 12, 2026 09:05

The latest PR commit fixes the allowlist contract. The test now validates each managed Dockerfile and rejects an isolated unreviewed digest. Dismissing this review before a full current-commit review.

@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

Refreshed onto current main at 8bcafa1bf. The only merge conflict was the trusted E2E workflow contract hash; it was recomputed from the merged workflow. The Node tar contract passes 14/14, the selected workflow-boundary assertion passes, normal pre-push TypeScript checks pass, and GitHub verifies the refreshed commit. Exact-head Base Images validation: https://github.com/NVIDIA/NemoClaw/actions/runs/31607489372

@wscurran wscurran added area: ci CI workflows, checks, release automation, or GitHub Actions area: packaging Packages, images, registries, installers, or distribution area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery bug-fix PR fixes a bug or regression integration: dcode LangChain Deep Code integration behavior area: security Security controls, permissions, secrets, or hardening labels Aug 12, 2026
@senthilr-nv
senthilr-nv merged commit 5313eee into main Aug 12, 2026
139 of 144 checks passed
@senthilr-nv
senthilr-nv deleted the codex/security-node-22-23-2 branch August 12, 2026 15:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ci CI workflows, checks, release automation, or GitHub Actions area: packaging Packages, images, registries, installers, or distribution area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery area: security Security controls, permissions, secrets, or hardening bug-fix PR fixes a bug or regression integration: dcode LangChain Deep Code integration behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants