Skip to content

fix(installer): ignore route-only sandbox reservations - #6764

Merged
cv merged 3 commits into
mainfrom
fix/ignore-pending-reservations
Jul 13, 2026
Merged

fix(installer): ignore route-only sandbox reservations#6764
cv merged 3 commits into
mainfrom
fix/ignore-pending-reservations

Conversation

@sandl99

@sandl99 sandl99 commented Jul 13, 2026

Copy link
Copy Markdown
Collaborator

Summary

Interrupted onboarding can leave a route-only registry reservation before sandbox registration. The installer previously counted that reservation as a real sandbox, requested legacy managed-image provenance, and failed strict backup even though there was no sandbox to back up. This completes the remaining #6500 registry case after #6723 while keeping real and legacy sandboxes fail-closed.

Related Issue

Fixes #6500

Changes

  • Define a route-only reservation narrowly as pendingRouteReservation: true without createdAt.
  • Exclude only those reservations from installer counting and provenance checks, strict backup-all, automatic sandbox recovery, and the installer's existing-session guard.
  • Preserve backup and recovery handling for legacy rows and registered sandboxes that temporarily carry the pending marker.
  • Add pending-only and mixed-registry regressions across registry, installer, backup, recovery, and full installer onboarding paths.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification: This corrects transient internal registry classification; existing docs already describe backup/recovery for registered sandboxes and direct interrupted onboarding to nemoclaw onboard --resume.
  • 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: Independent read-only review found no correctness or safety issues; the predicate remains fail-closed for legacy and registered sandbox rows.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Verification

  • PR description includes the DCO sign-off declaration 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 — npx vitest run --project cli src/lib/state/registry-route-reservation.test.ts src/lib/actions/maintenance.test.ts src/lib/actions/upgrade-sandboxes-preflight.test.ts src/lib/actions/upgrade-sandboxes-recovery.test.ts (67 passed); npx vitest run --project integration test/install-openshell-upgrade-prompt.test.ts test/install-preexisting-sandbox-recovery.test.ts (24 passed); npm run typecheck:cli; npm run test:projects:check; shellcheck scripts/install.sh.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result:
  • 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)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: San Dang sdang@nvidia.com

Summary by CodeRabbit

  • Bug Fixes
    • Route-only sandbox reservations (pending with no creation timestamp) are now excluded from session detection, backups, upgrades, and recovery.
    • Mixed registries process only fully registered sandboxes, avoiding placeholder entries during preflight and rebuild flows.
    • Guard logic during OpenShell upgrade now ignores route-only reservations and confirms only actionable backups.
  • Tests
    • Added/extended coverage for reservation-only and mixed-registry scenarios across installation, backup, upgrade preflight, recovery, and retargeting.

Signed-off-by: San Dang <sdang@nvidia.com>
@sandl99 sandl99 self-assigned this Jul 13, 2026
@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 072f1e16-02dd-4efe-96de-499178baf152

📥 Commits

Reviewing files that changed from the base of the PR and between 0761ccd and 201d172.

📒 Files selected for processing (2)
  • scripts/install.sh
  • test/install-preexisting-sandbox-recovery.test.ts
🚧 Files skipped from review as they are similar to previous changes (2)
  • scripts/install.sh
  • test/install-preexisting-sandbox-recovery.test.ts

📝 Walkthrough

Walkthrough

The registry now identifies route-only reservations and excludes them from sandbox backup, upgrade recovery, installer counts, and ambiguous-name detection. Tests cover reservation state transitions, empty or mixed registries, and installer onboarding and upgrade behavior.

Changes

Route reservation filtering

Layer / File(s) Summary
Reservation predicate and state assertions
src/lib/state/registry.ts, src/lib/state/registry-route-reservation.test.ts
Adds isRouteOnlySandboxReservation and verifies reservation rows before and after retargeting.
Backup and upgrade filtering
src/lib/actions/maintenance.ts, src/lib/actions/maintenance.test.ts, src/lib/actions/upgrade-sandboxes.ts, src/lib/actions/upgrade-sandboxes-*.test.ts
Excludes route-only reservations from backup and upgrade recovery, with tests for empty and mixed registries.
Installer registry inspection and guard
scripts/install.sh, test/install-*.test.ts
Filters placeholder entries from installer counts and ambiguous names, and tests onboarding and pre-upgrade backup behavior.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Installer
  participant Registry
  participant Backup
  Installer->>Registry: Inspect sandbox registry
  Registry-->>Installer: Return registered sandbox count
  Installer->>Backup: Back up registered sandboxes
  Backup-->>Installer: Return RESTORE and CONFIRMED_NAMES
Loading

Possibly related PRs

Suggested labels: NV QA, area: cli, area: sandbox

Suggested reviewers: cv, ericksoa

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 40.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Concise and specific; it clearly summarizes the installer change to ignore route-only sandbox reservations.
Linked Issues check ✅ Passed The change addresses #6500 by excluding inert route-only reservations from backup, recovery, and session detection, preventing the strict-backup abort.
Out of Scope Changes check ✅ Passed The edits stay focused on the reservation-handling fix and supporting tests, with no obvious unrelated feature work.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/ignore-pending-reservations

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

@github-actions

github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: cloud-onboard, onboard-repair, onboard-resume, state-backup-restore, upgrade-stale-sandbox
Optional E2E: openshell-gateway-upgrade

Dispatch hint: cloud-onboard,onboard-repair,onboard-resume,state-backup-restore,upgrade-stale-sandbox

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • cloud-onboard: Required installer validation: install.sh changes affect clean-host installation and the onboarding handoff.
  • onboard-repair: Required lifecycle-state validation: persisted registry state and recovery behavior must converge without treating route-only reservations as real sandboxes.
  • onboard-resume: Required lifecycle-state validation: onboarding must resume correctly when registry state contains partial route reservations.
  • state-backup-restore: Required upgrade/rebuild validation: backup filtering must preserve and restore actual sandbox state while excluding reservation-only rows.
  • upgrade-stale-sandbox: Required upgrade/rebuild validation: stale-sandbox upgrade and recovery must not rebuild route-only reservations.

Optional E2E

  • openshell-gateway-upgrade: Adjacent confidence for the installer/OpenShell upgrade path that invokes pre-upgrade backup and recovery logic.

New E2E recommendations

  • lifecycle-state (medium): Current changes have unit and installer-script coverage, but no identified live E2E proves a route-only reservation is ignored during backup/upgrade while a real sandbox in the same registry remains backed up and recovered.
    • Suggested test: Add a live mixed-registry upgrade scenario: reserve an inference route without creating its sandbox, create a real sandbox, run pre-upgrade backup and automatic recovery, and assert only the real sandbox is backed up/rebuilt while the reservation remains non-default and untouched.

Dispatch hint

  • Workflow: e2e.yaml
  • jobs input: cloud-onboard,onboard-repair,onboard-resume,state-backup-restore,upgrade-stale-sandbox

@github-code-quality

github-code-quality Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage remains at 96%, unchanged from the main branch.

TypeScript / code-coverage/cli

The overall coverage in the fix/ignore-pending-r... branch remains at 79%, unchanged from the main branch.

Show a code coverage summary of the most impacted files.
File main 3de1de6 fix/ignore-pending-r... 201d172 +/-
src/lib/inferen...time-context.ts 96% 94% -2%
src/lib/actions/maintenance.ts 81% 81% 0%
src/lib/actions...de-sandboxes.ts 89% 89% 0%
src/lib/state/registry.ts 88% 90% +2%
src/lib/state/gateway.ts 88% 90% +2%
src/lib/state/m...-acquisition.ts 77% 81% +4%
src/lib/inference/local.ts 71% 77% +6%
src/lib/actions...ge-preflight.ts 74% 89% +15%
src/lib/inferen...del-registry.ts 66% 100% +34%

Updated July 13, 2026 11:20 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@github-actions

github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings

Merge posture: No blocking advisor findings
Primary next action: No advisor follow-up required beyond maintainer review.
Findings: 0 required · 0 warnings · 0 optional suggestions
Since last review: 0 prior items resolved · 0 still apply · 0 new items found

Workflow run details

This is an automated review. Required findings need action before merge. Warnings and optional suggestions do not require a response or follow-up. A human maintainer makes the final merge decision.

Signed-off-by: San Dang <sdang@nvidia.com>
@sandl99 sandl99 added bug-fix PR fixes a bug or regression area: install Install, setup, prerequisites, or uninstall flow VDR Linked to VDR finding labels Jul 13, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
src/lib/actions/upgrade-sandboxes-preflight.test.ts (1)

40-44: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Do not duplicate the production reservation predicate in the mock.

This mock reimplements the classification logic, so the test can pass even if registry.ts changes. Use a partial mock that retains the real isRouteOnlySandboxReservation export, or move the pure predicate to a shared module and import it from both places.

Suggested partial mock
-vi.mock("../state/registry", () => ({
-  isRouteOnlySandboxReservation: (entry: { pendingRouteReservation?: true; createdAt?: string }) =>
-    entry.pendingRouteReservation === true && entry.createdAt === undefined,
-  listSandboxes: mocks.listSandboxes,
-}));
+vi.mock("../state/registry", async (importOriginal) => {
+  const actual = await importOriginal<typeof import("../state/registry")>();
+  return {
+    ...actual,
+    listSandboxes: mocks.listSandboxes,
+  };
+});

As per path instructions, tests should verify behavior through the public boundary and must not copy production algorithms.

🤖 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 `@src/lib/actions/upgrade-sandboxes-preflight.test.ts` around lines 40 - 44,
Update the vi.mock for "../state/registry" in the upgrade sandbox preflight
tests to preserve and reuse the real isRouteOnlySandboxReservation export
instead of defining a duplicate predicate. Keep only the necessary mocked
exports, such as listSandboxes, while retaining the production implementation
for behavior verification through the public boundary.

Source: Path instructions

scripts/install.sh (1)

1726-1728: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicated route-only reservation predicate risks drift.

This inline Node snippet re-implements the exact same condition as isRouteOnlySandboxReservation in src/lib/state/registry.ts (pendingRouteReservation === true && entry.createdAt === undefined). Since scripts/install.sh can't import the TS module, consider adding a comment here pointing back to the canonical definition so future changes to the predicate are mirrored, or add a regression test that fails if the two definitions diverge.

💡 Suggested comment anchor
+// Keep this predicate in sync with isRouteOnlySandboxReservation()
+// in src/lib/state/registry.ts (pendingRouteReservation && !createdAt).
 const sandboxes = entries.filter(
   ([, entry]) => !(entry.pendingRouteReservation === true && entry.createdAt === undefined),
 );
🤖 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 `@scripts/install.sh` around lines 1726 - 1728, Add a concise comment
immediately above the `sandboxes` filter in the install script referencing
`isRouteOnlySandboxReservation` in `src/lib/state/registry.ts` as the canonical
predicate, and state that this inline condition must remain synchronized with
it.
🤖 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 `@src/lib/state/registry-route-reservation.test.ts`:
- Around line 47-50: Remove both added if-throw guards around the getSandbox
assertions in the registry reservation tests. Assert each reservation is defined
with the test framework before accessing its properties, then retain the
existing createdAt and route-only assertions for both retargeted cases.

---

Nitpick comments:
In `@scripts/install.sh`:
- Around line 1726-1728: Add a concise comment immediately above the `sandboxes`
filter in the install script referencing `isRouteOnlySandboxReservation` in
`src/lib/state/registry.ts` as the canonical predicate, and state that this
inline condition must remain synchronized with it.

In `@src/lib/actions/upgrade-sandboxes-preflight.test.ts`:
- Around line 40-44: Update the vi.mock for "../state/registry" in the upgrade
sandbox preflight tests to preserve and reuse the real
isRouteOnlySandboxReservation export instead of defining a duplicate predicate.
Keep only the necessary mocked exports, such as listSandboxes, while retaining
the production implementation for behavior verification through the public
boundary.
🪄 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: dff905f6-e53c-4bea-b835-8f5672518733

📥 Commits

Reviewing files that changed from the base of the PR and between 3de1de6 and 7e65cb1.

📒 Files selected for processing (10)
  • scripts/install.sh
  • src/lib/actions/maintenance.test.ts
  • src/lib/actions/maintenance.ts
  • src/lib/actions/upgrade-sandboxes-preflight.test.ts
  • src/lib/actions/upgrade-sandboxes-recovery.test.ts
  • src/lib/actions/upgrade-sandboxes.ts
  • src/lib/state/registry-route-reservation.test.ts
  • src/lib/state/registry.ts
  • test/install-openshell-upgrade-prompt.test.ts
  • test/install-preexisting-sandbox-recovery.test.ts

Comment thread src/lib/state/registry-route-reservation.test.ts Outdated

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

Caution

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

⚠️ Outside diff range comments (1)
test/install-preexisting-sandbox-recovery.test.ts (1)

76-85: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Clear inherited NEMOCLAW_SINGLE_SESSION before applying the test option.

Spreading process.env leaves a runner-provided value active when singleSession is omitted or false, allowing tests to execute a different installer path nondeterministically. Remove that key from the copied environment first. As per coding guidelines, deterministic tests must clear environment/global stubs.

Proposed fix
+  const childEnv = { ...process.env };
+  delete childEnv.NEMOCLAW_SINGLE_SESSION;
+
   const result = spawnSync("bash", ["-c", snippet], {
     encoding: "utf-8",
     env: {
-      ...process.env,
+      ...childEnv,
       BASH_ENV: "",
       ENV: "",
       HOME: tmp,
🤖 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/install-preexisting-sandbox-recovery.test.ts` around lines 76 - 85,
Update the spawnSync environment setup in the test to remove inherited
NEMOCLAW_SINGLE_SESSION after spreading process.env and before applying
options.singleSession. Preserve setting it to "1" only when singleSession is
enabled, ensuring omitted or false options always run with the variable cleared.

Source: Coding guidelines

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

Outside diff comments:
In `@test/install-preexisting-sandbox-recovery.test.ts`:
- Around line 76-85: Update the spawnSync environment setup in the test to
remove inherited NEMOCLAW_SINGLE_SESSION after spreading process.env and before
applying options.singleSession. Preserve setting it to "1" only when
singleSession is enabled, ensuring omitted or false options always run with the
variable cleared.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: d78fdafa-995c-48f7-9b70-11ac588f568e

📥 Commits

Reviewing files that changed from the base of the PR and between 7e65cb1 and 0761ccd.

📒 Files selected for processing (2)
  • src/lib/state/registry-route-reservation.test.ts
  • test/install-preexisting-sandbox-recovery.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/lib/state/registry-route-reservation.test.ts

Signed-off-by: San Dang <sdang@nvidia.com>
@NVIDIA NVIDIA deleted a comment from github-actions Bot Jul 13, 2026
@prekshivyas prekshivyas self-assigned this Jul 13, 2026
@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All selected tests passed

Run: 29261650292
Workflow ref: fix/ignore-pending-reservations
Requested targets: cloud-onboard,onboard-repair,onboard-resume,state-backup-restore,upgrade-stale-sandbox
Requested test IDs: (default — all default-enabled tests; explicit-only tests openshell-gateway-auth-contract, mcp-bridge-dev, hermes-gpu-startup, sandbox-rlimits-connect, and jetson-nvmap-gpu are skipped unless selected)
Summary: 5 passed, 0 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result
cloud-onboard ✅ success
onboard-repair ✅ success
onboard-resume ✅ success
state-backup-restore ✅ success
upgrade-stale-sandbox ✅ success

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

Reviewed current head. Required CI, both PR advisors, CodeRabbit, and all requested E2E targets, including state-backup-restore, are clean. LGTM.

@cv
cv merged commit 2073fa1 into main Jul 13, 2026
200 of 201 checks passed
@cv
cv deleted the fix/ignore-pending-reservations branch July 13, 2026 18:29
cv pushed a commit that referenced this pull request Jul 14, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Release-prep documentation for v0.0.82 now summarizes user-facing
changes merged since v0.0.81.
It also closes stale wording in the stopped-sandbox backup,
snapshot-clone, Ollama selection, and custom-policy authoring guidance.

## Changes

- Add the `v0.0.82` section to `docs/about/release-notes.mdx` with links
to the focused user guides.
- Document that snapshot clones receive a destination-owned dashboard
port before destructive replacement begins.
- Align `backup-all` guidance with eligible stopped Docker-driver
sandboxes that NemoClaw starts temporarily.
- Describe the running and stopped Ollama menu states without claiming
one fixed label.
- Document runtime rejection of catch-all hosts in custom policy files.

### Source summary

- [#6748](#6748) ->
`docs/about/release-notes.mdx`, `docs/manage-sandboxes/lifecycle.mdx`,
and `docs/reference/commands.mdx`: Summarize non-destructive sandbox
`stop` and `start` commands.
- [#6723](#6723) ->
`docs/about/release-notes.mdx`,
`docs/manage-sandboxes/backup-restore.mdx`, and
`docs/reference/commands.mdx`: Record temporary startup and cleanup for
eligible stopped-sandbox backups.
- [#6749](#6749) ->
`docs/about/release-notes.mdx` and
`docs/manage-sandboxes/backup-restore.mdx`: Document destination-owned
dashboard ports for snapshot clones.
- [#6764](#6764) ->
`docs/about/release-notes.mdx`: Summarize installer handling of
route-only onboarding placeholders.
- [#6771](#6771) ->
`docs/about/release-notes.mdx`, `docs/inference/set-up-vllm.mdx`,
`docs/inference/choose-inference-provider.mdx`,
`docs/reference/commands.mdx`, and
`docs/reference/platform-support.mdx`: Summarize managed-vLLM storage
gates, immutable image digests, and the explicit override boundary.
- [#6759](#6759) ->
`docs/about/release-notes.mdx`: Record early, actionable OpenShell
gateway-port conflict diagnostics.
- [#6753](#6753) ->
`docs/about/release-notes.mdx` and `docs/inference/set-up-ollama.mdx`:
Document truthful running and stopped Ollama menu states.
- [#6776](#6776) ->
`docs/about/release-notes.mdx`: Summarize proxy-independent loopback
readiness checks.
- [#6769](#6769) ->
`docs/about/release-notes.mdx`: Record compatible endpoint and agent
guidance when Chat Completions is unavailable.
- [#6730](#6730) ->
`docs/about/release-notes.mdx`: Summarize bounded reuse of an eligible
successful Chat Completions check.
- [#6768](#6768) ->
`docs/about/release-notes.mdx`: Record route-reservation repair during
resumed onboarding.
- [#6742](#6742) ->
`docs/about/release-notes.mdx`: Summarize pre-mutation resolution of
secret-free sandbox create intent.
- [#6721](#6721) ->
`docs/about/release-notes.mdx` and
`docs/get-started/quickstart-langchain-deepagents-code.mdx`: Record
bounded cleanup of completed managed Deep Agents headless sessions.
- [#6731](#6731) ->
`docs/about/release-notes.mdx` and
`docs/network-policy/customize-network-policy.mdx`: Document runtime
rejection of catch-all custom-policy destinations.
- [#6729](#6729) ->
`docs/about/release-notes.mdx` and `docs/get-started/prerequisites.mdx`:
Record the Node.js 22.19 minimum.
- [#6735](#6735) ->
`docs/about/release-notes.mdx` and
`docs/reference/platform-support.mdx`: Summarize the Ubuntu 26.04
userspace contract without claiming pending host or live validation.
- [#6775](#6775) ->
`docs/about/release-notes.mdx` and
`docs/resources/community-contributions.mdx`: Route independent
solutions outside canonical supported-product documentation.
- [#6740](#6740) ->
`docs/about/release-notes.mdx`: Summarize the semantic
dependency-upgrade contributor workflow.
- [#6777](#6777) ->
`docs/about/release-notes.mdx` and `docs/CONTRIBUTING.md`: Summarize the
route-safe documentation-refactor workflow.
- [#6741](#6741) ->
`docs/about/release-notes.mdx` and
`docs/security/openclaw-2026.6.10-dependency-review.md`: Summarize
reviewed npm archive verification and audit enforcement.
- [#6739](#6739) ->
`docs/about/release-notes.mdx` and
`docs/security/openclaw-2026.6.10-dependency-review.md`: Record the
locked offline dependency graph for the managed OpenClaw WeChat runtime.
- [#6737](#6737) ->
`docs/about/release-notes.mdx`: Record removal of the messaging build
plan from final OpenClaw and Hermes image environments.
- [#6733](#6733) ->
`docs/about/release-notes.mdx`: Summarize cached plugin dependency
layers for source and blueprint rebuilds.

### Skipped from docs-skip

- None. No commit or changed path in `v0.0.81..origin/main` matched
`openclaw-sandbox-permissive.yaml` or `config-show`, and the drafted
content contains none of the configured skip terms.

## 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 is a documentation-only
release-prep update; behavior is protected by the merged source PRs, and
the documentation build validates the changed routes and agent variants.
- [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:

## Verification

- [x] PR description includes the DCO sign-off declaration 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 — tests are not applicable for this
documentation-only change.
- [ ] 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 for this
documentation-only change.
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only) — 0
errors; two pre-existing Fern warnings remain.
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)
— no new pages.

---
Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>


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

## Summary by CodeRabbit

* **Documentation**
* Updated release notes with improvements to sandbox recovery,
onboarding, session management, policy validation, storage checks, and
system requirements.
  * Clarified Ollama setup instructions and status labels.
* Documented safer snapshot restoration, including dedicated ports and
protection against destructive failures.
* Expanded `backup-all` coverage to include eligible stopped sandboxes.
* Added guidance rejecting broad or catch-all network destinations in
custom policies.

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

Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: install Install, setup, prerequisites, or uninstall flow bug-fix PR fixes a bug or regression VDR Linked to VDR finding

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[NemoClaw][onboard][All Platforms] nemoclaw installer strict pre-upgrade backup fails when a registered sandbox is not running

4 participants