fix(e2e): bundle reviewed tar in legacy OpenClaw archive#7360
Conversation
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
📝 WalkthroughWalkthroughThe remediation library now uses stricter metadata integrity and bundled ChangesOpenClaw remediation
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant buildRemediatedOpenClawArchive
participant npmFixture
participant legacyArchive
buildRemediatedOpenClawArchive->>npmFixture: query reviewed tar@7.5.19 metadata
buildRemediatedOpenClawArchive->>npmFixture: pack reviewed tar@7.5.19
buildRemediatedOpenClawArchive->>legacyArchive: copy tar package and update bundled metadata
legacyArchive-->>buildRemediatedOpenClawArchive: return metadataIntegrity
Possibly related issues
Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage in commit a915d3b in the TypeScript / code-coverage/cliThe overall coverage in commit a915d3b in the Show a code coverage summary of the most impacted files.
Updated |
|
🌿 Preview your docs: https://nvidia-preview-pr-7360.docs.buildwithfern.com/nemoclaw |
There was a problem hiding this comment.
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 `@test/openclaw-npm-remediation.test.ts`:
- Around line 520-523: Remove the outer readJson call in the assertion around
the nested tar package metadata; use the object returned directly by the inner
readJson when checking the parsed package.json contents. Keep the existing path
construction and assertion expectations 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: d4423ecc-e7e0-4d6e-b63f-f8098715cbf4
📒 Files selected for processing (6)
docs/security/openclaw-2026.6.10-dependency-review.mdscripts/lib/openclaw-npm-remediation.mtstest/e2e/live/openshell-gateway-upgrade-old-installer.tstest/e2e/support/openshell-gateway-upgrade-old-installer.test.tstest/node-tar-dockerfile-contract.test.tstest/openclaw-npm-remediation.test.ts
PR Review Advisor — InformationalAdvisor assessment: Informational / medium confidence Model lanes
Nemotron output stays in workflow artifacts and does not change the assessment above. E2E guidanceAdvisory only. E2E / PR Gate selects and runs jobs independently. Recommended E2E: 3 optional E2E recommendations
1 warning · 0 suggestionsWarningsWarnings do not block.
|
|
Advisor follow-up: PRA-1 is a valid informational observation about the pre-existing lockless non-tar dependency graph in the E2E-only OpenClaw 2026.3.11 fixture. This PR intentionally completes the narrower fix requested on #7355: the vulnerable tar replacement is now exact-SRI verified and bundled, so it cannot be re-resolved from mutable registry state. Materializing and maintaining the complete historical graph would substantially expand this fix-forward PR; #5896 section 9 already owns retiring the old-base fixture strategy. Apurv is requested to review and decide whether that documented legacy limitation is acceptable for this focused follow-up. |
<!-- markdownlint-disable MD041 --> ## Summary Repair the historical gateway-upgrade adapter after [E2E main run 29890967158](https://github.com/NVIDIA/NemoClaw/actions/runs/29890967158) exposed four deterministic failures. The adapter now matches each pinned release's advisory-audit shape and stores the reviewed OpenClaw archive in the source subtree preserved by frozen optimized build contexts. ## Related Issue Follow-up to #7360. ## Changes - Bind the historical adapter to the three current gateway-upgrade consumers: `v0.0.36` and `v0.0.55` require zero advisory-audit statements, while `v0.0.74` requires one. A direct one-count rule cannot support the older frozen Dockerfiles because they predate the mcporter audit block. The E2E-support test covers every reviewed profile and rejects unknown profiles or mismatched counts. - Store the reviewed OpenClaw archive under `nemoclaw/src` and update the injected Dockerfile `COPY` path. Each frozen optimized-context builder copies that subtree, while none copies arbitrary source-root files. The E2E-support test stages the preserved subtree and verifies that the archive remains available. - Update the OpenClaw dependency review note with the exact staging path, per-release audit boundary, and `v0.0.74` signature-verification scope. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] 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 historical E2E fixture construction. The internal security review note is updated to keep the reviewed boundary accurate. - [x] 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 security review is pending on this PR. - [ ] 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 --project e2e-support test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts` passed 11 tests. - [ ] Applicable broad gate passed — the full local E2E-support project exposed one unrelated `e2e-phase-lifecycle` missing-log failure after serial confirmation. The four other parallel timeout failures passed serially. - [ ] Quality Gates section completed with required justifications or waivers — sensitive-path review is pending. - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) — the build passed with two existing Fern warnings. - [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: Prekshi Vyas <prekshiv@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved legacy gateway upgrade fixture patching with deterministic, reviewed per-profile installer selection and stricter validation (including profile-specific advisory-audit occurrence handling and correct conditional “skip” behavior). * Updated historical archive wiring to use the documented installer archive context path, with runtime checks, while preserving installer/fixture contents when validation fails. * **Tests** * Expanded end-to-end coverage with pinned fixture identity, Dockerfile assertion of archive-context COPY wiring and install commands, and tighter negative cases for mismatched or unsupported profile inputs. * **Documentation** * Refined legacy fixture pins documentation for archive storage location, installation behavior, and per-version advisory-audit expectations. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Updates the reviewed OpenClaw distribution from 2026.6.10 to 2026.7.1 and the sandbox Node image to 22.23.1. The image build fails closed while applying integrity-pinned remediations for vulnerable Axios copies in the Slack and Teams archives and the affected OpenTelemetry Jaeger pair in diagnostics. The separately locked `mcporter@0.7.3` graph now resolves exact `@hono/node-server@2.0.11` and `fast-uri@3.1.4` releases and passes the reviewed audit, signature, install, and CLI checks. The sandbox credential contract remains unchanged: generated `openclaw.json` contains the non-secret `apiKey: "unused"` sentinel, while `COMPATIBLE_API_KEY` remains an OpenShell provider-environment placeholder whose real value is resolved at the OpenShell boundary. No literal provider credential is persisted in OpenClaw configuration or state. OpenClaw 2026.7.1 changed loopback shared-token CLI calls to omit the signed CLI device identity. That prevented the paired-device scope comparison from reaching the canonical `scope-upgrade` pairing gate. The compatibility patch now retains the signed CLI identity only after a stored operator device credential exists. The shared token still authenticates the loopback call; the paired-device record remains authoritative for scopes, and an `operator.admin` request must still create and receive canonical pairing approval. The installed-base contract is covered explicitly. A pinned E2E row installs NemoClaw v0.0.89 with OpenClaw 2026.6.10 from a registry-SRI-bound frozen source archive, materializes the legacy per-agent SQLite, Memory Core, and update-check state, then upgrades in place to 2026.7.1. The current installer is deliberately not given the provider credential, so the post-upgrade turn proves reuse of the credential already held by OpenShell. The shared frozen-installer adapter also keeps the historical v0.0.36, v0.0.55, v0.0.74, and v0.0.89 matrix deterministic without weakening the current candidate. The merge from current `main` preserves its Node `tar@7.5.20` package fix and bundled-npm tar remediation, rebinding the affected-base guard to the upgraded Node 22.23.1 image digest. For the E2E-only OpenClaw 2026.3.11 stale-upgrade fixture, the exact reviewed source shape is verified, the replacement `tar@7.5.19` archive is registry-SRI-bound, and that reviewed package is bundled into the remediated OpenClaw archive before installation. There is no completed-image scanner exception: any remaining affected copy fails the strict scan, and both stale-upgrade E2Es require the rebuilt current image inventory to be completely clean. ## Changes - Pin OpenClaw and its first-party plugin archives to reviewed 2026.7.1 artifacts and update the Node 22.23.1 image digest. - Remediate only the reviewed Axios and diagnostics OTEL subtrees, with original-package identity checks, integrity pins, canonical tree digests, and archive-shape drift rejection. - Lock the mcporter runtime to `@hono/node-server@2.0.11` and `fast-uri@3.1.4`; verify the script-disabled production install, registry signatures, ESM transport construction/close path, and installed CLI version. - Retain stored CLI device identity on loopback shared-token calls so OpenClaw's paired-device scope gate remains authoritative without moving provider secrets into OpenClaw state. - Preserve private device, credential, and SQLite state across startup and installed-base migrations, including bounded repair of legacy update-check state. - Add the frozen v0.0.89/OpenClaw 2026.6.10 to 2026.7.1 installed-base E2E row and retain the broader historical migration matrix. - Preserve current-main node-tar remediation, run it only after curl is installed in the DeepAgents and Hermes bases, and verify both patch helpers in the sandbox build context. - Exact-shape remediate the E2E-only 2026.3.11 source archive from `tar@7.5.11` to a registry-SRI-bound, bundled `tar@7.5.19`, with the completed-image scan remaining strict and exception-free. - Set the authoritative local base-build allowance to 90 seconds for upgrade-head matrix runs that must build the exact local base. - Incorporate current main's historical Hermes fixture repair so rebuild coverage seeds, rotates, redacts, and leak-scans the required per-run API server key. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] 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: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — exact head reviewed during maintainer follow-through; the implementation fails closed on package identity, archive shape, dependency graph, SRI drift, and device-scope enforcement. - [ ] 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 `Signed-off-by:` lines and all new commits are SSH-signed and DCO-clean. - [x] `npm run checks`, `npm run typecheck`, `npm run typecheck:cli`, `npm run source-shape:check`, and `npm run test-size:check` passed on the current-main reconciliation. - [x] Focused combined suites passed: 258 tests with one expected skip; an independent combined run passed 61/61; the fresh real OpenClaw 2026.7.1 tarball harness passed 5/5. - [x] The real upstream 2026.7.1 compiled distribution audit passed all five required compatibility-shape checks. - [x] After merging current `main` through #7360, the focused remediation/integrity/scanner suites passed 34/34 and the installed-base migration/workflow suites passed 19/19. - [x] After reconciling current `main` through #7364, the exact affected Hermes historical fixture passed 9/9, the focused OpenClaw contract set passed 81 tests with one expected skip, and repository/source-shape checks passed. - [ ] Exact-head required GitHub CI and E2E gate are in flight. - [x] No secrets, API keys, or credentials committed. Evidence: - Prior upgrade-head historical evidence: [five migration rows passed](https://github.com/NVIDIA/NemoClaw/actions/runs/29862234216), including the dedicated v0.0.89/OpenClaw 2026.6.10 installed-base upgrade. Current-head coverage is also selected in the full matrix below. - Scope-upgrade proof on parent head 54b59af: [focused run 29888373497](https://github.com/NVIDIA/NemoClaw/actions/runs/29888373497) and the independent full-matrix cell both passed the formerly deterministic `operator.admin` cron path. - Prior-head focused rebuild coverage: [run 29889345896](https://github.com/NVIDIA/NemoClaw/actions/runs/29889345896), covering both stale OpenClaw upgrade fixtures, DeepAgents routing, and both Hermes rebuild paths. - Preserved prior-head full E2E evidence: [run 29889347151](https://github.com/NVIDIA/NemoClaw/actions/runs/29889347151) improved the original 66-failure/22-pass signal to 19 failures/68 passes. Every remaining red was a pre-existing DeepAgents trust-fixture failure, hosted inference capacity error, runner loss/cancellation, or transient load/SSH failure; every OpenClaw upgrade, rebuild, pairing, and installed-base migration path passed. The intermediate-head [replay 29888849758](https://github.com/NVIDIA/NemoClaw/actions/runs/29888849758) remains active append-only evidence. - Current exact-head append-only full matrix: [run 29893928454](https://github.com/NVIDIA/NemoClaw/actions/runs/29893928454), queued without canceling or replacing the active replay. - Current exact-head required CI: [run 29893824224](https://github.com/NVIDIA/NemoClaw/actions/runs/29893824224), [security CodeQL 29893824206](https://github.com/NVIDIA/NemoClaw/actions/runs/29893824206), and [E2E gate 29893823011](https://github.com/NVIDIA/NemoClaw/actions/runs/29893823011). --- Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> Signed-off-by: Aaron Erickson <aerickson@nvidia.com> --------- Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> Signed-off-by: Aaron Erickson <aerickson@nvidia.com> Co-authored-by: Aaron Erickson <aerickson@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Add the canonical `v0.0.91` changelog entry that was missed before the release tag was cut. Correct the custom-image compatibility guidance because the tagged code still accepts the legacy inference route selector instead of removing it in v0.0.91. ## Changes - Add `docs/changelog/2026-07-22.mdx` with the release summary and detailed security, rebuild, Hermes, DGX Station, and historical-validation changes from the published v0.0.91 announcement. - Link shipped behavior to the most specific published OpenClaw and Hermes documentation routes. - Correct the v0.0.90 changelog and command reference so they match the compatibility fallback present in the tagged v0.0.91 code without inventing a new removal version. - Keep the immutable v0.0.91 release tag unchanged; this is the documented post-release recovery path. Source summary: - [#7332](#7332), [#7289](#7289), and [#7294](#7294) -> `docs/changelog/2026-07-22.mdx`: Summarize completed-image `node-tar` remediation and current and historical container verification. - [#7213](#7213), [#7363](#7363), [#7366](#7366), and [#7369](#7369) -> `docs/changelog/2026-07-22.mdx`: Summarize trusted base preparation, backup reuse, deletion convergence, and rebuild confidence. - [#7212](#7212) -> `docs/changelog/2026-07-22.mdx`: Summarize the Hermes API bearer-token lifecycle and supported retrieval command. - [#7327](#7327) and [#7328](#7328) -> `docs/changelog/2026-07-22.mdx`: Summarize qualified DGX Station guidance and reproducible coding-agent installation instructions. - [#7355](#7355), [#7360](#7360), [#7362](#7362), and [#7364](#7364) -> `docs/changelog/2026-07-22.mdx`: Summarize restored historical OpenClaw upgrade and Hermes rebuild validation. - [#7189](#7189) -> `docs/changelog/2026-07-20.mdx`, `docs/reference/commands.mdx`: Correct its forward-looking removal deadline after v0.0.91 shipped with the documented legacy fallback still present. - [#7282](#7282), [#7306](#7306), and [#7341](#7341) need no additional user-guide update because they already update their owned contributor or user-facing text directly. ## 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 dated changelog structure, SPDX syntax, version ordering, and published 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; this documentation-only PR does not change Station preparation or runtime behavior. - 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 passed). - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — not run; this is a focused documentation-only change. - [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) — completed with 0 errors and 2 existing site-wide warnings. - [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) — the native changelog entry uses the required parser-safe MDX SPDX comment and intentionally has no frontmatter. --- Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Updated v0.0.91 guidance for custom Dockerfiles, including continued legacy compatibility and recommended migration to `NEMOCLAW_INFERENCE_PROVIDER_ID`. * Added release notes covering image security scanning, safer rebuild behavior, token management, DGX Station guidance, and deterministic release validation. * Clarified that existing custom images may continue using the legacy selector temporarily, with fallback removal planned for a future release. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> Co-authored-by: cjagwani <cjagwani@nvidia.com>
Summary
Follow up on #7355 so the E2E-only
openclaw@2026.3.11remediation cannot resolve its patched tar package from mutable registry state. The remediation now verifies and bundles the reviewedtar@7.5.19archive before the historical image install.Related Issue
Follow-up to #7355 and Apurv's requested security fix on that PR.
Changes
tar@7.5.19throughpackReviewedNpmArchive, verify its exact SRI and tarball URL, reject a pre-existing bundled tar directory, and copy the verified package into the remediated OpenClaw archive.Type of Change
Quality Gates
DGX Station Hardware Evidence
Verification
Signed-off-by:line and every commit appears asVerifiedin GitHubpre-commit,commit-msg, andpre-pushhooks passed, ornpm run check:diffpassed when hooks were skipped or unavailablenpm run test:changed: 8 passed;npm run typecheck:cli,npm run source-shape:check,npm run test:projects:check, and the test conditional scan passed. A real reviewed npm archive proof produced an OpenClaw archive withbundledDependencies: ["tar"]andtar@7.5.19undernode_modules/tar.npm run docsbuilds without warnings (doc changes only) — the build passed with two pre-existing Fern warnings.Signed-off-by: Prekshi Vyas prekshiv@nvidia.com
Summary by CodeRabbit
Security
tarpackage metadata and integrity checks.Bug Fixes
Tests