Skip to content

fix(e2e): bundle reviewed tar in legacy OpenClaw archive#7360

Merged
cv merged 1 commit into
mainfrom
codex/bundle-legacy-openclaw-tar
Jul 22, 2026
Merged

fix(e2e): bundle reviewed tar in legacy OpenClaw archive#7360
cv merged 1 commit into
mainfrom
codex/bundle-legacy-openclaw-tar

Conversation

@prekshivyas

@prekshivyas prekshivyas commented Jul 22, 2026

Copy link
Copy Markdown
Collaborator

Summary

Follow up on #7355 so the E2E-only openclaw@2026.3.11 remediation cannot resolve its patched tar package from mutable registry state. The remediation now verifies and bundles the reviewed tar@7.5.19 archive before the historical image install.

Related Issue

Follow-up to #7355 and Apurv's requested security fix on that PR.

Changes

  • Fetch tar@7.5.19 through packReviewedNpmArchive, verify its exact SRI and tarball URL, reject a pre-existing bundled tar directory, and copy the verified package into the remediated OpenClaw archive.
  • Declare tar as a bundled dependency and bind the OpenClaw identity, replacement declaration, bundle marker, and tar identity to the committed patched-metadata hash.
  • Make the legacy archive test succeed with the committed hash before exercising the mismatch path, and prove the extracted archive contains the reviewed bundled tar package.
  • Address the remaining fix(e2e): restore image regression coverage #7355 review findings by strengthening the apt/curl ordering contract, sharing historical installer markers, proving audit-boundary failures do not partially rewrite the Dockerfile, and correcting the dependency review note.

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: This changes only legacy E2E fixture construction; the existing security dependency review note is updated to keep the reviewed boundary accurate.
  • 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

  • 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 — integration tests: 22 passed; E2E support tests: 7 passed; npm 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 with bundledDependencies: ["tar"] and tar@7.5.19 under node_modules/tar.
  • Applicable broad gate passed — focused legacy fixture and contract changes use the targeted evidence above; required CI is pending.
  • Quality Gates section completed with required justifications or waivers — sensitive-path review is pending.
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only) — the build passed with two pre-existing Fern warnings.
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: Prekshi Vyas prekshiv@nvidia.com

Summary by CodeRabbit

  • Security

    • Strengthened validation and remediation of legacy OpenClaw packages, including verified bundled tar package metadata and integrity checks.
    • Updated the expected security integrity value for the affected OpenClaw release.
  • Bug Fixes

    • Improved installer patching for legacy upgrade paths and preserved Dockerfile contents when boundary validation fails.
  • Tests

    • Expanded coverage for bundled dependency contents, metadata integrity mismatches, package installation ordering, and installer failure scenarios.

Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The remediation library now uses stricter metadata integrity and bundled tar validation for legacy OpenClaw archives. Related documentation and tests are updated, while installer fixtures centralize patch markers and strengthen Dockerfile and failure-path assertions.

Changes

OpenClaw remediation

Layer / File(s) Summary
Remediation contracts and metadata integrity
scripts/lib/openclaw-npm-remediation.mts, docs/security/...
Remediated archives use a discriminated union, metadata hashes are computed deterministically, and the documented and expected legacy integrity values are updated.
Legacy tar packaging flow
scripts/lib/openclaw-npm-remediation.mts, test/openclaw-npm-remediation.test.ts
Legacy remediation packs and validates reviewed tar@7.5.19, copies it into node_modules/tar, updates bundled dependency metadata, and tests the resulting archive and integrity mismatch.
Installer fixture and Dockerfile contracts
test/e2e/live/..., test/e2e/support/..., test/node-tar-dockerfile-contract.test.ts
Installer patch needles are centralized, failed boundary detection verifies unchanged Dockerfiles, and Dockerfile tests verify pinned curl installation and cleanup ordering.

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
Loading

Possibly related issues

Possibly related PRs

  • NVIDIA/NemoClaw#7286 — Integrates the same remediation library and is directly connected to its archive typing, metadata hashing, and legacy tar handling.

Suggested labels: security

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: bundling the reviewed tar package in the legacy OpenClaw archive.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/bundle-legacy-openclaw-tar

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

@github-code-quality

github-code-quality Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit a915d3b in the codex/bundle-legacy-... branch remains at 96%, unchanged from commit 33f210e in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit a915d3b in the codex/bundle-legacy-... branch remains at 80%, unchanged from commit 33f210e in the main branch.

Show a code coverage summary of the most impacted files.
File main 33f210e codex/bundle-legacy-... a915d3b +/-
src/lib/domain/.../connect-env.ts 97% 89% -8%
src/lib/state/m...-acquisition.ts 89% 84% -5%
src/lib/adapter...shell/client.ts 90% 88% -2%
src/lib/messagi...nnels/policy.ts 100% 100% 0%
src/lib/sandbox...rce-identity.ts 87% 87% 0%
src/lib/securit...ntial-filter.ts 93% 93% 0%
src/lib/state/m...ock-identity.ts 95% 95% 0%
src/lib/state/m...lock-storage.ts 97% 97% 0%
src/lib/trace.ts 94% 94% 0%
src/lib/platform.ts 84% 89% +5%

Updated July 22, 2026 04:21 UTC

@github-actions

Copy link
Copy Markdown
Contributor

@prekshivyas prekshivyas added area: e2e End-to-end tests, nightly failures, or validation infrastructure area: security Security controls, permissions, secrets, or hardening labels Jul 22, 2026
@prekshivyas prekshivyas self-assigned this Jul 22, 2026
@prekshivyas prekshivyas added the v0.0.91 Release target label Jul 22, 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.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 33f210e and a915d3b.

📒 Files selected for processing (6)
  • docs/security/openclaw-2026.6.10-dependency-review.md
  • scripts/lib/openclaw-npm-remediation.mts
  • test/e2e/live/openshell-gateway-upgrade-old-installer.ts
  • test/e2e/support/openshell-gateway-upgrade-old-installer.test.ts
  • test/node-tar-dockerfile-contract.test.ts
  • test/openclaw-npm-remediation.test.ts

Comment thread test/openclaw-npm-remediation.test.ts
@github-actions

github-actions Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Informational

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

Model lanes

  • GPT-5.6 Terra (primary): Completed · medium confidence · 0 blockers · 1 warning · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Model comparison: normalized findings differ; normalized E2E selections differ; Nemotron reported the same number of blockers, 1 fewer 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, security-posture

3 optional E2E recommendations
  • openshell-gateway-upgrade
  • upgrade-stale-sandbox
  • rebuild-openclaw
1 warning · 0 suggestions

Warnings

Warnings do not block.

PRA-1 Warning — Bind the complete legacy fixture dependency graph

  • Location: scripts/lib/openclaw-npm-remediation.mts:653
  • Category: security
  • Problem: The new legacy-core path embeds and metadata-binds only tar@7.5.19. It explicitly requires that openclaw@2026.3.11 has no npm shrinkwrap, so its other dependency ranges are still resolved during the later npm global install and may change independently of the reviewed source archive and direct tar pin.
  • Impact: Historical E2E images can install a different unreviewed transitive graph over time, weakening reproducibility and the reviewed dependency boundary for the fixture.
  • Recommendation: Use a reviewed lock-derived install input for the legacy fixture, or materialize and verify the complete resolved dependency graph before installation.
  • Verification: Inspect the legacy-core branch and the archive install caller: it rejects npm-shrinkwrap.json, bundles only node_modules/tar, and later installs the rebuilt archive with npm.
  • Test coverage: Add a fixture-install regression that verifies the complete installed legacy dependency graph against committed identities and fails when any non-tar transitive resolution drifts.
  • Evidence: scripts/lib/openclaw-npm-remediation.mts:400-410 rejects a legacy npm shrinkwrap and changes the direct tar declaration. scripts/lib/openclaw-npm-remediation.mts:627-653 fetches, verifies, and copies only tar@7.5.19 into the legacy archive. test/openclaw-npm-remediation.test.ts verifies the remediated archive has no shrinkwrap and has bundled tar, but does not verify the complete installed dependency graph.

Workflow run details

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

@prekshivyas

Copy link
Copy Markdown
Collaborator Author

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.

@cv
cv merged commit 6b29277 into main Jul 22, 2026
78 of 80 checks passed
@cv
cv deleted the codex/bundle-legacy-openclaw-tar branch July 22, 2026 04:46
apurvvkumaria pushed a commit that referenced this pull request Jul 22, 2026
<!-- 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>
ericksoa added a commit that referenced this pull request Jul 22, 2026
<!-- 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>
cv pushed a commit that referenced this pull request Jul 22, 2026
<!-- 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: e2e End-to-end tests, nightly failures, or validation infrastructure area: security Security controls, permissions, secrets, or hardening v0.0.91 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants