Skip to content

fix(security): update sandbox dependency fixes#7563

Merged
cv merged 20 commits into
NVIDIA:mainfrom
senthilr-nv:codex/nspect-followup-remediation
Jul 26, 2026
Merged

fix(security): update sandbox dependency fixes#7563
cv merged 20 commits into
NVIDIA:mainfrom
senthilr-nv:codex/nspect-followup-remediation

Conversation

@senthilr-nv

@senthilr-nv senthilr-nv commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

Summary

Update every managed sandbox base image to the same checksum-bound fixed Vim,
jq, and Expat package boundary. The image build also remediates npm's private
brace-expansion copy and verifies the fixed Perl component versions.

Changes

  • Install libexpat1=2.8.2-1, libonig5=6.9.9-1+b1,
    libjq1=1.8.2-1, jq=1.8.2-1, vim-common=2:9.2.0782-1, and
    vim-tiny=2:9.2.0782-1 from one immutable Debian snapshot in the OpenClaw,
    Hermes, and Deep Agents Code base images. Verify architecture-specific
    SHA-256 values before installation, then check every dpkg identity and
    exercise the jq, Oniguruma, Expat, and Vim runtimes. Emit the architecture
    and exact package identities as a root-owned, read-only inventory.
  • Replace only the brace-expansion@5.0.7 package inside reviewed
    npm@11.18.0 with the SRI-pinned 5.0.8 registry archive. The helper
    rejects identity or layout drift, unsafe archive contents, duplicates, and
    every symlink except a node_modules/.bin link to a regular file inside the
    reviewed node_modules root. It replaces the complete directory
    transactionally, disarms rollback after the verified replacement becomes
    authoritative, retries backup cleanup without risking the live tree, and
    verifies npm and npx only after the fixed package is active.
  • Apply the npm-private replacement after each OpenClaw, Hermes, and Deep
    Agents base-image npm upgrade. Reassert the contract in each completed image
    because the completed filesystem is the published dependency boundary.
  • Verify the Socket, Storable, HTTP::Tiny, IO::Compress::Base,
    IO::Uncompress::Unzip, and File::GlobMapper versions included in the
    checksum-pinned Perl 5.44.0 package.
  • Retain the OpenClaw base image's reviewed jq and Expat identities and move
    the Hermes and Deep Agents Code images to the same artifact boundary.
  • Reassert the immutable inventory metadata and content, all six installed
    package identities, jq-to-Oniguruma linkage, jq/Expat/Vim runtime probes,
    and an empty dpkg audit in each completed managed image.
  • Track the new helper in base-image source identity, workflow path filters,
    and optimized sandbox build contexts.
  • Add exact package RUN-chain execution and checksum-rejection tests for all
    three managed base images on amd64 and arm64. Add behavior, pre-swap and
    post-swap rollback, layout-drift, command-order, image-order, and
    real-artifact tests. Record the public dependency review and removal
    conditions in
    docs/security/sandbox-base-2026-07-25-dependency-review.md.

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: Exact-head review pending after
    resolving the immutable jq closure, completed-image inventory, and npm
    rollback findings.
  • Non-success, skipped, or missing CI check accepted by maintainer — check
    name, approval link, and follow-up issue: Current exact-head CI is pending
    after the clean current-main refresh. The prior disposition is invalid
    because the head and base SHAs changed.

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: docs-updated
  • Evidence:
    docs/security/sandbox-base-2026-07-25-dependency-review.md; the exact-head
    review confirmed the dependency identities, compatibility contracts,
    concern dispositions, removal conditions, changed comments, and test titles.
    It covered all three managed base images, both architectures, the
    checksum/runtime contracts, and npm rollback evidence. It also confirmed
    that the public diff contains no internal identifiers, private paths, scan
    counts, assignees, or confidential audit context. The exact-head rerun
    verified the complete jq runtime closure, corrected rollback state
    transition, partial-cleanup test, and complete package/range ledger. The
    exact-head follow-up confirmed that the growth-guard fixture refactor is
    behavior-neutral and requires no documentation change. The latest exact-head
    review verified the root-owned inventory and completed-image assertions for
    all three images and both architectures. The exact-head follow-up confirmed
    that the canonical instruction digest preserves trusted remote-dashboard
    staging without weakening rejection of noncanonical post-generator rewrites.
    The refreshed exact-head review confirmed the clean current-main merge only
    carries upstream conflict-fixer changes and does not alter the remediation.
    The latest exact-head follow-up confirmed the test-only base-APT fixture fix
    redirects the immutable inventory into temporary directories with exact
    root-ownership operation validation and requires no documentation change.
    The final fixture compaction preserves those exact operations while keeping
    the changed test file below its repository size budget.
    The refreshed exact-head review confirmed that the clean fix(ci): publish validated conflict resolution trees #7576 current-main
    merge is byte-for-byte identical to upstream in its two conflict-publisher
    files and has no remediation or documentation overlap.
  • Agent: Codex Desktop

DGX Station Hardware Evidence

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

Verification

  • PR description includes a Signed-off-by: line and every commit appears
    as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or
    npm run 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 — the exact package and npm rollback suites
    passed 18 tests; relevant base-runtime provisioning passed 6 tests; bundled
    npm, Deep Agents Code, Perl, and applicable Hermes layout contracts passed.
    The one broader Hermes macOS permission fixture failure is unrelated to the
    changed package layer and is not claimed as passing evidence. The exact
    Hermes apt fixture that failed in CI now passes 10 tests after the current
    main refresh. The refreshed exact head passes 76 focused tests, including
    18 exact base/completed-image package matrix cases for all three images and
    both architectures, plus the injected partial backup cleanup. The dashboard
    lifecycle and security matrix regression selection passes 52/52. After the
    current-main refresh, the complete relevant regression selection passes
    110/110 plus the Hermes structural contract. The two full base-APT fixture
    cases that failed on Linux CI now pass 2/2, and the exact security package
    matrix remains green at 18/18. Hadolint passed for all six base/final
    Dockerfiles, and npm run docs passed. After the latest current-main
    refresh, the upstream conflict-publisher suite passes 12/12 and CLI
    type-checking passes alongside the unchanged 2/2 and 18/18 remediation
    regressions.
  • Applicable broad gate passed — npm test for broad
    runtime/test-harness changes; npm run check for repo-wide
    validation/coverage changes — command/result: Not run. The change is scoped
    to reviewed image dependencies and focused contracts.
  • 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) — the build
    passed with zero errors and two existing Fern warnings
  • Doc pages follow the style
    guide

    (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

The new dependency review has the required SPDX header. It follows the
established plain-Markdown docs/security/*-dependency-review.md audit-record
pattern, which does not use Fern frontmatter.


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

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv senthilr-nv added area: docs Documentation, examples, guides, or docs build area: packaging Packages, images, registries, installers, or distribution area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery area: security Security controls, permissions, secrets, or hardening bug-fix PR fixes a bug or regression platform: container Affects Docker, containerd, Podman, or images security v0.0.96 Release target labels Jul 26, 2026
@senthilr-nv senthilr-nv self-assigned this Jul 26, 2026
@coderabbitai

coderabbitai Bot commented Jul 26, 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 transactional npm brace-expansion patch helper, pins Debian Vim packages, expands Perl runtime checks, and integrates remediation through sandbox Dockerfiles, build-context tracking, workflow triggers, security documentation, and contract tests.

Changes

Sandbox remediation and image integration

Layer / File(s) Summary
Brace-expansion validation and replacement
scripts/patch-bundled-npm-brace-expansion.mts, test/patch-bundled-npm-brace-expansion.test.ts
Adds version and integrity checks, safe filesystem inspection, registry replacement, transactional rollback, CLI execution, idempotency, and failure-path tests.
Pinned Debian and Perl verification
Dockerfile.base, test/helpers/*, test/perl-critical-cve-remediation.test.ts, docs/security/...
Installs hashed Vim packages from immutable snapshots and verifies additional Vim and Perl module versions, with matching test stubs and dependency review documentation.
Image-stage remediation wiring
Dockerfile, agents/hermes/*, agents/langchain-deepagents-code/*, .github/workflows/base-image.yaml
Copies and executes the brace-expansion patch in base and final images, preserves tar-patch ordering, validates metadata, and triggers the base-image workflow when the helper changes.
Sandbox input tracking and staging
src/lib/sandbox-base-image/*, src/lib/sandbox/build-context.ts, test/sandbox-build-context.test.ts
Tracks the helper as a base-image input and stages it into optimized sandbox build contexts.
Dockerfile and image layout contracts
test/bundled-npm-brace-expansion-dockerfile-contract.test.ts, test/openclaw-final-image-layout.test.ts, test/hermes-final-image-layout.test.ts, src/lib/onboard/dockerfile-remote-dashboard-bind-contract.ts
Verifies pinned artifact values, patch ordering, payload counts, final helper metadata, base-image behavior, and canonical instruction hashing.

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

Possibly related PRs

Suggested labels: area: install

Suggested reviewers: cv, prekshivyas, apurvvkumaria

🚥 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
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately reflects the PR’s main security-related sandbox dependency updates.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@github-actions

github-actions Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings reported

Advisor assessment: No blocking advisor findings reported
Next action: Review the warnings below.
Findings: 0 blockers · 1 warning · 0 suggestions

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 · 1 warning · 2 suggestions
  • Model comparison: normalized findings differ; normalized E2E selections differ; Nemotron reported the same number of blockers, the same number of warnings, 2 more 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, full-e2e, hermes-e2e, security-posture, onboard-repair, onboard-resume

2 optional E2E recommendations
  • rebuild-openclaw
  • rebuild-hermes
1 warning · 0 suggestions

Warnings

Warnings do not block.

PRA-1 Warning — Test the registry preparation integrity failure path

  • Location: test/patch-bundled-npm-brace-expansion.test.ts:83
  • Category: tests
  • Problem: The registry entry point is tested only with an injected prepareReplacement function and command runner. The production preparation path downloads archive bytes, checks SHA-512 integrity, and invokes tar, but no regression test proves that invalid downloaded bytes prevent extraction and leave the affected npm package unchanged.
  • Impact: A refactor could invoke tar before integrity validation or mutate the private npm package after an integrity failure without the focused suite detecting it.
  • Recommendation: Add a focused registry-preparation test using an invalid archive fixture. Assert that the integrity check rejects it before tar runs and that the affected brace-expansion package remains unchanged.
  • Verification: Inspect test/patch-bundled-npm-brace-expansion.test.ts: its registry-order test injects prepareReplacement, so it bypasses prepareFixedBraceExpansionReplacement and its SHA-512 failure branch.
  • Test coverage: A test that routes registry preparation to invalid archive bytes, asserts tar is not invoked, and verifies the original brace-expansion@5.0.7 tree is intact after rejection.
  • Evidence: scripts/patch-bundled-npm-brace-expansion.mts computes SHA-512 after curl and before the tar command in prepareFixedBraceExpansionReplacement. test/patch-bundled-npm-brace-expansion.test.ts injects prepareReplacement in its registry-order test, bypassing download, integrity validation, and extraction.

Workflow run details

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

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

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

Caution

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

⚠️ Outside diff range comments (1)
agents/hermes/Dockerfile.base (1)

61-62: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Propagate the jq/vim-tiny security fix to both sandbox base images. agents/hermes/Dockerfile.base and agents/langchain-deepagents-code/Dockerfile.base still install jq=1.7.1-6+deb13u2 and vim-tiny=2:9.1.1230-2 via plain apt-get, while the root Dockerfile.base now uses the snapshot-pinned, hash-verified remediation. Mirror that install pattern here, or document why these images are excluded.

🤖 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 `@agents/hermes/Dockerfile.base` around lines 61 - 62, The jq and vim-tiny
security fix must be propagated to both sandbox base images. Update the
package-install sections in agents/hermes/Dockerfile.base (lines 61-62) and
agents/langchain-deepagents-code/Dockerfile.base (lines 35-37) to mirror the
root Dockerfile.base snapshot-pinned, hash-verified installation pattern, or
document why either image is intentionally excluded.

Source: Path instructions

🧹 Nitpick comments (2)
test/perl-critical-cve-remediation.test.ts (1)

140-154: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Back these checks with behavioral validation.

These assertions only prove that the completed Dockerfile text contains the expected commands; they do not prove that the final image can load the modules at those versions or that the checks execute in the active RUN chain. Keep this contract assertion if useful, but add or confirm an image-execution test for the runtime behavior.

As per path instructions, tests should prefer observable outcomes through the public boundary over source-text assertions.

🤖 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/perl-critical-cve-remediation.test.ts` around lines 140 - 154, Add
behavioral coverage to the test around completedStage() that builds or runs the
resulting image through its public execution boundary, verifying Perl loads each
reviewed module at the required version and the checks execute successfully in
the active RUN chain. Retain the existing runtime text assertions only as
supplementary contract coverage, not as the sole validation.

Source: Path instructions

docs/security/sandbox-base-2026-07-25-dependency-review.md (1)

12-19: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Keep each sentence on one Markdown source line.

The new document wraps sentences across physical lines, including Lines 12-13, 16-17, and 18-19. Reflow the prose throughout docs/security/sandbox-base-2026-07-25-dependency-review.md so each sentence remains on one source line.

As per coding guidelines, Markdown and MDX source files must keep one sentence per line.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/security/sandbox-base-2026-07-25-dependency-review.md` around lines 12 -
19, Reflow the prose throughout the dependency review document so every sentence
occupies a single Markdown source line, including the sentences in the package
replacement and verification list around vim, brace-expansion, Perl, and
retained packages. Preserve the existing wording and list structure while
removing only the physical line wraps.

Sources: Coding guidelines, 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.

Inline comments:
In `@test/helpers/base-apt-security-functions.ts`:
- Around line 90-91: Update the APT fixture cases in the mock curl and sha256sum
handling near the vim-tiny entries to recognize both amd64 and arm64 URL
patterns and their corresponding architecture-specific digests. Retain the
existing arm64 cases, and add the amd64 vim-tiny contract using the digest
expected by Dockerfile.base.

In `@test/patch-bundled-npm-brace-expansion.test.ts`:
- Around line 82-105: In the test “does not invoke npm or npx until the private
package is replaced and verified,” remove the commandRunner if statement and
express the verification as a boolean assertion that is true for non-npm/npx
commands or verifies the package state for npm/npx commands. Preserve the
existing command ordering and fixed-state expectations.

---

Outside diff comments:
In `@agents/hermes/Dockerfile.base`:
- Around line 61-62: The jq and vim-tiny security fix must be propagated to both
sandbox base images. Update the package-install sections in
agents/hermes/Dockerfile.base (lines 61-62) and
agents/langchain-deepagents-code/Dockerfile.base (lines 35-37) to mirror the
root Dockerfile.base snapshot-pinned, hash-verified installation pattern, or
document why either image is intentionally excluded.

---

Nitpick comments:
In `@docs/security/sandbox-base-2026-07-25-dependency-review.md`:
- Around line 12-19: Reflow the prose throughout the dependency review document
so every sentence occupies a single Markdown source line, including the
sentences in the package replacement and verification list around vim,
brace-expansion, Perl, and retained packages. Preserve the existing wording and
list structure while removing only the physical line wraps.

In `@test/perl-critical-cve-remediation.test.ts`:
- Around line 140-154: Add behavioral coverage to the test around
completedStage() that builds or runs the resulting image through its public
execution boundary, verifying Perl loads each reviewed module at the required
version and the checks execute successfully in the active RUN chain. Retain the
existing runtime text assertions only as supplementary contract coverage, not as
the sole validation.
🪄 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: 7ce811be-3b9a-41b7-8497-253b1646aea1

📥 Commits

Reviewing files that changed from the base of the PR and between 4fdbb79 and d0c34af.

📒 Files selected for processing (19)
  • .github/workflows/base-image.yaml
  • Dockerfile
  • Dockerfile.base
  • agents/hermes/Dockerfile
  • agents/hermes/Dockerfile.base
  • agents/langchain-deepagents-code/Dockerfile
  • agents/langchain-deepagents-code/Dockerfile.base
  • docs/security/sandbox-base-2026-07-25-dependency-review.md
  • scripts/patch-bundled-npm-brace-expansion.mts
  • src/lib/sandbox-base-image/source-identity.test.ts
  • src/lib/sandbox-base-image/source-identity.ts
  • src/lib/sandbox/build-context.ts
  • test/bundled-npm-brace-expansion-dockerfile-contract.test.ts
  • test/helpers/base-apt-security-functions.ts
  • test/hermes-final-image-layout.test.ts
  • test/openclaw-final-image-layout.test.ts
  • test/patch-bundled-npm-brace-expansion.test.ts
  • test/perl-critical-cve-remediation.test.ts
  • test/sandbox-build-context.test.ts

Comment thread test/helpers/base-apt-security-functions.ts Outdated
Comment thread test/patch-bundled-npm-brace-expansion.test.ts
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv
senthilr-nv requested review from apurvvkumaria and cv July 26, 2026 04:18
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>

@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/patch-bundled-npm-brace-expansion.test.ts (1)

151-185: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Assert that rejected layouts remain unchanged.

These cases only assert that patching throws. Also verify that the original brace-expansion tree is still present (for example, old.js remains), otherwise a regression that mutates the live tree before rejecting could pass the test. As per path instructions, tests should prove observable behavior rather than only the thrown error.

🤖 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/patch-bundled-npm-brace-expansion.test.ts` around lines 151 - 185,
Extend the rejected-layout cases in the test around
patchBundledNpmBraceExpansion to verify the original brace-expansion tree
remains unchanged after each expected throw, such as asserting its existing
old.js member is still present. Keep the current error assertions and cover the
drifted, unsafe replacement, symlinked npm tree, and escaping bin-link fixtures.

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/patch-bundled-npm-brace-expansion.test.ts`:
- Around line 151-185: Extend the rejected-layout cases in the test around
patchBundledNpmBraceExpansion to verify the original brace-expansion tree
remains unchanged after each expected throw, such as asserting its existing
old.js member is still present. Keep the current error assertions and cover the
drifted, unsafe replacement, symlinked npm tree, and escaping bin-link fixtures.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 5c606c05-4171-4dae-8d05-1062ee9e2e21

📥 Commits

Reviewing files that changed from the base of the PR and between 3fc0d68 and bbc8abc.

📒 Files selected for processing (3)
  • docs/security/sandbox-base-2026-07-25-dependency-review.md
  • scripts/patch-bundled-npm-brace-expansion.mts
  • test/patch-bundled-npm-brace-expansion.test.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • docs/security/sandbox-base-2026-07-25-dependency-review.md
  • scripts/patch-bundled-npm-brace-expansion.mts

@apurvvkumaria
apurvvkumaria enabled auto-merge (squash) July 26, 2026 04:40
@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

Maintainer CI disposition for exact head 3db39af982bf7ea5928095961110f7b1f23a0fff:

The reviewed npm audit failed closed twice because the registry returned an
empty response without audit metadata (summary="", detail=""). Neither
attempt produced an advisory or policy finding:

For this exact revision, the deterministic CI lanes, CodeQL, CodeRabbit,
automated review, native amd64 and arm64 production-image builds, and all four
downstream sandbox smoke/isolation tests passed. I accept the two
reviewed-npm-audit non-success results as an external registry availability
failure for this revision.

The manual run-control-plane authorization is not applicable because GitHub
identifies this as a cross-repository PR and that workflow rejects fork heads.
This disposition does not authorize credential-bearing fork code and does not
claim that the failed audit passed.

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

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Security remediation is incomplete at exact head 3db39af.

.github/workflows/base-image.yaml publishes the Hermes and LangChain DeepAgents base images as managed artifacts, but agents/hermes/Dockerfile.base and agents/langchain-deepagents-code/Dockerfile.base still install the affected Debian jq 1.7.1-6+deb13u2 and Vim 9.1.1230-2 packages. Only the root base image receives the fixed jq/Vim artifacts in this PR.

Please apply the remediation to every managed image consumer and extend exact-artifact validation for those images. Required E2E is also not yet green. This remains a security HOLD until the refreshed exact head passes the full dependency, image-artifact, CI, and E2E gates.

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

Copy link
Copy Markdown
Collaborator Author

@cv The managed-image scope finding is addressed at exact head 54a7d6f0a5ed56591eefd229b0c0d1d71115910d.

  • Hermes and Deep Agents Code now use the same immutable, architecture-specific, checksum-bound libexpat, jq, and Vim artifacts as the OpenClaw base image.
  • Exact RUN-chain tests cover all three managed base images on amd64 and arm64, including successful dpkg/runtime validation and checksum rejection before package installation.
  • The npm remediation now also proves rollback after post-swap verification failure and that rejected layouts leave the original package tree unchanged.
  • Focused tests, relevant image contracts, hadolint, the documentation build, normal hooks, secret scanning, and exact-head documentation/security reviews passed. GitHub reports the commit as Verified.

The refreshed dependency, image-artifact, CI, and E2E gates are running now, so the security HOLD should remain until those exact-head results complete. Please re-review the implementation and artifact coverage for this head.

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

The latest head only merges current main; the audited remediation files are unchanged from 20d41f2, so two release-blocking defects remain. First, the Hermes and Deep Agents arm64 apt closure omits libonig5=6.9.9-1+b1; a real arm64 BuildKit execution reaches dpkg -i and fails while configuring libjq1/jq. Add the exact dependency and validate immutable per-image architecture/package inventories plus the installed final-image package/runtime/dpkg state. Second, the bundled-npm replacement leaves rollback armed while deleting the backup; a partial cleanup failure can enter rollback and delete the already-verified live tree. Disarm rollback immediately after the verified replacement becomes authoritative, before best-effort backup cleanup, and cover the partial-cleanup path. The dependency ledger also needs the complete package/range evidence for the final fixed set. Fresh exact-head docs/security review and CI/E2E are required after these changes.

@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

Maintainer exact-head non-success disposition

Reviewed PR head f3794f7 against base d525e15.

The reviewed-npm-audit job failed closed because the npm audit endpoint returned an empty error payload. The trusted parser reported that audit metadata must be an object and recorded empty summary/detail fields. This reproduces the identical external response observed on the immediately preceding reviewed head and its exact-head retry. No advisory or policy report was produced, so this disposition does not claim that npm audit passed.

For this exact revision, all eight CLI shards, static checks, build/typecheck, installer integration, plugin tests, WeChat runtime audit, CodeQL, DCO, documentation receipt, both automated advisor lanes, both native amd64/arm64 sandbox-image builds, and all four downstream image tests passed. Local exact-head validation also passed 68 tests across the source-identity and security remediation suites. The PR remains approved, mergeable, and conflict-free.

The E2E observer cannot reach a successful prerequisite verdict because it correctly mirrors the failed npm-audit aggregate. This is a cross-repository PR, so the internal run-control-plane authorization path is not applicable and credential-bearing E2E was not dispatched. Repository secrets were not made available to fork code. Based on the exact-head deterministic CI, architecture builds, downstream image validation, security approval, and clean automated reviews, I accept the reviewed-npm-audit, aggregate/coordination, and required E2E non-success contexts for this exact head/base pair. This does not claim that npm audit or credentialed E2E passed.

This disposition is invalid if either SHA changes.

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

Copy link
Copy Markdown
Collaborator Author

@cv Exact-head security re-review requested for 55f910c085ce3897547b99aae054864853a951d4.

The two release blockers from the prior review are addressed:

  • The immutable jq closure now includes checksum-pinned libonig5=6.9.9-1+b1 artifacts for amd64 and arm64 in all three managed base images. Exact RUN-chain tests enforce each per-image/per-architecture six-package inventory, checksum set, dpkg identity, jq/Oniguruma linkage, and runtime probes.
  • Bundled-npm rollback is disarmed immediately after the replacement verifies as authoritative, before backup cleanup. Cleanup retries without re-entering rollback, and an injected partial-cleanup regression test proves the verified live tree remains intact.
  • The dependency review now records the complete reviewed package/range evidence and accurately distinguishes the jq runtime dependency from vulnerability-fix claims.

Focused exact-head evidence passes 69/69 tests; normal commit hooks, Hadolint, secret scanning, and docs validation also pass. Fresh GitHub CI and review checks are in progress.

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

Copy link
Copy Markdown
Collaborator Author

@cv Exact-head review target is now b25073bd1e9190d388f44673e989bd6177ffb7be. The sole delta after the remediation commit is a behavior-neutral rewrite of the partial-cleanup test fixture to satisfy the test-conditionals growth guard. The focused test passes 7/7, the exact growth scanner passes, and production code and documentation are unchanged.

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thank you—the exact libonig5 closure, rollback disarm-before-cleanup, partial-cleanup regression, and expanded ledger address those findings, and the focused dependency suites pass. Two blockers remain on this head. (1) The exact package/runtime checks still run only in intermediate base-image layers and extracted/stubbed RUN-chain tests; no immutable per-image inventory or completed-final-image assertion binds the shipped OpenClaw, Hermes, and Deep Agents images to the reviewed architecture and exact libexpat1, libonig5, libjq1, jq, vim-common, and vim-tiny identities. Emit a root-owned immutable inventory in each base and reassert its metadata/content plus dpkg identities, jq→libonig linkage/runtime probes, and empty dpkg --audit in each final Dockerfile, with final-image contract coverage. (2) codebase-growth-guardrails fails because test/patch-bundled-npm-brace-expansion.test.ts adds a test-body if; move the injected branch into a named setup helper or otherwise keep the test body linear. Rerun exact docs/security review and full CI/E2E after the next head.

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

Copy link
Copy Markdown
Collaborator Author

@cv Exact-head security re-review requested for be7a982383215c17a4144ebf2092f8500e2bc336.

The remaining completed-image blocker is addressed:

  • Every base emits architecture plus the six exact reviewed package identities to a root-owned, mode 0444 inventory.
  • Every completed OpenClaw, Hermes, and Deep Agents Code image rejects a missing/symlinked or metadata/content-drifted inventory, reasserts all six dpkg identities, jq-to-Oniguruma linkage, jq/Expat/Vim runtime probes, and empty dpkg --audit output.
  • Exact executable matrix coverage now runs both the base-package chain and completed-image assertion for all three images on amd64 and arm64 (18/18 matrix cases; 76/76 focused tests overall).
  • The test-body conditional blocker was already removed in b25073bd1; the exact conditionals scanner and current growth hooks pass locally.

Normal commit/pre-push hooks, Hadolint, secret scanning, and docs validation pass. Fresh GitHub CI and multi-architecture image builds are starting on this head.

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

Copy link
Copy Markdown
Collaborator Author

@cv Final exact-head review target is 691d49070d74e918aaeee80ae4af6b5d47eb8295. The sole delta after the completed-image fix adds that canonical OpenClaw inventory-guard instruction digest to the existing exact post-generator allowlist. This restores trusted remote-dashboard staging while noncanonical rewrites remain rejected; the previously failing dashboard lifecycle plus security matrix selection passes 52/52. Production package/runtime assertions and documentation are unchanged from be7a98238.

@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

@cv Refreshed exact-head review target: e1db05f66afa2c41303f79c2729600e65722cef7, now based on current main f6347bdbcaf337a9eebe2f21a926d4ca1b870e42. The merge was clean; its only delta from reviewed 691d49070 is the three upstream PR conflict-fixer files from #7573, byte-for-byte identical to current main. The remediation regression selection passes 110/110 plus the Hermes structural contract.

@senthilr-nv
senthilr-nv requested a review from cv July 26, 2026 07:24
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

@cv Exact-head re-review target is now 48d2559291cb6228b2ee1b8bfb31a61b85416014. The only delta after the clean-main refresh fixes the two Linux CLI-shard fixture failures: the existing full base-APT shell tests now redirect the immutable package inventory into their temporary roots and validate the exact install -d and chown root:root operations. The formerly failing cases pass 2/2, the six-image/architecture security matrix remains 18/18, normal hooks passed, the commit is GitHub Verified, and the exact-head documentation-writer review found no production, documentation, or confidentiality change.

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

Copy link
Copy Markdown
Collaborator Author

@cv Final exact-head review target is 28e042866ec00ffae1a2adbdfdc4d858b7367be5. The sole delta from 48d255929 compacts the two test-fixture path rewrites without changing their behavior: each temporary fixture replaces the canonical inventory directory once, preserving both install -d and security-packages.txt targets. The formerly failing cases remain 2/2, the security matrix remains 18/18, and the file is now 1,498 lines under the 1,500-line growth budget. Normal hooks and the exact-head documentation/confidentiality review pass.

@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

Maintainer exact-head non-success disposition

Reviewed PR head 28e042866ec00ffae1a2adbdfdc4d858b7367be5 against base f6347bdbcaf337a9eebe2f21a926d4ca1b870e42.

The reviewed-npm-audit job failed closed on both attempt 1 and the exact-head failed-job retry because the npm audit endpoint returned no report metadata. The trusted parser recorded summary="" and detail="" and rejected the response because audit metadata was not an object. Neither attempt produced an advisory or policy report, so this disposition does not claim that npm audit passed.

For this exact revision, all eight CLI shards and their aggregate, static checks, build/typecheck, installer integration, plugin tests, WeChat runtime audit, growth guardrails, DCO, documentation receipt, CodeQL, platform E2E, and repository security checks passed. Both native amd64 and arm64 production-image builds passed, followed by all four downstream sandbox smoke, isolation, port-override, and E2E image tests. The primary PR Review Advisor recommends merge-as-is with zero blockers, warnings, or suggestions; its optional second-opinion lane is not relied upon.

The E2E observer cannot reach a successful prerequisite verdict because it correctly mirrors the failed npm-audit aggregate. This is a cross-repository PR, so the internal run-control-plane authorization path is not applicable and credential-bearing E2E was not dispatched. Repository secrets were not made available to fork code.

Based on the exact-head deterministic CI, both architecture builds, downstream image validation, clean primary automated review, and the repeated external audit response, I accept the reviewed-npm-audit, aggregate/coordination, and required E2E non-success contexts for this exact head/base pair. This acceptance is independent of the required security approval and does not claim that npm audit or credentialed E2E passed.

This disposition is invalid if either SHA changes.

@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

@cv Exact-head security approval requested for 28e042866ec00ffae1a2adbdfdc4d858b7367be5. The two prior blockers are now exercised in completed images and all final evidence is terminal: all eight CLI shards plus aggregate pass; both native amd64/arm64 production-image builds pass; all four downstream image tests pass; growth, CodeQL, docs receipt, DCO, and primary automated review are clean. The reviewed npm audit failed closed twice on an identical empty metadata response and the exact-head maintainer disposition is documented at #7563 (comment). Please replace the stale hold with the exact-head decision if the completed-image inventory, rollback, and fixture fixes are satisfactory.

@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

@cv Refreshed exact-head review target is 632d49006cbcad8c7e0362aed23d87de33da105c, based on current main dc077731c6b2501abd90a24d4b91f447d86b9e64. The merge is clean; its only delta from reviewed 28e042866 is the two #7576 conflict-publisher files, byte-for-byte identical to upstream and with no remediation overlap. Exact refresh evidence passes: upstream conflict-fixer 12/12, base-APT regressions 2/2, package matrix 18/18, and CLI typecheck. The previous head completed both native builds and all four downstream image tests; fresh exact-head CI and image builds are starting now.

@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

@cv Exact head 632d49006cbcad8c7e0362aed23d87de33da105c now has the terminal evidence requested: all eight CLI shards and aggregate pass; the reviewed npm audit passed on exact-head retry; both native amd64/arm64 builds pass; all four downstream image tests pass; both advisor lanes, CodeQL, growth, docs receipt, DCO, and platform checks pass. The branch is clean and based on current main dc077731c6b2501abd90a24d4b91f447d86b9e64. Please replace the stale hold with the exact-head approval if the completed-image inventory, rollback, and fixture fixes are satisfactory.

@cv
cv disabled auto-merge July 26, 2026 08:34
@cv
cv merged commit d67ef8b into NVIDIA:main Jul 26, 2026
89 of 94 checks passed
@cv cv mentioned this pull request Jul 26, 2026
23 tasks
cv added a commit that referenced this pull request Jul 26, 2026
<!-- markdownlint-disable MD041 -->
## Summary
<!-- 1-3 plain sentences: what changes and why. Describe
before-and-after behavior when it applies. Follow the NemoClaw Writing
Guide: https://github.com/NVIDIA/NemoClaw/blob/main/WRITING.md. Do not
add unrelated prose cleanup. -->

The reviewed npm audit gate currently fails immediately when the
registry returns an incomplete JSON response. This change retries only
incomplete or timed-out scans within a fixed 138-second budget,
continues to evaluate complete vulnerability reports immediately, and
still fails closed when the retry budget is exhausted.

## Changes
<!-- List concrete changes. If this adds an abstraction, configuration,
fallback, migration, or compatibility path, name its current requirement
and consumer, explain why a direct change is insufficient, and identify
the test that protects it. -->

- Bound each `npm audit --omit=dev --json` attempt to 45 seconds and
retry incomplete scans after fixed 1-second and 2-second delays.
- Preserve immediate policy evaluation for every structurally complete
audit report, including reports containing blocking vulnerabilities.
- Fail closed after three incomplete attempts and retain the final
report and failure provenance.
- Sanitize transient retry warnings to stable reason codes so registry
diagnostics, credentials, and control text cannot enter CI logs.
- Add focused regressions for incomplete responses, scanner timeouts,
retry exhaustion, blocking vulnerability reports, non-timeout process
errors, and diagnostic redaction.

## 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
<!-- Check one tests line and one docs line. Check other lines when
applicable. Add every requested justification or approval reference. -->
- [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 an internal
trusted CI audit retry boundary without changing supported commands,
configuration, APIs, policy, or user workflows.
- [x] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [x] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification: A nine-category
security review passed exact current-main head `293ed408a`. The final
refresh adds only byte-identical upstream changes from merged PRs #7563
and #7578; the three PR-authored audit files are unchanged. Complete
vulnerability reports still evaluate immediately, retry exhaustion
remains fail-closed, and both transient and terminal diagnostics are
redacted with negative regression coverage.
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Documentation Writer Review
<!-- Required for code and documentation changes after the changes and
applicable validation are complete. Keep one review checkbox and one
instance of each visible or hidden field. For Evidence, list changed
documentation paths. For documentation-only changes, also state that the
writing rules and documentation style were reviewed. For other results,
explain why no documentation change is needed or why the review is
blocked. For Agent, use a consistent product and surface name, such as
Codex Desktop, Codex CLI, Claude Code, or Cursor. After committing all
review changes, put `git rev-parse --short HEAD` and `git rev-parse
--short HEAD:AGENTS.md` in the hidden metadata below. Rerun the review
and refresh that metadata after any new commit. This receipt is advisory
during the data-collection pilot. -->
- [x] Documentation writer subagent reviewed the completed changes
- Result: `no-docs-needed`
- Evidence: Exact head `293ed408a` changes only the internal
reviewed-npm-audit helper and its tests relative to current main. The
merge-only changes from #7563 and #7578 match main byte-for-byte. No
user-facing CLI, configuration, API, or supported workflow contract
changes. No comments were added; the new test titles precisely describe
retry/backoff, timeout, non-timeout error, complete-report, and
exhausted-budget behavior. No documentation or Fern build input changed.
- Agent: Codex Desktop
<!-- docs-review-head-sha: 293ed40 -->
<!-- docs-review-agents-blob-sha:
be20a09 -->

## DGX Station Hardware Evidence
<!-- Required only when scripts/prepare-dgx-station-host.sh changes.
Maintainers must review the linked evidence before approving or merging.
This is human-reviewed evidence, not authenticated hardware provenance.
Exceptional bypasses use existing repository governance and must be
documented on the PR. -->
- [ ] Tested on DGX Station
- Tested commit: Not applicable
- Station profile/scenario: Not applicable
- Result: Not applicable
- Supporting evidence: Not applicable

## Verification
<!-- Check each applicable item only when supported by the requested
evidence. Run targeted tests once per relevant change set and rerun
after later edits or hook autofixes that can affect the tested behavior.
Do not rerun hook-covered checks. -->
- [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 — exact refreshed head: `npx vitest run
--project integration test/reviewed-npm-audit.test.ts
test/reviewed-npm-audit-workflow.test.ts`: 39 passed; the normal
pre-push CLI TypeScript and package/tag version checks passed.
- [ ] 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)

---
<!-- DCO sign-off is required in this PR description, and every commit
must appear as Verified in GitHub. Run: git config user.name && git
config user.email -->
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>

---------

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Co-authored-by: Carlos Villela <cvillela@nvidia.com>
@cv cv mentioned this pull request Jul 26, 2026
23 tasks
apurvvkumaria pushed a commit that referenced this pull request Jul 27, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Add the canonical `docs/changelog/2026-07-25.mdx` release entry with the
exact `## v0.0.96` heading.
The entry reconciles all 90 first-parent commits since v0.0.95 with all
92 merged PRs in the live `v0.0.96` label ledger and groups the
user-visible changes by operator journey.

## Changes

- Add the parser-safe dated MDX changelog entry for v0.0.96 with
root-absolute links to the focused user guides.
- Source summary:
- [#7194](#7194) ->
`docs/changelog/2026-07-25.mdx`: Document persistent baseline network
policy exclusions and their inspection, rebuild, and snapshot behavior.
- [#7188](#7188),
[#7427](#7427), and
[#7546](#7546) ->
`docs/changelog/2026-07-25.mdx`: Document DNS-backed HTTPS inference
routing, keyless loopback endpoints, and provider-marker isolation.
- [#7238](#7238) ->
`docs/changelog/2026-07-25.mdx`: Document blueprint sandbox and provider
identifier validation before state writes or OpenShell calls, with
bounded terminal-safe rejection previews.
- [#7319](#7319),
[#7274](#7274),
[#7528](#7528),
[#7353](#7353), and
[#7560](#7560) ->
`docs/changelog/2026-07-25.mdx`: Document the managed default gateway
service, onboarding readiness, and container-runtime identity
safeguards.
- [#7349](#7349),
[#7498](#7498),
[#7406](#7406),
[#7196](#7196),
[#7559](#7559),
[#7421](#7421),
[#7510](#7510),
[#7295](#7295), and
[#7565](#7565) ->
`docs/changelog/2026-07-25.mdx`: Document gateway-scoped status,
lifecycle diagnostics, managed MCP recovery, delete-edge safeguards, and
fail-closed CLI prompt and command output.
- [#7591](#7591) ->
`docs/changelog/2026-07-25.mdx`: Document opt-in authenticated MCP
tool-name discovery, its bounded and names-only contract, probe
interaction, and rebuild requirement.
- [#7305](#7305),
[#7480](#7480),
[#7471](#7471),
[#7365](#7365), and
[#7541](#7541) ->
`docs/changelog/2026-07-25.mdx`: Document installer version checks,
version-tag reporting, license guidance, WSL Ollama selection, and DGX
Station vLLM detection.
- [#7482](#7482),
[#7466](#7466),
[#7208](#7208),
[#7434](#7434), and
[#7586](#7586) ->
`docs/changelog/2026-07-25.mdx`: Document Ollama resource details,
reasoning precedence, Hermes onboarding behavior, and preserved managed
Hermes BuildKit failures.

- [#6830](#6830),
[#7492](#7492),
[#7563](#7563), and
[#7582](#7582) ->
`docs/changelog/2026-07-25.mdx`: Document the authoritative OpenClaw
production lock, fixed managed-image dependencies, immutable Hermes base
adoption, and Hermes image-size reduction.
- [#7505](#7505),
[#7530](#7530),
[#7547](#7547),
[#7508](#7508),
[#7548](#7548),
[#7549](#7549),
[#7537](#7537),
[#7534](#7534),
[#7515](#7515),
[#7511](#7511),
[#7551](#7551),
[#7562](#7562),
[#7575](#7575),
[#7496](#7496),
[#7594](#7594),
[#7595](#7595), and
[#7599](#7599) ->
`docs/changelog/2026-07-25.mdx`: Summarize release validation, transient
and bounded dispatch reconciliation, exact pre-tag qualification,
identity revalidation, npm-audit retry, sharding, image reuse, timeout,
telemetry, and workflow-hardening changes.
- Reconciled without separate changelog prose:
- [#7539](#7539),
[#7526](#7526),
[#7507](#7507),
[#7506](#7506),
[#7519](#7519),
[#7516](#7516),
[#7396](#7396),
[#7254](#7254),
[#7583](#7583),
[#7596](#7596), and
[#7598](#7598): Test-harness or
fixture-only changes.
- [#7403](#7403),
[#7161](#7161),
[#6877](#6877),
[#7531](#7531),
[#7525](#7525),
[#7522](#7522),
[#7536](#7536),
[#7552](#7552),
[#7566](#7566),
[#7553](#7553),
[#7561](#7561),
[#7577](#7577),
[#7569](#7569),
[#7585](#7585),
[#7584](#7584),
[#7592](#7592),
[#7580](#7580),
[#7571](#7571),
[#7517](#7517),
[#7589](#7589),
[#7402](#7402),
[#7558](#7558),
[#7544](#7544), and
[#7601](#7601): Dependency,
internal recovery, validation, contributor-workflow, E2E optimization,
telemetry, or CI trust changes with no separate user-facing release
claim.
- [#7556](#7556),
[#7573](#7573),
[#7576](#7576), and
[#7578](#7578): Experimental
repository-maintainer conflict automation with no canonical user
documentation surface.

## 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,
version headings, and published links.
- [ ] 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:

## Documentation Writer Review

- [x] Documentation writer subagent reviewed the completed changes
- Result: `docs-updated`
- Evidence: Reviewed `docs/changelog/2026-07-25.mdx` at exact head
`0f5dedb47` against 90 first-parent release commits and 92 merged PRs
labeled `v0.0.96`. Verified parser-safe MDX SPDX, the exact version
heading, literal CLI names, writing style, skip terms, all 20
root-absolute published links, and the accepted #7591 opt-in
authenticated discovery bounds. #7544, #7599, and #7601 remain internal
or CI-only release-ledger entries. Changelog tests passed 6/6, the docs
build passed with 0 errors and two pre-existing Fern warnings, and `npm
run check:diff` plus the final diff check passed.
- Agent: Codex Desktop documentation-writer subagent
<!-- docs-review-head-sha: 0f5dedb -->
<!-- docs-review-agents-blob-sha: be20a09 -->

## DGX Station Hardware Evidence

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

## 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.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result: Not applicable to this
prose-only changelog entry.
- [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) — the
build passed with 0 errors and 2 existing Fern warnings; the
published-route check passed.
- [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)
— native changelog files use the required parser-safe MDX SPDX comment
and no frontmatter.

---
Signed-off-by: Carlos Villela <cvillela@nvidia.com>


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

* **New Features**
* Persistent network policy exclusions with consistent restore/exclusion
reporting across rebuilds/snapshots.
* Opt-in MCP tool discovery via `mcp status --tools` with bounded,
redacted authenticated traffic.
* Improved HTTPS inference switching for custom endpoints and refreshed
onboarding/model menu details.
* Refined OpenShell gateway defaults for port `8080`, including more
reliable readiness checks.
* **Bug Fixes**
* Prevent incorrect provider/model restoration after compatible-provider
update failures.
* Preserve managed MCP state after exec loss and tighten gateway/doctor
status scoping.
* **Tests**
* Stronger, fail-closed release validation with hardened
evidence/artifact handoff and bounded timeouts/retries.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Co-authored-by: Prekshi Vyas <prekshiv@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: docs Documentation, examples, guides, or docs build area: packaging Packages, images, registries, installers, or distribution area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery area: security Security controls, permissions, secrets, or hardening bug-fix PR fixes a bug or regression platform: container Affects Docker, containerd, Podman, or images security v0.0.96 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants