Skip to content

fix(security): remediate OpenClaw 2026.6.10 transitive dependencies#7286

Merged
jyaunches merged 20 commits into
mainfrom
codex/fix-openclaw-2026-6-10-transitives
Jul 21, 2026
Merged

fix(security): remediate OpenClaw 2026.6.10 transitive dependencies#7286
jyaunches merged 20 commits into
mainfrom
codex/fix-openclaw-2026-6-10-transitives

Conversation

@jyaunches

@jyaunches jyaunches commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Summary

Keep OpenClaw core and official plugins pinned to 2026.6.10 while replacing the reviewed vulnerable transitive packages before installation. The same fail-closed archive remediation feeds production images, messaging plugin installs, and the reviewed npm audit graph.

Changes

  • Replace OpenClaw core tar@7.5.16 and @openclaw/fs-safe@0.3.0's tar@7.5.13 resolution with tar@7.5.19.
  • Replace brace-expansion@5.0.6 with 5.0.7 in the core graph.
  • Replace bundled axios@1.16.0 with 1.18.0 in the Slack and Teams plugin archives, including its reviewed proxy dependencies.
  • Verify exact source graph shapes, replacement package integrity, safe archive members, and committed patched-metadata digests before installation.
  • Record a new protected base-image recipe so same-version vulnerable base bytes are not reused.
  • Document the bounded remediation, retained low/moderate advisories, attribution limits, and E2E release gate.

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:
  • 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: maintainer review pending
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

DGX Station Hardware Evidence

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

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 check:diff passed when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — 120 focused implementation tests pass; archive reconstruction coverage includes core, Slack, and Teams
  • Applicable broad gate passed — full E2E is running for 223aea520; required CI is also running
  • 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) — 0 errors; 2 pre-existing warnings
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Additional evidence:

  • Exact Node 22.22.2 reviewed npm audit: info=0 low=1 moderate=1 high=0 critical=0; configured high threshold passes.
  • Locked mcporter graph: info=0 low=0 moderate=0 high=0 critical=0.
  • Real remediated install retains openclaw@2026.6.10 and @openclaw/fs-safe@0.3.0, with installed tar@7.5.19 and brace-expansion@5.0.7.

Signed-off-by: Julie Yaunches jyaunches@nvidia.com

Summary by CodeRabbit

  • Bug Fixes

    • Updated OpenClaw 2026.6.10 installation to use a remediated package archive with verified dependency metadata.
    • Improved archive validation and integrity checks during OpenClaw and plugin packaging.
    • Added post-install dependency diagnostics for the affected OpenClaw release.
  • Documentation

    • Updated dependency review findings, remediation coverage, audit results, and residual-risk details.
  • Tests

    • Added coverage for archive rebuilding, dependency graph updates, integrity validation, and Docker installation flows.

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
@copy-pr-bot

copy-pr-bot Bot commented Jul 21, 2026

Copy link
Copy Markdown

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

coderabbitai Bot commented Jul 21, 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
📝 Walkthrough

Walkthrough

Adds a validated OpenClaw npm archive remediation helper, integrates it into archive packaging and Docker installation for version 2026.6.10, updates provenance recipes, and adds dependency-graph, wiring, staging, and security-contract coverage.

Changes

OpenClaw remediation flow

Layer / File(s) Summary
Remediation engine
scripts/lib/openclaw-npm-remediation.mts
Adds boundary-checked archive extraction, dependency graph patching, integrity validation, repacking, and CLI/API entrypoints for core and plugin packages.
Build pipeline integration
scripts/audit-reviewed-npm-graph.mts, src/lib/messaging/applier/build/messaging-build-applier.mts, src/lib/sandbox/build-context.ts
Runs remediation after reviewed archive creation and stages the remediation helper for sandbox builds.
Image and provenance wiring
Dockerfile, Dockerfile.base, agents/hermes/Dockerfile
Copies the helper into images, applies it for OpenClaw 2026.6.10, records the selected lifecycle recipe, runs post-install diagnostics, and hardens helper permissions.
Validation and security contracts
test/openclaw-npm-remediation.test.ts, test/openclaw-dependency-review.test.ts, test/openclaw-integrity-pin-suite.ts, test/messaging-build-applier*.test.ts, test/sandbox-build-context.test.ts, test/fetch-guard-patch-regression.test.ts, docs/security/..., .github/workflows/base-image.yaml, ci/source-shape-test-budget.json
Tests and documentation cover graph mutations, baseline rejection, archive rebuilding, remediation wiring, provenance recipes, helper staging, workflow triggering, and security review assertions.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ReviewedArchivePacker
  participant OpenClawRemediation
  participant NpmInstall
  ReviewedArchivePacker->>OpenClawRemediation: provide packed archive and package spec
  OpenClawRemediation->>OpenClawRemediation: patch and validate dependency graph
  OpenClawRemediation->>NpmInstall: return remediated archive path
  NpmInstall->>NpmInstall: install resulting archive
Loading

Possibly related issues

Possibly related PRs

  • NVIDIA/NemoClaw#7280 — Integrates the same remediation helper into OpenClaw plugin packaging and reviewed-archive installation flows.

Suggested labels: bug-fix, dependencies

Suggested reviewers: cv

🚥 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 summarizes the main change: security remediation of OpenClaw 2026.6.10 transitive dependencies.
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
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/fix-openclaw-2026-6-10-transitives

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

@github-code-quality

github-code-quality Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit b26cf68 in the codex/fix-openclaw-2... branch remains at 96%, unchanged from commit 65d78ee in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit b26cf68 in the codex/fix-openclaw-2... branch remains at 80%, unchanged from commit 65d78ee in the main branch.

Show a code coverage summary of the most impacted files.
File main 65d78ee codex/fix-openclaw-2... b26cf68 +/-
src/lib/onboard...ider-cleanup.ts 100% 88% -12%
src/lib/platform.ts 89% 84% -5%
src/lib/sandbox...uild-context.ts 42% 41% -1%
src/lib/state/sandbox.ts 87% 87% 0%
src/lib/sandbox-base-image.ts 93% 93% 0%
src/lib/inference/local.ts 80% 80% 0%
src/lib/inferen...lama-version.ts 100% 100% 0%
src/lib/messagi...nnels/policy.ts 100% 100% 0%
src/lib/inferen...time-context.ts 92% 93% +1%
src/lib/sandbox...ld-heartbeat.ts 0% 100% +100%

Updated July 21, 2026 16:24 UTC

@jyaunches
jyaunches marked this pull request as ready for review July 21, 2026 03:54
@github-actions

github-actions Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Informational

Advisor assessment: Informational / high confidence
Next action: Review the warnings below.
Findings: 0 blockers · 2 warnings · 0 suggestions
Status: Canonical ledger: 0 blocker(s), 2 warning(s), 0 suggestion(s).

Model lanes

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

Nemotron output stays in workflow artifacts and does not change the assessment above.

E2E guidance

Advisory only. E2E / PR Gate selects and runs jobs independently.

Recommended E2E: cloud-onboard, credential-sanitization, full-e2e, hermes-e2e, security-posture, channels-add-remove, channels-stop-start, onboard-repair, onboard-resume, rebuild-hermes, rebuild-hermes-stale-base, state-backup-restore, upgrade-stale-sandbox

2 optional E2E recommendations
  • sandbox-rebuild
  • messaging-providers
2 warnings · 0 suggestions

Warnings

Warnings do not block.

PRA-1 Warning — Bound the authoritative local-build budget exception with retirement criteria

  • Location: ci/full-e2e-cold-path-calibration.json:2
  • Category: correctness
  • Problem: The new authoritativeLocalBaseBuildAdjustment permanently permits an additional 31 seconds whenever the installer output contains the local-base-build marker, but the calibration record and associated schema test provide no condition to remove or recalculate this exception. The analogous validationAdjustment records its source boundary and a structured five-sample retirement condition.
  • Impact: A local base build that becomes slower over time can continue to pass the cold-path regression gate under a stale exception, masking an onboarding performance regression.
  • Recommendation: Record why compatible published-base availability cannot be made the source fix now, and add a concrete retirement/recalibration condition for authoritativeLocalBaseBuildAdjustment; enforce that condition in the calibration contract test.
  • Verification: Inspect ci/full-e2e-cold-path-calibration.json and test/onboard-performance-config-schema.test.ts: the existing validationAdjustment has a retirement object, while authoritativeLocalBaseBuildAdjustment does not.
  • Test coverage: Extend test/onboard-performance-config-schema.test.ts to require and validate the local-build adjustment's source boundary and retirement/recalibration contract, including rejection when either is absent.
  • Evidence: ci/full-e2e-cold-path-calibration.json:2 adds authoritativeLocalBaseBuildAdjustment with runs and derivedAllowanceMs but no retirement/source-fix fields. test/onboard-performance-config-schema.test.ts:479-518 validates the allowance calculation and same-head runs but has no retirement assertion. The adjacent validationAdjustment test at test/onboard-performance-config-schema.test.ts:363-429 requires a structured retirement condition.

PRA-2 Warning — Retained production advisories remain below the audit gate

  • Location: docs/security/openclaw-2026.6.10-dependency-review.md:62
  • Category: security
  • Problem: The updated dependency review records a retained moderate protobufjs advisory in the diagnostics OTEL and WhatsApp production plugin graphs and a retained low body-parser advisory in Slack and Teams, while the configured audit threshold is high. Those production dependencies therefore pass the new audit gate despite known upstream fixes.
  • Impact: NemoClaw images and reviewed messaging plugin installations can continue to ship known vulnerable dependency versions without CI requiring an explicit remediation decision at the severity of the retained advisory.
  • Recommendation: Remediate the affected reviewed plugin shrinkwraps in this change, or tighten the production audit policy to fail at the highest retained advisory severity with a narrowly documented, time-bounded exception if remediation cannot safely be completed now.
  • Verification: Read docs/security/openclaw-2026.6.10-dependency-review.md:62-66 and ci/reviewed-npm-audit.json:4; confirm the named advisories remain in production graphs while the gate is set to high.
  • Test coverage: Add a production-graph audit policy regression that fails when a known retained moderate-or-higher advisory is present without a reviewed, expiring exception tied to its affected plugin graph.
  • Evidence: docs/security/openclaw-2026.6.10-dependency-review.md:62-66 identifies GHSA-v422-hmwv-36x6 in body-parser and GHSA-j3f2-48v5-ccww in protobufjs as retained findings in reviewed production plugin graphs. docs/security/openclaw-2026.6.10-dependency-review.md:60 states that the configured high threshold passes. ci/reviewed-npm-audit.json:4 sets severityThreshold to high.

Workflow run details

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

@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: 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 `@scripts/lib/openclaw-npm-remediation.mts`:
- Around line 522-527: The CLI path around buildRemediatedOpenClawArchive must
pass the pinned remediation digest. Resolve the selected package’s metadata from
REMEDIATIONS using the packageSpec argument and provide its
expectedPatchedMetadataIntegrity value, matching
remediateReviewedOpenClawArchive’s guarded behavior.

In `@test/openclaw-integrity-pin-suite.ts`:
- Around line 228-240: The remediation helper writes remediated-openclaw.tgz,
but the installation assertions currently accept the original npm pack archive.
Update the success checks in the OpenClaw installation test to verify every
install command consumes remediated-openclaw.tgz and rejects the source archive,
using observable command/output data rather than broad mocks.

In `@test/openclaw-npm-remediation.test.ts`:
- Around line 139-166: Extend the remediation tests to inspect the patched
package.json through the existing public-boundary test flow, not only
npm-shrinkwrap.json. For both remediation paths, assert the expected plugin
axios and bundledDependencies metadata and the core tar metadata, ensuring
incomplete archive patches cannot pass.
🪄 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: 4265c642-5274-4729-994b-905ec5406fd6

📥 Commits

Reviewing files that changed from the base of the PR and between d5fa194 and c96de62.

📒 Files selected for processing (13)
  • Dockerfile
  • Dockerfile.base
  • agents/hermes/Dockerfile
  • scripts/audit-reviewed-npm-graph.mts
  • scripts/lib/openclaw-npm-remediation.mts
  • src/lib/messaging/applier/build/messaging-build-applier.mts
  • src/lib/sandbox/build-context.ts
  • test/messaging-build-applier-integrity.test.ts
  • test/messaging-build-applier.test.ts
  • test/openclaw-dependency-review.test.ts
  • test/openclaw-integrity-pin-suite.ts
  • test/openclaw-npm-remediation.test.ts
  • test/sandbox-build-context.test.ts

Comment thread scripts/lib/openclaw-npm-remediation.mts
Comment thread test/openclaw-integrity-pin-suite.ts
Comment thread test/openclaw-npm-remediation.test.ts
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ⚠️ Some tests cancelled — partial pass

Run: 29800934142
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: (default — all default-enabled tests; explicit-only tests openshell-gateway-auth-contract, mcp-bridge-dev, hermes-gpu-startup, sandbox-rlimits-connect, and jetson-nvmap-gpu are skipped unless selected)
Summary: 10 passed, 0 failed, 63 cancelled, 5 skipped, 0 unknown

Test Result Total wall clock time
agent-turn-latency ⚠️ cancelled 1m 49s
bedrock-runtime-compatible-anthropic ⚠️ cancelled 1m 51s
bootstrap-install-smoke ⚠️ cancelled 1m 48s
brave-search ✅ success 47s
channels-add-remove ⚠️ cancelled 1m 47s
channels-stop-start ⚠️ cancelled 1m 50s
cloud-inference ⚠️ cancelled 1m 49s
cloud-onboard ⚠️ cancelled 1m 51s
common-egress-agent ⚠️ cancelled 1m 49s
concurrent-gateway-ports ⚠️ cancelled 1m 48s
credential-migration ⚠️ cancelled 1m 49s
credential-sanitization ⚠️ cancelled 1m 49s
cron-preflight-inference-local ⚠️ cancelled 1m 48s
device-auth-health ⚠️ cancelled 1m 50s
diagnostics ⚠️ cancelled 1m 48s
docs-validation ⚠️ cancelled 1m 47s
double-onboard ⚠️ cancelled 1m 49s
full-e2e ⚠️ cancelled 1m 50s
gateway-drift-preflight ✅ success 45s
gateway-guard-recovery ⚠️ cancelled 1m 48s
gateway-health-honest ✅ success 55s
generate-matrix ✅ success 34s
gpu-double-onboard ⚠️ cancelled 1m 35s
gpu-e2e ⚠️ cancelled 46s
hermes-dashboard ⚠️ cancelled 1m 48s
hermes-discord ⚠️ cancelled 1m 48s
hermes-e2e ⚠️ cancelled 1m 49s
hermes-gpu-startup ⏭️ skipped
hermes-inference-switch ⚠️ cancelled 1m 49s
hermes-shields-config ⚠️ cancelled 1m 48s
hermes-slack ⚠️ cancelled 1m 25s
inference-routing ⚠️ cancelled 1m 49s
issue-2478-crash-loop-recovery ⚠️ cancelled 1m 49s
issue-4434-tui-unreachable-inference ✅ success 1m 5s
issue-4462-scope-upgrade-approval ⚠️ cancelled 1m 48s
jetson-nvmap-gpu ⏭️ skipped
kimi-inference-compat ⚠️ cancelled 1m 50s
live ⚠️ cancelled 1m 53s
mcp-bridge ⚠️ cancelled 1m 51s
mcp-bridge-dev ⏭️ skipped
messaging-compatible-endpoint ⚠️ cancelled 1m 50s
messaging-providers ⚠️ cancelled 1m 49s
model-router-provider-routed-inference ⚠️ cancelled 1m 50s
network-policy ⚠️ cancelled 1m 51s
ollama-auth-proxy ⚠️ cancelled 1m 48s
onboard-negative-paths ✅ success 59s
onboard-repair ⚠️ cancelled 1m 49s
onboard-resume ⚠️ cancelled 1m 49s
openclaw-discord-pairing ⚠️ cancelled 1m 47s
openclaw-inference-switch ⚠️ cancelled 1m 50s
openclaw-plugin-runtime-exdev ⚠️ cancelled 1m 48s
openclaw-skill-cli ⚠️ cancelled 1m 50s
openclaw-slack-pairing ⚠️ cancelled 1m 48s
openclaw-tui-chat-correlation ⚠️ cancelled 1m 48s
openshell-gateway-auth-contract ⏭️ skipped
openshell-gateway-upgrade ⚠️ cancelled 1m 51s
openshell-version-pin ✅ success 48s
overlayfs-autofix ✅ success 49s
rebuild-hermes ⚠️ cancelled 1m 48s
rebuild-hermes-stale-base ⚠️ cancelled 1m 49s
rebuild-openclaw ⚠️ cancelled 1m 49s
sandbox-operations ⚠️ cancelled 1m 50s
sandbox-rebuild ⚠️ cancelled 1m 50s
sandbox-rlimits-connect ⏭️ skipped
sandbox-survival ⚠️ cancelled 1m 50s
security-posture ⚠️ cancelled 1m 49s
sessions-agents-cli ⚠️ cancelled 1m 49s
shields-config ⚠️ cancelled 1m 48s
skill-agent ⚠️ cancelled 1m 50s
snapshot-commands ⚠️ cancelled 1m 49s
spark-install ⚠️ cancelled 1m 48s
state-backup-restore ⚠️ cancelled 1m 49s
telegram-injection ⚠️ cancelled 1m 48s
token-rotation ⚠️ cancelled 1m 50s
tunnel-lifecycle ⚠️ cancelled 1m 47s
ubuntu-repo-cli-smoke ✅ success 36s
upgrade-stale-sandbox ⚠️ cancelled 1m 50s
vllm-docker-storage ✅ success 43s

Explicit-only jobs skipped: openshell-gateway-auth-contract (default dispatch excludes the resource-heavy OpenShell auth-contract probe unless selected; validate with jobs=openshell-gateway-auth-contract or targets=openshell-gateway-auth-contract), mcp-bridge-dev (default dispatch excludes moving OpenShell dev artifacts unless explicitly selected; validate with jobs=mcp-bridge-dev or targets=mcp-bridge-dev), hermes-gpu-startup (default dispatch excludes this explicit-only job unless selected; validate with jobs=hermes-gpu-startup or targets=hermes-gpu-startup), sandbox-rlimits-connect (default dispatch excludes the destructive rlimit fork/connect probe unless selected; validate with jobs=sandbox-rlimits-connect or targets=sandbox-rlimits-connect), jetson-nvmap-gpu (default dispatch excludes Jetson; explicit dispatch requires allow_jetson_runner_queue=true after confirming an online Jetson runner because queued jobs do not honor timeout-minutes before assignment; validate with jobs=jetson-nvmap-gpu or targets=jetson-nvmap-gpu).

@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 `@docs/security/openclaw-2026.6.10-dependency-review.md`:
- Around line 49-54: Update the text immediately before the command in the
dependency review document to add a complete imperative sentence addressing the
reader directly in active voice and present tense. Ensure every sentence in that
section ends with a period, while preserving the command unchanged.
🪄 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: bfbbb5d6-4961-4cad-a322-0c5ecce33b68

📥 Commits

Reviewing files that changed from the base of the PR and between c96de62 and b3fb226.

📒 Files selected for processing (8)
  • .github/workflows/base-image.yaml
  • ci/source-shape-test-budget.json
  • docs/security/openclaw-2026.6.10-dependency-review.md
  • scripts/lib/openclaw-npm-remediation.mts
  • test/fetch-guard-patch-regression.test.ts
  • test/openclaw-dependency-review.test.ts
  • test/openclaw-integrity-pin-suite.ts
  • test/openclaw-npm-remediation.test.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • test/openclaw-integrity-pin-suite.ts
  • test/openclaw-dependency-review.test.ts
  • scripts/lib/openclaw-npm-remediation.mts

Comment thread docs/security/openclaw-2026.6.10-dependency-review.md
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ⚠️ Some tests cancelled — partial pass

Run: 29801016966
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: (default — all default-enabled tests; explicit-only tests openshell-gateway-auth-contract, mcp-bridge-dev, hermes-gpu-startup, sandbox-rlimits-connect, and jetson-nvmap-gpu are skipped unless selected)
Summary: 12 passed, 0 failed, 61 cancelled, 5 skipped, 0 unknown

Test Result Total wall clock time
agent-turn-latency ⚠️ cancelled 2m 46s
bedrock-runtime-compatible-anthropic ⚠️ cancelled 2m 50s
bootstrap-install-smoke ⚠️ cancelled 2m 47s
brave-search ✅ success 43s
channels-add-remove ⚠️ cancelled 2m 46s
channels-stop-start ⚠️ cancelled 2m 48s
cloud-inference ⚠️ cancelled 2m 46s
cloud-onboard ⚠️ cancelled 2m 46s
common-egress-agent ⚠️ cancelled 2m 47s
concurrent-gateway-ports ⚠️ cancelled 2m 47s
credential-migration ⚠️ cancelled 2m 47s
credential-sanitization ⚠️ cancelled 2m 48s
cron-preflight-inference-local ⚠️ cancelled 2m 46s
device-auth-health ⚠️ cancelled 2m 48s
diagnostics ⚠️ cancelled 2m 46s
docs-validation ✅ success 1m 46s
double-onboard ⚠️ cancelled 2m 46s
full-e2e ⚠️ cancelled 2m 45s
gateway-drift-preflight ✅ success 50s
gateway-guard-recovery ⚠️ cancelled 2m 47s
gateway-health-honest ✅ success 47s
generate-matrix ✅ success 21s
gpu-double-onboard ⚠️ cancelled 1m 44s
gpu-e2e ⚠️ cancelled 1m 46s
hermes-dashboard ⚠️ cancelled 2m 46s
hermes-discord ⚠️ cancelled 2m 46s
hermes-e2e ⚠️ cancelled 2m 45s
hermes-gpu-startup ⏭️ skipped
hermes-inference-switch ⚠️ cancelled 2m 47s
hermes-shields-config ⚠️ cancelled 2m 47s
hermes-slack ⚠️ cancelled 2m 17s
inference-routing ⚠️ cancelled 2m 46s
issue-2478-crash-loop-recovery ⚠️ cancelled 2m 48s
issue-4434-tui-unreachable-inference ✅ success 56s
issue-4462-scope-upgrade-approval ⚠️ cancelled 2m 46s
jetson-nvmap-gpu ⏭️ skipped
kimi-inference-compat ⚠️ cancelled 2m 46s
live ⚠️ cancelled 2m 48s
mcp-bridge ⚠️ cancelled 2m 49s
mcp-bridge-dev ⏭️ skipped
messaging-compatible-endpoint ⚠️ cancelled 2m 46s
messaging-providers ⚠️ cancelled 2m 46s
model-router-provider-routed-inference ⚠️ cancelled 2m 47s
network-policy ⚠️ cancelled 2m 45s
ollama-auth-proxy ✅ success 1m 29s
onboard-negative-paths ✅ success 56s
onboard-repair ⚠️ cancelled 2m 46s
onboard-resume ⚠️ cancelled 2m 46s
openclaw-discord-pairing ⚠️ cancelled 2m 47s
openclaw-inference-switch ⚠️ cancelled 2m 48s
openclaw-plugin-runtime-exdev ⚠️ cancelled 2m 47s
openclaw-skill-cli ⚠️ cancelled 2m 45s
openclaw-slack-pairing ⚠️ cancelled 2m 47s
openclaw-tui-chat-correlation ⚠️ cancelled 2m 46s
openshell-gateway-auth-contract ⏭️ skipped
openshell-gateway-upgrade ⚠️ cancelled 2m 47s
openshell-version-pin ✅ success 39s
overlayfs-autofix ✅ success 42s
rebuild-hermes ⚠️ cancelled 2m 47s
rebuild-hermes-stale-base ⚠️ cancelled 2m 46s
rebuild-openclaw ⚠️ cancelled 2m 46s
sandbox-operations ⚠️ cancelled 2m 46s
sandbox-rebuild ⚠️ cancelled 2m 46s
sandbox-rlimits-connect ⏭️ skipped
sandbox-survival ⚠️ cancelled 2m 48s
security-posture ⚠️ cancelled 2m 47s
sessions-agents-cli ⚠️ cancelled 2m 47s
shields-config ⚠️ cancelled 2m 45s
skill-agent ⚠️ cancelled 2m 46s
snapshot-commands ⚠️ cancelled 2m 46s
spark-install ⚠️ cancelled 2m 48s
state-backup-restore ⚠️ cancelled 2m 47s
telegram-injection ⚠️ cancelled 2m 46s
token-rotation ⚠️ cancelled 2m 47s
tunnel-lifecycle ⚠️ cancelled 2m 47s
ubuntu-repo-cli-smoke ✅ success 41s
upgrade-stale-sandbox ⚠️ cancelled 2m 46s
vllm-docker-storage ✅ success 40s

Explicit-only jobs skipped: openshell-gateway-auth-contract (default dispatch excludes the resource-heavy OpenShell auth-contract probe unless selected; validate with jobs=openshell-gateway-auth-contract or targets=openshell-gateway-auth-contract), mcp-bridge-dev (default dispatch excludes moving OpenShell dev artifacts unless explicitly selected; validate with jobs=mcp-bridge-dev or targets=mcp-bridge-dev), hermes-gpu-startup (default dispatch excludes this explicit-only job unless selected; validate with jobs=hermes-gpu-startup or targets=hermes-gpu-startup), sandbox-rlimits-connect (default dispatch excludes the destructive rlimit fork/connect probe unless selected; validate with jobs=sandbox-rlimits-connect or targets=sandbox-rlimits-connect), jetson-nvmap-gpu (default dispatch excludes Jetson; explicit dispatch requires allow_jetson_runner_queue=true after confirming an online Jetson runner because queued jobs do not honor timeout-minutes before assignment; validate with jobs=jetson-nvmap-gpu or targets=jetson-nvmap-gpu).

@jyaunches jyaunches self-assigned this Jul 21, 2026

@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.

🧹 Nitpick comments (1)
test/openclaw-npm-remediation.test.ts (1)

419-421: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicated "extract observed integrity, then rebuild" scaffolding across the core and plugin tests.

The try/catch block that regex-extracts got (sha512-\S+) from the deliberate-mismatch error and reuses it for a second buildRemediatedOpenClawArchive call is copy-pasted between the core archive test (around line 419) and the plugin archive test (lines 460-469). Extracting a small shared helper, e.g. rebuildWithObservedIntegrity(request), would remove this duplication and reduce drift risk as more remediation package types are added.

As per path instructions, prefer tests built on shared, reusable assertions over duplicated implementation-detail parsing where practical.

♻️ Suggested helper
function rebuildWithObservedIntegrity(
  request: Parameters<typeof buildRemediatedOpenClawArchive>[0],
): ReturnType<typeof buildRemediatedOpenClawArchive> {
  let metadataIntegrity = "";
  try {
    buildRemediatedOpenClawArchive({
      ...request,
      expectedPatchedMetadataIntegrity: "sha512-deliberate-mismatch",
    });
  } catch (error) {
    const message = String(error);
    expect(message).toMatch(/got sha512-\S+/u);
    metadataIntegrity = message.match(/got (sha512-\S+)/u)?.[1] ?? "";
  }
  expect(metadataIntegrity).toMatch(/^sha512-/u);
  return buildRemediatedOpenClawArchive({
    ...request,
    expectedPatchedMetadataIntegrity: metadataIntegrity,
  });
}

Also applies to: 460-469

🤖 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 `@test/openclaw-npm-remediation.test.ts` around lines 419 - 421, Extract the
duplicated observed-integrity retry logic from the core and plugin archive tests
into a shared rebuildWithObservedIntegrity helper near the test utilities. Have
it perform the deliberate-mismatch build, validate and extract the observed
sha512 integrity, then call buildRemediatedOpenClawArchive again with that
integrity; replace both duplicated try/catch blocks with this helper.

Source: Path instructions

🤖 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 `@test/openclaw-npm-remediation.test.ts`:
- Around line 419-421: Extract the duplicated observed-integrity retry logic
from the core and plugin archive tests into a shared
rebuildWithObservedIntegrity helper near the test utilities. Have it perform the
deliberate-mismatch build, validate and extract the observed sha512 integrity,
then call buildRemediatedOpenClawArchive again with that integrity; replace both
duplicated try/catch blocks with this helper.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: bce2aa80-2e49-4719-a426-3b5735f6418b

📥 Commits

Reviewing files that changed from the base of the PR and between a98e9b9 and 223aea5.

📒 Files selected for processing (2)
  • ci/source-shape-test-budget.json
  • test/openclaw-npm-remediation.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • ci/source-shape-test-budget.json

@apurvvkumaria apurvvkumaria 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.

Requesting changes for one production-blocking issue at current head 223aea520.

Blocker: the Docker-style global install has no usable tar package

The earlier nested tar@7.5.13 problem is gone, but the replacement archive still does not produce a valid production dependency topology. I rebuilt the reviewed archive and installed it with the exact Dockerfile-style command under the pinned Node 22/npm 10 base. npm install -g --ignore-scripts succeeds and openclaw --version passes, but:

npm ls -g tar --all
npm error code ELSPROBLEMS
invalid: tar@ /usr/local/lib/node_modules/openclaw/node_modules/tar

That tar directory is empty, has no package.json, and resolving tar from OpenClaw throws MODULE_NOT_FOUND. OpenClaw runtime code imports tar, so this can fail at runtime despite the version smoke test passing.

The remediation rewrites both requirements to 7.5.19 and physically bundles the patched fs-safe package, but it does not fetch/copy/bundle tar@7.5.19 itself. Global npm deduplication across that bundled dependency boundary leaves an empty stub. The reviewed graph audit uses a local install, where tar hoists successfully, so its passing result does not exercise this production failure. Even auditing the broken global tree does not report the missing module.

Before merge, please:

  1. Materialize the SRI-pinned tar@7.5.19 package into a valid global-install topology.
  2. Add a production-parity regression that runs npm install -g with the pinned Node/npm image, then requires npm ls -g tar --all to succeed, resolves tar from OpenClaw, and asserts every installed OpenClaw tar copy is 7.5.19.

I am not blocking this emergency mitigation on the documented low/moderate advisories, generalized completed-image scanning, archive resource ceilings, or fuller base-input provenance binding; those can be handled in the planned fix-forward work.

@cjagwani cjagwani self-assigned this Jul 21, 2026
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
@jyaunches

Copy link
Copy Markdown
Contributor Author

The production-blocking global-install topology issue from review 4741268993 is fixed in c9aa63c. The remediation now removes @openclaw/fs-safe duplicate optional tar/jszip declarations so npm retains OpenClaw direct jszip@3.10.1 and remediated tar@7.5.19. A real Node 22.22.2 global install imports the clawhub module successfully, and both Docker image paths now fail closed on an invalid installed dependency tree. Focused tests, docs, source-shape, hooks/check:diff, and the exact reviewed dependency audit are green; final-head E2E run 29802319965 is in progress.

@jyaunches
jyaunches requested a review from apurvvkumaria July 21, 2026 04:50
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
@apurvvkumaria

apurvvkumaria commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

Update: #7289 now validates this PR's current-image installed OpenClaw dependency graph only. #7289 is downstream and does not block #7286 from merging. After #7286 lands, #7289 will be updated or rebased onto that main revision and its opt-in container lane will be run against the exact final image digest.

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some tests failed

Run: 29828082831
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: rebuild-hermes
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
rebuild-hermes ❌ failure 34m 10s

Failed tests: rebuild-hermes. Check the workflow run for all logs and artifacts.

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some tests failed

Run: 29830832493
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: rebuild-hermes
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
rebuild-hermes ❌ failure 34m 18s

Failed tests: rebuild-hermes. Check the workflow run for all logs and artifacts.

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some tests failed

Run: 29833691485
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: rebuild-hermes
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
rebuild-hermes ❌ failure 34m 59s

Failed tests: rebuild-hermes. Check the workflow run for all logs and artifacts.

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested tests passed

Run: 29837105130
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: rebuild-hermes
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
rebuild-hermes ✅ success 37m 22s

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some tests failed

Run: 29841116860
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: security-posture
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
security-posture ❌ failure 8m 57s

Failed tests: security-posture. Check the workflow run for all logs and artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested tests passed

Run: 29841030448
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: hermes-dashboard,hermes-discord
Summary: 2 passed, 0 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
hermes-dashboard ✅ success 12m 32s
hermes-discord ✅ success 9m 14s

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some tests failed

Run: 29842118854
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: hermes-inference-switch
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
hermes-inference-switch ❌ failure 8m 44s

Failed tests: hermes-inference-switch. Check the workflow run for all logs and artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested tests passed

Run: 29842321123
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: hermes-shields-config
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
hermes-shields-config ✅ success 7m 53s

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some tests failed

Run: 29842856969
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: hermes-inference-switch
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
hermes-inference-switch ❌ failure 8m 41s

Failed tests: hermes-inference-switch. Check the workflow run for all logs and artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some tests failed

Run: 29841990305
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: security-posture
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
security-posture ❌ failure 25m 21s

Failed tests: security-posture. Check the workflow run for all logs and artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some tests failed

Run: 29843686345
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: hermes-inference-switch
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
hermes-inference-switch ❌ failure 9m 59s

Failed tests: hermes-inference-switch. Check the workflow run for all logs and artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some tests failed

Run: 29840145320
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: (default — all default-enabled tests; explicit-only tests openshell-gateway-auth-contract, mcp-bridge-dev, hermes-gpu-startup, sandbox-rlimits-connect, and jetson-nvmap-gpu are skipped unless selected)
Summary: 66 passed, 7 failed, 0 cancelled, 5 skipped, 0 unknown

Test Result Total wall clock time
agent-turn-latency ✅ success 12m 33s
bedrock-runtime-compatible-anthropic ❌ failure 49m 1s
bootstrap-install-smoke ✅ success 5m 45s
brave-search ✅ success 50s
channels-add-remove ✅ success 9m 39s
channels-stop-start ✅ success 23m 52s
cloud-inference ✅ success 5m 47s
cloud-onboard ✅ success 7m 1s
common-egress-agent ❌ failure 54m 2s
concurrent-gateway-ports ✅ success 6m 34s
credential-migration ✅ success 5m 11s
credential-sanitization ✅ success 5m 44s
cron-preflight-inference-local ✅ success 6m 23s
device-auth-health ✅ success 5m 53s
diagnostics ✅ success 6m 29s
docs-validation ✅ success 1m 38s
double-onboard ✅ success 10m 18s
full-e2e ✅ success 6m 2s
gateway-drift-preflight ✅ success 47s
gateway-guard-recovery ✅ success 7m 48s
gateway-health-honest ✅ success 44s
generate-matrix ✅ success 33s
gpu-double-onboard ✅ success 8m 26s
gpu-e2e ✅ success 7m 5s
hermes-dashboard ❌ failure 7m 48s
hermes-discord ❌ failure 8m 27s
hermes-e2e ✅ success 8m 58s
hermes-gpu-startup ⏭️ skipped
hermes-inference-switch ❌ failure 22m 37s
hermes-shields-config ❌ failure 24m 11s
hermes-slack ✅ success 3m 49s
inference-routing ✅ success 3m 32s
issue-2478-crash-loop-recovery ✅ success 14m 39s
issue-4434-tui-unreachable-inference ✅ success 1m 5s
issue-4462-scope-upgrade-approval ✅ success 7m 44s
jetson-nvmap-gpu ⏭️ skipped
kimi-inference-compat ✅ success 5m 3s
live ✅ success 11m 31s
mcp-bridge ✅ success 20m 56s
mcp-bridge-dev ⏭️ skipped
messaging-compatible-endpoint ✅ success 6m 7s
messaging-providers ✅ success 13m 50s
model-router-provider-routed-inference ✅ success 7m 52s
network-policy ✅ success 8m 42s
ollama-auth-proxy ✅ success 1m 31s
onboard-negative-paths ✅ success 54s
onboard-repair ✅ success 5m 28s
onboard-resume ✅ success 7m 3s
openclaw-discord-pairing ✅ success 10m 7s
openclaw-inference-switch ✅ success 8m 28s
openclaw-plugin-runtime-exdev ✅ success 30m 59s
openclaw-skill-cli ✅ success 6m 10s
openclaw-slack-pairing ✅ success 7m 42s
openclaw-tui-chat-correlation ✅ success 5m 47s
openshell-gateway-auth-contract ⏭️ skipped
openshell-gateway-upgrade ✅ success 19m 28s
openshell-version-pin ✅ success 43s
overlayfs-autofix ✅ success 41s
rebuild-hermes ✅ success 34m 29s
rebuild-hermes-stale-base ✅ success 44m 44s
rebuild-openclaw ✅ success 8m 8s
sandbox-operations ✅ success 8m 20s
sandbox-rebuild ✅ success 6m 21s
sandbox-rlimits-connect ⏭️ skipped
sandbox-survival ✅ success 6m 14s
security-posture ❌ failure 8m 43s
sessions-agents-cli ✅ success 6m 42s
shields-config ✅ success 6m 55s
skill-agent ✅ success 5m 3s
snapshot-commands ✅ success 5m 26s
spark-install ✅ success 4m 53s
state-backup-restore ✅ success 6m 25s
telegram-injection ✅ success 6m 10s
token-rotation ✅ success 17m 55s
tunnel-lifecycle ✅ success 5m 51s
ubuntu-repo-cli-smoke ✅ success 40s
upgrade-stale-sandbox ✅ success 8m 55s
vllm-docker-storage ✅ success 35s

Explicit-only jobs skipped: openshell-gateway-auth-contract (default dispatch excludes the resource-heavy OpenShell auth-contract probe unless selected; validate with jobs=openshell-gateway-auth-contract or targets=openshell-gateway-auth-contract), mcp-bridge-dev (default dispatch excludes moving OpenShell dev artifacts unless explicitly selected; validate with jobs=mcp-bridge-dev or targets=mcp-bridge-dev), hermes-gpu-startup (default dispatch excludes this explicit-only job unless selected; validate with jobs=hermes-gpu-startup or targets=hermes-gpu-startup), sandbox-rlimits-connect (default dispatch excludes the destructive rlimit fork/connect probe unless selected; validate with jobs=sandbox-rlimits-connect or targets=sandbox-rlimits-connect), jetson-nvmap-gpu (default dispatch excludes Jetson; explicit dispatch requires allow_jetson_runner_queue=true after confirming an online Jetson runner because queued jobs do not honor timeout-minutes before assignment; validate with jobs=jetson-nvmap-gpu or targets=jetson-nvmap-gpu).

Failed tests: bedrock-runtime-compatible-anthropic, common-egress-agent, hermes-dashboard, hermes-discord, hermes-inference-switch, hermes-shields-config, security-posture. Check the workflow run for all logs and artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some tests failed

Run: 29844272101
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: bedrock-runtime-compatible-anthropic
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
bedrock-runtime-compatible-anthropic ❌ failure 6m 12s

Failed tests: bedrock-runtime-compatible-anthropic. Check the workflow run for all logs and artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested tests passed

Run: 29844141664
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: security-posture
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
security-posture ✅ success 9m 0s

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested tests passed

Run: 29844646319
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: common-egress-agent
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
common-egress-agent ✅ success 10m 38s

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested tests passed

Run: 29844868678
Workflow ref: codex/fix-openclaw-2026-6-10-transitives
Requested targets: (default — all supported)
Requested test IDs: bedrock-runtime-compatible-anthropic
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result Total wall clock time
bedrock-runtime-compatible-anthropic ✅ success 9m 16s

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
@jyaunches
jyaunches merged commit 2ad613d into main Jul 21, 2026
42 of 45 checks passed
@jyaunches
jyaunches deleted the codex/fix-openclaw-2026-6-10-transitives branch July 21, 2026 16:47
jyaunches added a commit that referenced this pull request Jul 21, 2026
## Summary

Complete the planned v0.0.90 changelog after the security remediation in
#7286 merged.
The release entry now records the remediated OpenClaw dependency
boundary and links to the detailed dependency review.

## Related Issue

Related to #5591 and follows #7286.

## Changes

- Add the OpenClaw core, Slack, and Microsoft Teams transitive
dependency remediation to the v0.0.90 summary and release bullets.
- Record fail-closed archive validation and the reviewed residual audit
findings.
- Link the detailed OpenClaw 2026.6.10 dependency review.
- Source summary: #7286 -> `docs/changelog/2026-07-20.mdx`.
- Reconciled #7316 as documentation-only coverage for existing Deep
Agents behavior; its merged source page is already the canonical record
and requires no separate release behavior entry.

## 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)

## Quality Gates

- [ ] Tests added or updated for changed behavior
- [x] Existing tests cover changed behavior — justification:
`test/changelog-docs.test.ts` validates changelog structure and links,
and the full docs build validates generated content and routes.
- [ ] Tests not applicable — justification:
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [ ] 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:
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## DGX Station Hardware Evidence

- [ ] Tested on DGX Station
- Tested commit: not applicable
- Station profile/scenario: not applicable
- Result: not applicable
- Supporting evidence: not applicable

## Verification

- [x] PR description includes a `Signed-off-by:` line and every commit
appears as `Verified` in GitHub
- [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or
`npm run check:diff` passed when hooks were skipped or unavailable
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — `npx vitest run
test/changelog-docs.test.ts`: 6/6 passed
- [x] Applicable broad gate passed — `npm run docs`: 0 errors; the two
repository-wide pre-existing Fern warnings remain
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [x] `npm run docs` builds without warnings (doc changes only) — 0
errors; the two repository-wide pre-existing Fern warnings remain
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

---

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>


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

## Summary by CodeRabbit

* **Documentation**
* Clarified inference provider routing and credential handling for
managed agent images.
  * Added migration guidance ahead of the upcoming fallback removal.
* Documented security updates for OpenClaw, Slack, and Microsoft Teams
installations, including verified package remediation and archive
validation.

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

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
apurvvkumaria added a commit that referenced this pull request Jul 21, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Add a standalone container verifier for the current OpenClaw security
remediation produced by #7286. The verifier inspects the installed
OpenClaw package graph in an offline, read-only, unprivileged container
and rejects vulnerable, stale, or internally inconsistent dependency
state.

## Related Issue

Related to #7272. The real-container lane validates the final image
produced after #7286 lands; this PR remains independently based on
`main` and has no dependency on #7276.

## Changes

- Keep always-running contract coverage for explicit opt-in, evidence
rejection, and the least-privilege Docker boundary.
- Replace the historical runtime plugin-install matrix with one
current-image probe of the globally installed `openclaw@2026.6.10`
graph.
- Require exact installed and shrinkwrap evidence for `tar@7.5.19`,
`brace-expansion@5.0.7`, `@openclaw/fs-safe@0.3.0`, and `jszip@3.10.1`.
- Require the `@openclaw/fs-safe` optional dependencies to be absent,
reject nested vulnerable copies, validate `npm ls`, and verify the
OpenClaw executable resolves to the reviewed installation.
- Run the image probe with no network, a read-only root filesystem, the
sandbox identity, no capabilities, no privilege escalation, bounded
resources, and no host mounts.

## Type of Change

- [x] 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

- [x] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [ ] Tests not applicable — justification:
- [ ] Docs updated for user-facing behavior changes
- [x] Docs not applicable — justification: this changes only an
internal, explicitly opt-in image verifier and introduces no user-facing
behavior, configuration, API, or documentation route.
- [ ] 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:
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## DGX Station Hardware Evidence

- [ ] Tested on DGX Station
- Tested commit: Not applicable
- Station profile/scenario: Not applicable
- Result: Not applicable
- Supporting evidence: Not applicable

## Verification

- [x] PR description includes a `Signed-off-by:` line and every commit
appears as `Verified` in GitHub
- [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or
`npm run check:diff` passed when hooks were skipped or unavailable
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — current exact-head contract run: 3
passed with the real-container lane intentionally skipped; current
exact-head real-container lane: 4 passed against the exact merged-#7286
CI image; an older pre-final image was correctly rejected for its stale
wrapper, `fs-safe`, and lock metadata.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result:
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

Additional checks passed: CLI typecheck, exact Vitest project
membership, test-title style, source-shape budget, test-file-size
budget, Biome, repository checks, and secret scanning.

## Merge Dependencies

This is a downstream verifier and does not block #7286 from merging.
Human review can proceed now, but this PR must not merge until all items
below are complete:

- [x] #7286 is merged into `main`.
- [x] Update this PR on the resulting `main` and run the opt-in
real-container lane against the exact final built image.
- [x] Record the merged #7286 SHA, immutable image digest, and passing
test evidence before merging this PR.

Final image evidence:

- Merged #7286 revision: `2ad613d6e9abc26859b59e5a876ddd0ee40c7ca1`
- Exact #7289 head: `48459d489c929076b47b41550b035cc90093bee1`
- CI-built image:
`nemoclaw-production@sha256:a075375409e3c81d248beafe2b627c6bd2ee5ea95f8f36a7b1c0fdb02850bc4c`
- OCI revision label: `acfa2613c7a645ae1bff21914f25d824e5fbcf62`
- Hardened real-container verifier: 4/4 passed (offline, read-only root
filesystem, unprivileged sandbox user, no capabilities, no privilege
escalation, bounded resources, and no host mounts).

---
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>


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

* **Tests**
* Added a new end-to-end security validation for an OpenClaw container
image, selected via target ID and/or explicit opt-in.
* Enforces that the image is referenced by an immutable digest (rejects
non-digest/invalid image values).
* When enabled, executes verification in a hardened container boundary
(offline, read-only, least-privilege, constrained resources) and
confirms expected dependency/lockfile integrity, including absence of
optional and nested dependencies.
* Emits and strictly validates structured JSON security evidence,
including negative contract checks for tampered results.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
Co-authored-by: Charan Jagwani <cjagwani@nvidia.com>
jyaunches added a commit that referenced this pull request Jul 24, 2026
## Summary

Reopen follow-up for #6520: `nemoclaw uninstall --yes` followed by a
curl reinstall hard-aborts at the installer strict pre-upgrade backup.
The uninstall removes the gateway registration and the sandbox container
but preserves `sandboxes.json`, so the stranded record can only ever be
skipped — and the strict gate (`NEMOCLAW_REQUIRE_ALL_SANDBOX_BACKUPS=1`,
#6114) exits 1 before the installer recovery phase
(`recover_preexisting_sandboxes_before_onboard`), the phase that knows
how to surface orphans, ever runs. The #6539 orphan classifier is wired
only into `upgrade-sandboxes`, which is downstream of the aborting
backup.

## What changed

- `backupAll()` now classifies stranded records with the existing
`classifyOrphanedRegistrySandboxes` (unobserved on the selected gateway
AND persisted binding resolving to that same gateway), gated on the new
`isSandboxContainerDefinitivelyAbsent()`. Stranded records are tracked
separately from `skipped`, so the strict gate keeps failing closed for
every genuine skip, and the run ends with `orphanedRegistrySummary` +
`orphanedRegistryRemediation` (same destroy/onboard guidance as the
recovery phase). End-to-end, the installer now proceeds to its recovery
phase, which reports the orphans and yields "completed with warnings"
instead of a hard abort.
- The exemption is two-phase (PRA-1): after the backup loop, a
confirming second pinned listing re-checks every stranded candidate —
the same #6114 confirmation idiom as `upgrade-sandboxes` — and any
candidate the gateway observes again reverts to a genuine strict skip.
Container absence is itself checked per candidate at skip time.
- `isSandboxContainerDefinitivelyAbsent()` fails closed everywhere
absence cannot be proven: non-docker or unknown driver (including a
throwing registry read), and a failed or timed-out labeled listing. The
listing is status-checked (`docker ps -a` with the OpenShell labels)
rather than reusing `findLabeledSandboxContainers`, which swallows
docker errors — a dead daemon yields `null`, never "absent" — and passes
`ignoreError` so the probe cannot `process.exit` the run.
- `backup-all` now pins its sandbox listing to the selected gateway
(same #6114 rationale and idiom as `upgrade-sandboxes`): an unpinned
list taken from a sibling gateway selection must not feed a fail-open
stranded decision.
- The exemption carries an in-code source-of-truth review block (PRA-2):
source boundary (`nemoclaw uninstall` preserves `sandboxes.json` by
design), source-fix constraint (backup-all must not reconcile the
registry; record removal is owned by the recovery phase destroy/onboard
flow), and removal condition (install/uninstall registry reconciliation,
or running the recovery phase before the strict backup).

## Constraints preserved (pinned by tests)

- Strict gate still aborts on any genuine skip (#6114 cases untouched
and green).
- A sandbox bound to a sibling gateway is never claimed stranded, even
when its container is absent on this host.
- An unobserved sandbox whose container still exists keeps the strict
abort (reconnect race).
- A stranded candidate the confirming listing observes again reverts to
a strict skip (lifecycle race).
- Real backup failures (EACCES, non-manifest paths) still
re-throw/abort.
- A registry row with a null/unknown driver keeps the strict abort —
fail closed, since absence cannot be proven for it.
- `ORPHANED_SANDBOX_MARKER` / summary / remediation wording unchanged;
install.sh greps the marker only from the recovery-phase log, which this
change does not touch.

## Review responses

- **PR Review Advisor PRA-1** (revalidate absence before exempting the
gate): addressed by the confirming second pinned listing after the
backup loop plus per-candidate absence checks at skip time; new test
pins the reappeared-candidate revert.
- **PR Review Advisor PRA-2** (bound the workaround to its source fix):
addressed with the in-code source-of-truth review block (source boundary
/ fix constraint / removal condition).
- `reviewed-npm-audit` failure is upstream-wide (also fails on #7289)
and is being remediated by #7286; this PR adds no dependencies.

## Verification

- `vitest`: `maintenance.test.ts` (32), `stopped-sandbox-backup.test.ts`
(24), `orphan-detection.test.ts`, `upgrade-sandboxes-recovery.test.ts`,
`openshell-sandbox-list.test.ts` — 108 tests green; installer lane
`test/install-orphaned-sandbox-recovery.test.ts` (8, drives strict
backup through recovery and the real install.sh orphan grep) green;
`typecheck:cli`, `lint`, and `biome check` clean. The new maintenance
tests pin `GATEWAY_PORT` so they stay green under an exported
`NEMOCLAW_GATEWAY_PORT`.
- Live end-to-end on a workstation (real docker daemon, real registry
file, openshell CLI shimmed to a healthy empty gateway, real built CLI):
stranded record → warning + `0 skipped` + exit 0 under strict mode
(through both listings); same record bound to `gatewayPort: 9999` →
strict abort exit 1 with no orphan claim; same record with a labeled
container present → strict abort exit 1 with no orphan claim.

Refs #6520

Signed-off-by: Dongni Yang <dongniy@nvidia.com>

🤖 Generated with [Claude Code](https://claude.com/claude-code)


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

* **Bug Fixes**
* Improved backup-all orphan handling: potentially stranded sandboxes
are skipped when their containers are definitively absent, then
rechecked with the same selected gateway before remediation occurs.
* Tightened strict-mode “fail closed” behavior for confirmed absent
containers, including mismatched-gateway scenarios and reappearing
candidates.
* Reduced false “container absent” results by treating Docker/registry
uncertainties as unknown rather than absent.
* **Tests**
* Expanded coverage for stranded-orphan detection and definitive
container absence (including fail-closed, reappearance, and
gateway-pinning scenarios) with improved Docker mock observability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->


## Takeover review response

- The PR Review Advisor handoff warning is addressed by an installer
boundary regression that drives strict `backup-all`, orphan recovery,
and the completed-with-warnings result in order.

## Documentation Writer Review

- [x] Documentation writer subagent reviewed the completed changes
- Result: `no-docs-needed`
- Evidence: Reviewed the complete five-file diff at `71a02caebe9f`. No
documentation paths changed; existing docs already cover strict backup
and stranded-record recovery and remediation.
- Agent: Codex Desktop
- PR: #7290
<!-- docs-review-head-sha: 71a02ca -->
<!-- docs-review-agents-blob-sha:
560ff38 -->

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>

---------

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Co-authored-by: Charan Jagwani <cjagwani@nvidia.com>
Co-authored-by: Julie Yaunches <jyaunches@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants