fix(security): close managed runtime audit gaps - #8156
Conversation
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe change updates npm remediation to newer reviewed versions, adds OpenClaw Discord graph patching, refreshes lockfile and package integrity metadata, and expands security documentation and tests. ChangesOpenClaw dependency remediation
Estimated code review effort: 4 (Complex) | ~45 minutes Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@scripts/patch-bundled-npm-brace-expansion.mts`:
- Around line 28-32: Update inspectBundledNpmBraceExpansion to accept
brace-expansion version 5.0.8 as a valid replaceable input, while retaining
5.0.9 as the only replacement output. Extend the associated tests to cover the
5.0.8-to-5.0.9 transition.
🪄 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: 277e9169-fef3-4860-8eff-967321502a43
⛔ Files ignored due to path filters (1)
agents/openclaw/openclaw-runtime/package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (12)
DockerfileDockerfile.baseagents/hermes/Dockerfile.baseagents/langchain-deepagents-code/Dockerfile.baseci/reviewed-npm-audit.jsondocs/security/openclaw-2026.7.1-dependency-review.mddocs/security/sandbox-base-2026-07-25-dependency-review.mdscripts/lib/openclaw-npm-remediation.mtsscripts/patch-bundled-npm-brace-expansion.mtstest/bundled-npm-brace-expansion-dockerfile-contract.test.tstest/openclaw-locked-install.test.tstest/openclaw-npm-remediation.test.ts
PR Review Advisor — No blocking findings reportedAdvisor assessment: No blocking advisor findings reported Model lanes
Second-opinion terminology and E2E selections are advisory. They do not change the primary assessment or E2E / PR Gate. 2 semantic terminology decisionsTerminology decisions are advisory. They affect the assessment only when a separate finding identifies concrete semantic impact.
E2E guidanceAdvisory only. E2E / PR Gate selects and runs jobs independently. Recommended E2E: This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge. |
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
senthilr-nv
left a comment
There was a problem hiding this comment.
Approved. Verified brace-expansion 5.0.9 across the OpenClaw locked runtime and npm-private copy used by OpenClaw, Hermes, and Deep Agents Code. The exact registry SRI and lock guards match, the 5.0.8-to-5.0.9 transition is covered, focused tests pass (45/45), and the CodeRabbit finding is resolved. No blocking security findings; remaining CI must complete successfully.
|
Follow-up: the managed-image production remediation looks correct, but this is not merge-ready yet. |
senthilr-nv
left a comment
There was a problem hiding this comment.
Blocking until the requested remediation is complete. The managed-image copies are updated, but root package-lock.json still resolves affected brace-expansion 5.0.5, 5.0.6, and 2.1.0 instead of the fixed 5.0.9/2.1.4 boundaries. The required reviewed-npm-audit check also fails because the trusted base expects the previous OpenClaw lock SHA. Please resolve both scope and audit-gate issues before merge.
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Allow the trusted reviewed npm audit to recognize an explicitly reviewed lock transition. This lets the current OpenClaw runtime lock and the pending `brace-expansion@5.0.9` lock pass the same base-trusted policy without accepting any unreviewed lock bytes. ## Related Issue Prerequisite for #8156. ## Changes - Advance the reviewed npm audit configuration to schema 3 and replace each single lock digest with a nonempty, unique list of reviewed digests. - Select the exact target lock digest only when it appears in that trusted list, then pass the selected digest through the existing strict source-lock and installed-package verification. - Temporarily list both the current and pending OpenClaw runtime lock digests; keep the mcporter graph restricted to its current digest. - Update focused contracts to cover accepted and rejected transition locks and the shared OpenClaw audit authority. ## Type of Change - [x] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: This changes an internal base-trusted CI audit policy and no supported user-facing behavior. - [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: The exact-head review confirmed the trusted-base boundary remains intact, unlisted lock bytes fail closed, and both existing strict lock verifiers receive one exact selected digest. - [ ] 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: `no-docs-needed` - Evidence: The schema transition is internal CI policy and does not change a supported API, CLI, user configuration, workflow, default, or user-facing error. - Agent: Codex Desktop <!-- docs-review-head-sha: e7d2be9 --> <!-- docs-review-agents-blob-sha: 3dd7c24 --> ## 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 validate:pr` passed after refreshing `origin/main` when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: `vitest` focused integration tests passed, 22/22. - [ ] 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 narrow audit-control 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) - [ ] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) Additional validation: - `npm run source-shape:check` passed. - `npm run build:cli` and `npm run typecheck` passed. - Biome, test title, and Vitest project membership checks passed. - Normal pre-commit and commit-message hooks passed. --- Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Security** * Improved dependency audit verification to support multiple approved lockfile revisions. * Added stricter validation to detect unapproved or mismatched dependency lockfiles before and after installation. * Enhanced error reporting to clearly identify expected and actual lockfile checksums. * **Tests** * Expanded coverage for approved lockfile selection and checksum mismatch scenarios. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
|
Commit SHA
PR #8157 currently authorizes the stale |
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
|
Addressed at exact head
I did not use the proposed OpenClaw lock hash Validation on the reconciled head:
Thanks for catching the engine metadata and the moving advisory set. |
apurvvkumaria
left a comment
There was a problem hiding this comment.
Re-reviewed the expanded dependency-remediation revision at head 5a8f3f8. Registry URLs and SHA-512 identities are pinned; archive extraction rejects traversal, duplicate, symlink, and special-file entries; package identities, engines, and dependency edges are checked; replacement is transactional and revalidated. The trusted-base schema-2 audit transition permits only the old and new exact lock digests, so this branch does not self-authorize its own audit evidence. Focused changed-area validation passed 57 tests. Current CI is still running; the visible coordination failure belongs to a cancelled superseded attempt. Any recurrence of the fake npm-pack fixture failure is nonblocking test-infrastructure work, not supported-product breakage. No blocking correctness, security, compatibility, or regression defect found.
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
|
CI follow-up: the target-tree audit result above is reproducible, but the authoritative PR job correctly runs the remediator and exception registry from the base SHA. That trusted-base run still materializes The repository-governed bridge is #8172 at exact head #8156 remains blocked on that base-trusted transition landing. After it lands, this branch must merge the new |
Dismissed as stale after the requested scope and trusted-audit changes landed. The root production lock now uses brace-expansion 5.0.9 and 2.1.4; the remaining 5.0.6 entry is dev-only, consistent with the later npm audit --omit=dev scope recorded on #8126. Merged #8165 supplies the base-owned schema-2 lock authority, and the current trusted run accepts both final locks: OpenClaw and mcporter locked graphs are clean. The remaining reviewed archive-graph failure is a separate trusted-base bootstrap issue, not the previous lock-SHA mismatch; this dismissal does not waive that CI check.
apurvvkumaria
left a comment
There was a problem hiding this comment.
Re-reviewed the test-hardening delta at head ced321f. It makes the trusted locked-graph contract exact, applies legacy-field rejection to every graph, and independently exercises the OpenClaw core and Discord shrinkwrap and bundled-undici validation paths. The delta changes tests only and directly closes the current automated-review coverage gaps; it does not alter runtime behavior. No blocking correctness, security, compatibility, or regression defect found. CI remains authoritative while the new run completes.
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
senthilr-nv
left a comment
There was a problem hiding this comment.
Approved at verified head ced321f. The independent Undici shrinkwrap and bundled-package rejection paths now have direct coverage, and the reviewed lock authority rejects extra or duplicate graphs while checking every entry. Focused integration tests pass 47/47, npm run validate:pr passes, npm run docs passes, the documentation writer receipt matches this head, and no blocking security finding remains. The current DGX Station revoked-host-key installer test failure is outside this PR's changed paths; required CI remains authoritative for merge.
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary The sandbox serving watchdog previously recovered an alive but unusable OpenClaw gateway only after an uninterrupted sequence of connection-refused health probes. A listener can also become unusable when a socket accepts and stalls, accepts and drops the connection, or answers `/health` with an error status. The watchdog treated each of those results as evidence that a listener existed. It rearmed without a log entry or recovery, so the gateway remained unable to serve. The watchdog now uses the same response requirement as the boot-time readiness check: `/health` must answer `200` or `401`. It recovers each not-serving result. It still does not act before a gateway has served or when the probe cannot run. ## Related Issue Fixes #7377 ## Changes - `scripts/nemoclaw-start.sh`: added `gateway_watchdog_probe_gateway`, which classifies a health probe as serving (`/health` answered `200` or `401`), not serving (refused, timed out, reset, empty reply, or an HTTP error status), or inconclusive (the probe itself could not run). The watchdog now counts every not-serving outcome toward one threshold instead of requiring consecutive `curl` exit 7 results. - `scripts/nemoclaw-start.sh`: inconclusive probes hold the watchdog's armed state and streak rather than rearming it, so a missing or failing `curl` can never escalate into a kill loop against a healthy gateway. The watchdog also exits early with a message when `curl` is absent. - `scripts/nemoclaw-start.sh`: each failed probe now logs the cause it observed, such as `connection refused`, `probe timeout`, `connection reset`, or `HTTP 503`. An operator can distinguish a refused port from a listener that accepts connections but cannot serve. - `docs/reference/troubleshooting.mdx`: documented the serving definition, the wedge symptoms users see (`gateway_transport_error`, `1006 abnormal closure`, container `running` with no restarts, replies still arriving over the embedded fallback route), and what a `health probe inconclusive` line means. - `test/gateway-serving-watchdog.test.ts` (new) and `test/nemoclaw-start-gateway.test-helpers.ts` (new): the watchdog suite moved to its own file with the shared shell-harness helpers extracted, keeping both files inside `ci/test-file-size-budget.json`. - `test/gateway-serving-watchdog.test.ts`: the PID-swap regression now emits HTTP `200` on the predecessor's successful probe, so it proves that the replacement gateway does not inherit the predecessor's armed state. The arming rule (never act until the gateway has served at least once), the PID-identity and cmdline checks before signalling, the respawn-marker handshake, and the `NEMOCLAW_GATEWAY_WATCHDOG_*` environment variable names are all unchanged. ### Why the reported sandboxes never recovered The old counter required four *consecutive* connection-refused probes. A wedge that alternated between refused and any other failure mode reset that counter on every other probe, which is why the reporter's manual `curl` showed `(7)` while the watchdog had still never escalated. That path is now covered by a regression test. The non-refused outcomes were previously delegated to the Docker `HEALTHCHECK`. Nothing restarts an unhealthy OpenShell sandbox container, which matches the reported "container restart count: 0" with the gateway wedged indefinitely. ## 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 — reviewer/approval link/justification: Codex Desktop exact-head security review PASS for head `e0c4d7ef9efdadfd19ec494e19edfcad8947d76a` against base `e9fb170a2e3e4c4dcfa19e398232f71b8f2bace6`; all nine categories pass with no findings. The serving prerequisite, strict 200/401 classifier, inconclusive fail-safe, PID start-identity check, gateway command-line check, and signal-time identity revalidation remain intact. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — no check is accepted, skipped, or waived. The current sandbox-image and reviewed npm-audit failures are hard blockers from dependency advisories on the current base and are being remediated by #8156; this PR must rerun and pass those gates before merge. ## Documentation Writer Review - [x] Documentation writer subagent reviewed the completed changes - Result: `docs-updated` - Evidence: `docs/reference/troubleshooting.mdx`; verified the watchdog behavior, user-visible impact, recovery instructions, and lifecycle limits against the exact implementation and focused tests. Documentation build passed with 0 errors and 2 baseline Fern warnings. - Agent: Codex Desktop <!-- docs-review-head-sha: e0c4d7e --> <!-- docs-review-agents-blob-sha: 3dd7c24 --> ## 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 validate:pr` passed after refreshing `origin/main` when hooks were skipped or unavailable — `npm run validate:pr` passed at exact head `e0c4d7ef9efdadfd19ec494e19edfcad8947d76a`; the final maintainer commit also passed normal pre-commit and commit-msg hooks. - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result: `npx vitest run --project integration test/gateway-serving-watchdog.test.ts` → 18 passed. The combined watchdog and gateway-health run passed 41 of 42 tests; the sole failure is the neighboring lock-cleanup fixture invoking GNU `timeout`, which is absent on this macOS host. CI remains authoritative for the full Linux run. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — not claimed locally. Exact-head `npm run validate:pr`, CLI build, plugin build, focused tests, `git diff --check`, and `npm run docs` passed; required GitHub CI and E2E must pass before merge. - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [x] `npm run docs` builds without warnings (doc changes only) — completed with 0 errors and 2 pre-existing non-blocking Fern warnings (local Fern authentication and light-mode accent contrast). - [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) — no new doc pages. ### How the fix was verified against the reported failure Each wedge signature was driven through the real watchdog loop with a scripted probe sequence and a real background process standing in for the gateway. Before the change, only the pure-refused sequence produced any output at all; timeout, reset, empty-reply, HTTP-error, and alternating sequences produced complete silence and no recovery. After the change, each not-serving sequence reaches the recovery threshold. A gateway that has not served, a `401` response, a recovering gateway, and an unrunnable probe leave the gateway process running. --- Signed-off-by: Tony Luo <xialuo@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved gateway health monitoring to distinguish serving, failed, and inconclusive checks. * Recognizes successful and authentication responses, connection failures, timeouts, resets, empty replies, and HTTP errors. * Restarts unresponsive gateways after the configured consecutive-failure threshold while avoiding action on inconclusive checks. * Validates the gateway process before triggering a restart and applies safe defaults for invalid settings. * **Documentation** * Expanded troubleshooting guidance for health checks, transport errors, fallback behavior, and recovery limitations. * **Tests** * Added comprehensive coverage for monitoring, recovery thresholds, status handling, process validation, and restart races. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Tony Luo <xialuo@nvidia.com> Signed-off-by: Carlos Villela <cvillela@nvidia.com> Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: Prekshi Vyas <34834085+prekshivyas@users.noreply.github.com> Co-authored-by: Prekshi Vyas <prekshiv@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Keep the reviewed npm-audit provenance tests fail-closed after #8156 merged the clean root, OpenClaw, and mcporter dependency graphs. Derive the expected mcporter audit status and advisory list from the parsed checked-in exception policy instead of hard-coding one policy state. Keep generic audit tests independent from that production file while separately asserting that the checked-in registry remains empty. ## Related Issue Post-remediation contract follow-up to #8156. The separate MCP discovery runtime remediation remains owned by #8177 and #8180. ## Changes - Derive mcporter base-provenance fixtures and mocked audit results from the checked-in exception policy. - Keep the generic empty-policy fixture immutable and independently assert that `ci/npm-audit-exceptions.json` contains no entries. - Remove all seven temporary transition exceptions and all duplicated MCP dependency changes from this PR now that #8156 is on `main` and #8180 owns the MCP fix. ## Type of Change - [x] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: the effective diff changes test fixtures and assertions only; no supported API, CLI, configuration, workflow, default, error, or user-facing behavior changes. - [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: the exact effective diff only derives expected audit provenance from the parsed checked-in policy and retains fail-closed mismatch coverage. The production policy remains empty and no exception or enforcement behavior changes. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: no exception is requested; exact-head CI is authoritative. ## Documentation Writer Review - [x] Documentation writer subagent reviewed the completed changes - Result: `no-docs-needed` - Evidence: The independent writer reviewed the two-file effective diff and confirmed that it changes test fixtures and assertions only. The checked-in exception registry remains empty. The focused provenance and reviewed-audit suites pass 84/84, and `git diff --check` passes. - Agent: Codex Desktop, independent documentation-writer subagent <!-- docs-review-head-sha: 76ef46a --> <!-- docs-review-agents-blob-sha: 3dd7c24 --> ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: Not applicable; DGX Station preparation is unchanged. - Station profile/scenario: Not applicable. - Result: Not applicable. - Supporting evidence: Not applicable. ## Verification - [x] PR description includes a `Signed-off-by:` line and every pushed commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run validate:pr` passed after refreshing `origin/main` when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set — 84/84 tests passed across the reviewed-audit and OpenClaw integrity-pin suites. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — not applicable to this two-test-file contract hardening; required CI remains authoritative. - [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) — not applicable; no documentation changes remain in the effective diff. - [x] Doc pages follow the style guide (doc changes only) — not applicable. - [ ] New doc pages include SPDX header and frontmatter (new pages only) Additional evidence: - Current base: merged #8156 commit `15069f9262d52b74d8916b7a0d7969a9ae4d3ee1`. - Effective diff: `test/openclaw-integrity-pin-suite.ts` and `test/reviewed-npm-audit.test.ts` only. - Checked-in `ci/npm-audit-exceptions.json`: schema version 1 with an empty `exceptions` array. - No MCP manifest, lock, dependency-review, audit exception, or runtime file changes remain in this PR. --- Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> --------- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> Signed-off-by: J. Yaunches <jmyaunch@gmail.com> Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Julie Yaunches <jyaunches@nvidia.com>
## Summary Starting a stopped Shields-protected sandbox could leave the Docker container running while OpenShell remained outside Ready. NemoClaw waited for image-level Docker health before it restored startup state, and non-root OpenClaw startup could not inspect optional credential paths once the state tree was sealed. This change hands a running container to trusted startup recovery, restores the narrow traversal permission needed for an empty credentials directory, and then verifies gateway and host-forward readiness. ## Related Issue Fixes #8112 ## Changes - Add an internal `runtime-running` recovery boundary for the explicit Docker lifecycle `start` consumer. Other recovery callers retain the stricter Docker-health boundary. - Restore locked startup access before process recovery and final gateway verification, using the existing Shields mutation lock and a descriptor-safe state guard. - Give only an empty sealed `credentials` directory `root:sandbox 0710`; keep it non-listable and non-writable, and restore `root:root 0700` when entries exist. - Preserve sealed gateway-token and auth-profile state during non-root startup, failing closed when required state is missing or unsafe. - Add CLI, shell, state-guard, documentation, and live E2E regression coverage for OpenClaw and Hermes with Shields enabled and disabled. - Document the two-stage start sequence and the sealed credential-access boundary. ## 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 — reviewer/approval link/justification: NemoClaw security review passed all nine categories with no findings. The helper is descriptor-safe, no-follow, same-device, lock-protected, bounded, and fail-closed. Only an empty sealed directory receives group search permission; populated storage stays root-only. The live test confirmed traversal is allowed while listing and writing remain denied. - [x] Non-success, skipped, or missing CI check accepted by maintainer — `reviewed-npm-audit` and its dependent `checks`/E2E coordination results; approval: #8146 (comment); follow-up: #8116 and #8156. ## Documentation Writer Review - [x] Documentation writer subagent reviewed the completed changes - Result: `docs-updated` - Evidence: `docs/manage-sandboxes/run-sandboxes.mdx`, `docs/security/best-practices.mdx`, and generated OpenClaw, Hermes, and Deep Agents guide variants; variant sync, 9 focused documentation tests, and the full docs build passed with 0 errors and 2 existing warnings. - Agent: Codex Desktop <!-- docs-review-head-sha: e9735c3 --> <!-- docs-review-agents-blob-sha: 3dd7c24 --> ## 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 validate:pr` passed after refreshing `origin/main` when hooks were skipped or unavailable - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — after refreshing from current `main`, seven focused files passed 208 tests with one skip; state-guard, documentation, shell syntax, Python compilation, type-check, and repository 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) - [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) Live Brev Linux validation on `nemoclaw-launchable-433-aug03` for commit `b5db426864a19754db7ee737113a82663df24163`: - Compiled the candidate CLI and matched the installed startup script to the candidate source. - Stopped and restarted `issue-8112-openclaw`; startup restored sandbox state before gateway and host-forward verification and exited successfully. - OpenShell reported Ready, Docker reported running and healthy, and the OpenClaw gateway was running. - The empty credentials directory was `root:sandbox 0710`; the sandbox user could traverse a known path but could not list or write the directory. - A populated disposable credentials directory was restored to `root:root 0700`, with sandbox metadata access denied. --- Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved sandbox recovery after container restarts, including restoration of managed startup processes. * Sandboxes can now become ready as soon as the runtime is running, without waiting for Docker health checks to complete. * Improved recovery validation for OpenClaw, Hermes, and Shields configurations. * **Documentation** * Updated sandbox startup documentation to describe process recovery and runtime readiness checks. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com> Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: Julie Yaunches <jyaunches@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Prepares the canonical v0.0.102 release documentation from the current release-labeled scope. The change adds a dated changelog for all 38 user-facing shipping PRs and corrects the OpenClaw agent command reference for the behavior delivered by #8191. ## Changes - Add `docs/changelog/2026-08-04.mdx` with the v0.0.102 release summary, detailed behavior changes, support boundaries, security evidence links, and links to durable documentation. - Update `docs/reference/commands.mdx` to describe non-JSON OpenClaw output capture, its combined limit, marker handling, stream suppression, recovery guidance, and exit behavior. - [#8167](#8167) -> `docs/changelog/2026-08-04.mdx`: Records authenticated attachment of operator-managed llama.cpp servers. - [#8129](#8129) -> `docs/changelog/2026-08-04.mdx`: Records the Experimental managed vLLM profile for two DGX Spark systems. - [#7983](#7983) -> `docs/changelog/2026-08-04.mdx`: Records qualification of the May 2026 GB300WS factory image. - [#8207](#8207) -> `docs/changelog/2026-08-04.mdx`: Records the qualified DGX Station driver transaction. - [#8208](#8208) -> `docs/changelog/2026-08-04.mdx`: Records mode-bound Express resume state. - [#8158](#8158) -> `docs/changelog/2026-08-04.mdx`: Records recovery of host-global dual-Station runtime ownership. - [#8145](#8145) -> `docs/changelog/2026-08-04.mdx`: Records Windows-host Ollama validation from Docker Desktop's network context. - [#8190](#8190) -> `docs/changelog/2026-08-04.mdx`: Records HTTP model pulls when WSL has no local Ollama executable. - [#8195](#8195) -> `docs/changelog/2026-08-04.mdx`: Records reuse of a healthy installer-managed CLI. - [#8053](#8053) -> `docs/changelog/2026-08-04.mdx`: Records early rejection of incompatible OpenShell gateway versions. - [#8098](#8098) -> `docs/changelog/2026-08-04.mdx`: Records the bounded package-service-to-standalone gateway recovery transition. - [#8216](#8216) -> `docs/changelog/2026-08-04.mdx`: Records the final dashboard port selected during multi-sandbox onboarding. - [#8146](#8146) -> `docs/changelog/2026-08-04.mdx`: Records managed startup-state restoration for stopped sandboxes. - [#8092](#8092) -> `docs/changelog/2026-08-04.mdx`: Records gateway watchdog recovery for classified not-serving states. - [#8182](#8182) -> `docs/changelog/2026-08-04.mdx`: Records consistent managed-recovery wait configuration. - [#8040](#8040) -> `docs/changelog/2026-08-04.mdx`: Records Docker sandbox rollback authority through late validation. - [#8130](#8130) -> `docs/changelog/2026-08-04.mdx`: Records bounded Shields deadline recovery and durable containment. - [#8086](#8086) -> `docs/changelog/2026-08-04.mdx`: Records repair of narrowly validated permission-only configuration drift. - [#8122](#8122) -> `docs/changelog/2026-08-04.mdx`: Records prompt failure and guidance for corrupt transition locks. - [#8124](#8124) -> `docs/changelog/2026-08-04.mdx`: Records policy restoration flags, previews, and target revalidation. - [#7886](#7886) -> `docs/changelog/2026-08-04.mdx`: Records explicit destruction after pre-delete Shields hardening failures while preserving recovery authority. - [#7901](#7901) -> `docs/changelog/2026-08-04.mdx`: Records multi-port uninstall behavior and shared-resource preservation. - [#7984](#7984) -> `docs/changelog/2026-08-04.mdx`: Records one classified transient remote MCP startup retry. - [#7954](#7954) -> `docs/changelog/2026-08-04.mdx`: Records bounded hosted-inference probe replies. - [#7574](#7574) -> `docs/changelog/2026-08-04.mdx`: Records preservation of validated reasoning capabilities through onboarding. - [#8089](#8089) -> `docs/changelog/2026-08-04.mdx`: Records proxy routing for Hermes WhatsApp pairing and media traffic. - [#7682](#7682) -> `docs/changelog/2026-08-04.mdx`: Records native Hermes session deletion and identifier validation. - [#8150](#8150) -> `docs/changelog/2026-08-04.mdx`: Records corporate CA trust for LangChain Deep Agents Code image builds. - [#8156](#8156) -> `docs/changelog/2026-08-04.mdx`: Records reviewed managed runtime dependency remediation. - [#8180](#8180) -> `docs/changelog/2026-08-04.mdx`: Records reviewed MCP discovery runtime dependency updates. - [#8196](#8196) -> `docs/changelog/2026-08-04.mdx`: Records private npm dependency remediation across managed images. - [#8203](#8203) -> `docs/changelog/2026-08-04.mdx`: Records reviewed Hermes and LangChain Deep Agents Code Python dependency updates. - [#8125](#8125) -> `docs/changelog/2026-08-04.mdx`: Records bounded diagnostics for invalid enumerated CLI values. - [#8193](#8193) -> `docs/changelog/2026-08-04.mdx`: Records bounded diagnostics for unresolved sandbox base images. - [#8118](#8118) -> `docs/changelog/2026-08-04.mdx`: Records bounded diagnostics for changed gateway authority. - [#8191](#8191) -> `docs/changelog/2026-08-04.mdx`, `docs/reference/commands.mdx`: Records output capture, marker handling, recovery guidance, and exit behavior for non-JSON OpenClaw agent commands. - [#8187](#8187) -> `docs/changelog/2026-08-04.mdx`: Records the aligned interactive-installation start across supported agents. - [#8153](#8153) -> `docs/changelog/2026-08-04.mdx`: Records current product capabilities and support boundaries. ## 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 - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: This documentation-only release preparation does not change executable behavior. Existing changelog and published-route tests pass. - [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: Independently reviewed `docs/changelog/2026-08-04.mdx` and `docs/reference/commands.mdx` at commit `b89913780`. All 38 user-facing v0.0.102 PRs are represented, #8191 behavior matches the implementation, and the writing rules, documentation style, controlled terminology, route structure, and skip policy pass review. Targeted tests pass 36/36 and the documentation build completes with 0 errors. - Agent: Codex Desktop independent documentation writer <!-- docs-review-head-sha: b899137 --> <!-- docs-review-agents-blob-sha: 3dd7c24 --> ## 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 validate:pr` passed after refreshing `origin/main` 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 integration test/changelog-docs.test.ts test/check-docs-published-routes.test.ts` passed 36/36. - [x] Applicable broad gate passed — not applicable to documentation-only changes; `npm run docs` completed successfully with 0 errors. - [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 Fern warnings. - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [x] New doc pages include SPDX header and frontmatter (new pages only) — the native dated changelog 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** - Added release notes for v0.0.102, covering authentication, hardware setup, WSL, installer recovery, sandbox resilience, policy management, inference reliability, CLI improvements, and unified quickstarts. - Updated command documentation to explain how non-JSON agent output is collected, replayed, and reported. - **Bug Fixes** - Improved command-output recovery guidance when output exceeds limits or contains unsupported fallback markers. - Preserved accurate command exit-status reporting after output processing. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Summary
Close the high-severity npm audit gaps in the managed OpenClaw and mcporter production boundaries.
This keeps the existing OpenClaw 2026.7.1 product scope and replaces only reviewed vulnerable dependency identities.
PR #8126 is merged into this branch so San Dang and Apurv Kumaria retain their original root-remediation commits and authorship.
Changes
brace-expansion@5.0.9,fast-uri@3.1.5,undici@8.10.0, andip-address@10.3.1with exact registry URLs and SRI values.fast-uri@3.1.5andip-address@10.3.1through exact manifest overrides.undici@8.5.0across its manifest, shrinkwrap,bundledDependencies, and physicalnode_modulestree.Type of Change
Quality Gates
1d28516eac51effbd690f8bf1847e59571ac5118.Documentation Writer Review
docs-updatedagents/openclaw/dependency-review.md,docs/security/openclaw-2026.7.1-dependency-review.md, anddocs/security/sandbox-base-2026-07-25-dependency-review.md; their content is unchanged from the exact head wherenpm run docspassed. The final doctor-boundary test passed 1/1, the load-timed-out setup test passed 1/1 in isolation, and normal pre-commit and commit-msg hooks passed. The final test-only hardening requires no additional documentation.Dependency Review
brace-expansion@5.0.9fast-uri@3.1.5undici@8.10.0ip-address@10.3.1v10.2.0..v10.3.1range, exact MIT no-dependency archive, two registry signatures, SLSA provenance, content-identical source build, and 3,571 upstream tests verified. The annotated tag is unsigned.main. The OpenClaw lock759b31779f40867f35f15065b582eb1d3efb8fddb1fe43c207507c905fa2a421and mcporter lock962dee34f6b0a493521d1619d1cf030e2630cbdfce8bf0598217202f57078793are now each the sole trustedlockSha256; temporary successor fields were removed.Licenses remain compatible: MIT, BSD-3-Clause, and the existing graph licenses. No replacement adds a runtime dependency or lifecycle script.
Security Review
DGX Station Hardware Evidence
Verification
Signed-off-by:line and every pushed commit appears asVerifiedin GitHubpre-commit,commit-msg, andpre-pushhooks passed, ornpm run validate:prpassed after refreshingorigin/mainwhen hooks were skipped or unavailablenpm testfor broad runtime/test-harness changes;npm run checkfor repo-wide validation/coverage changes — command/result: not applicable to the reviewed dependency and integrity-boundary update; required CI remains authoritative.npm run docsbuilds without warnings (doc changes only) — 0 errors and 2 existing hidden Fern warnings.Additional validation:
npm run build:cli,npm run typecheck:cli,npm run checks:repository, focused documentation tests, andnpm run docspassed.lockSha256.Signed-off-by: Julie Yaunches jyaunches@nvidia.com
Signed-off-by: Prekshi Vyas prekshiv@nvidia.com
Summary by CodeRabbit
Security
brace-expansion,fast-uri,undici, andip-address.Bug Fixes
Tests