Skip to content

fix(backup): back up stopped docker sandboxes by starting them for the backup - #6723

Merged
cv merged 6 commits into
NVIDIA:mainfrom
Hokonoken:fix/6500-strict-backup-stopped
Jul 13, 2026
Merged

fix(backup): back up stopped docker sandboxes by starting them for the backup#6723
cv merged 6 commits into
NVIDIA:mainfrom
Hokonoken:fix/6500-strict-backup-stopped

Conversation

@Hokonoken

@Hokonoken Hokonoken commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Summary

Under installer-strict mode, backup-all failed when a registered sandbox was stopped even though its state was still backupable. It now temporarily starts an eligible stopped Docker-driver container, captures the normal snapshot, and returns the container to its stopped state. Before: 0 backed up, 0 failed, 1 skipped with exit 1. After: 1 backed up, 0 failed, 0 skipped with exit 0.

Related Issue

Addresses #6500 using the issue's preferred outcome. This keeps the strict gate from #6114 intact: a sandbox still fails strict backup when its container cannot be identified safely, started, backed up, or returned to the stopped state.

Changes

  • Discover candidates only through OpenShell management and sandbox-name labels.
  • Fail closed unless exactly one labelled container resolves to the registered sandbox owner.
  • Exclude GPU recovery siblings and only start containers in exited or created state.
  • Retry only transport-level unreachable backup results while the newly started container's SSH endpoint becomes ready.
  • Return every container started by backup-all to exited in a finally block, including backup failure and orphan-manifest paths.
  • Treat cleanup failure as a backup failure and verify the final Docker state after docker stop.
  • Document eligible stopped-sandbox behavior and its cleanup failure mode.
  • Add unit, integration, and live E2E coverage for the complete stopped backup and restore lifecycle.

Type of Change

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

Quality Gates

  • Tests added or updated for changed behavior
  • Docs updated for user-facing behavior changes
  • Sensitive paths changed (sandbox lifecycle)
  • Sensitive-path review completed or maintainer-approved waiver recorded: cv requested; human review remains outstanding.
  • No non-success or missing required CI check requires a maintainer waiver

Verification

  • All five commits are signed and shown as Verified by GitHub
  • Pre-commit, commit-msg, and pre-push hooks passed
  • Focused tests: npx vitest run --project cli src/lib/actions/maintenance.test.ts src/lib/actions/sandbox/stopped-sandbox-backup.test.ts -> 2 files, 38 tests passed (21 added by this PR)
  • Local broad checks: npm run checks, npm run build:cli, and npm run typecheck:cli
  • PR CI run 29223023812: green after rerunning one hosted-runner ripgrep bootstrap failure; 41 successful PR checks, no pending or failed checks
  • Self-hosted CI run 29223029707: green
  • CodeRabbit: green, zero unresolved threads
  • PR Advisor run 29223032288: GPT-5.6 Terra and Nemotron 3 Ultra both merge_as_is, high confidence, no findings or warnings
  • E2E Advisor run 29223022799: required five suites, optional none, new recommendations none

Live Verification

E2E run 29223032339 passed every required suite:

  • onboard-repair
  • onboard-resume
  • state-backup-restore
  • upgrade-stale-sandbox
  • snapshot-commands

The live snapshot-commands artifact proves the exact #6500 path: it stops the uniquely labelled container, runs strict backup-all, records 1 backed up, 0 failed, 0 skipped, verifies the container is exited, restarts it, restores the newly created snapshot, verifies the original marker content, finds zero credential leaks, and completes cleanup without failures.

Signed-off-by: Hokonoken 41166525+Hokonoken@users.noreply.github.com

…e backup

A registered docker-driver sandbox whose container is exited or created is
backupable: the backup transport is SSH+tar through the container's PID 1
and does not need the agent gateway. backup-all now starts such a container
for the duration of the backup and returns it to its stopped state after,
so the installer-strict gate (NVIDIA#6114) can pass without weakening what it
protects. Containers that are running-but-not-Ready, paused, absent, or
fail to start keep the existing skip and remediation message.

Addresses NVIDIA#6500

Signed-off-by: Hokonoken <41166525+Hokonoken@users.noreply.github.com>
@copy-pr-bot

copy-pr-bot Bot commented Jul 12, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@coderabbitai

coderabbitai Bot commented Jul 12, 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

Stopped Docker-driver sandboxes are temporarily started during backup-all, backed up with retry handling, and returned to stopped state. backupAll() and strict-mode tests cover failures, while end-to-end tests and documentation describe the lifecycle and remediation.

Changes

Stopped Sandbox Backup

Layer / File(s) Summary
Stopped-container backup helpers
src/lib/actions/sandbox/stopped-sandbox-backup.ts, src/lib/actions/sandbox/stopped-sandbox-backup.test.ts
Adds stopped-container detection, temporary start/stop helpers, backup retries for unreachable results, and focused tests.
backup-all lifecycle integration
src/lib/actions/maintenance.ts, src/lib/actions/maintenance.test.ts
Updates backupAll() to use the started-sandbox path and restore containers in finally, with strict-mode coverage for backup, restoration, and failure cases.
End-to-end validation and documentation
test/e2e/live/snapshot-commands.test.ts, docs/manage-sandboxes/backup-restore.mdx, docs/reference/commands.mdx
Verifies stopped-container snapshots and documents restoration failures, skipped sandboxes, and strict-mode rerun requirements.

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

Sequence Diagram(s)

sequenceDiagram
  participant Operator
  participant backupAll
  participant stoppedSandboxBackup
  participant Docker
  participant sandboxState
  Operator->>backupAll: Run strict backup-all
  backupAll->>stoppedSandboxBackup: Start stopped sandbox for backup
  stoppedSandboxBackup->>Docker: Start container
  backupAll->>stoppedSandboxBackup: Back up started sandbox state
  stoppedSandboxBackup->>sandboxState: Retry unreachable backup
  backupAll->>stoppedSandboxBackup: Restore stopped state
  stoppedSandboxBackup->>Docker: Stop and verify container
Loading

Possibly related PRs

Suggested labels: area: docs, platform: container

Suggested reviewers: cv

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly captures the main change: backing up stopped Docker sandboxes by starting them temporarily.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate 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 12, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: onboard-repair, onboard-resume, state-backup-restore, upgrade-stale-sandbox, snapshot-commands
Optional E2E: None

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

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: target/main
Head: HEAD
Confidence: high

Required E2E

  • onboard-repair: Required deterministic lifecycle-state floor: changed stopped-sandbox lifecycle behavior must preserve convergent sandbox and persisted state during repair flows.
  • onboard-resume: Required deterministic lifecycle-state floor: stopped-container handling can affect lifecycle convergence and retry/resume safety.
  • state-backup-restore: Required deterministic upgrade-rebuild floor: validates that backup and restore preserve state across runtime mutation.
  • upgrade-stale-sandbox: Required deterministic upgrade-rebuild floor: strict pre-upgrade backup behavior gates stale-sandbox upgrade and must remain safe and retryable.
  • snapshot-commands: Direct live coverage for this PR: installs a sandbox, stops its Docker container, runs strict backup-all, verifies a new snapshot, confirms the container returns to exited, and restores the stopped-state snapshot.

Optional E2E

  • None.

New E2E recommendations

  • None.

Dispatch hint

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

@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

🧹 Nitpick comments (1)
src/lib/actions/maintenance.test.ts (1)

204-328: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Missing test: container returned to stopped when the orphan-manifest catch fires for a started container.

The PR objective explicitly states the container is returned to stopped "including when the backup fails or is skipped due to an orphan manifest," and the finally block's placement in maintenance.ts relies on JS semantics (finally runs before a catch's continue completes) to guarantee this. None of the four new tests exercise a started container whose backup call throws the orphan-manifest error — only the plain-failure and stop-fails paths are covered. Since this interaction depends on subtle control-flow semantics, a dedicated regression test would catch a future refactor that breaks it (e.g., moving the continue/return before the finally, or restructuring the try/catch).

🧪 Suggested additional test
it("returns a started container to stopped even when the backup call throws (orphan manifest, `#6500`)", async () => {
  mocks.listSandboxes.mockReturnValue({
    sandboxes: [{ name: "sb-stopped" }],
    defaultSandbox: null,
  });
  mocks.parseReadySandboxNames.mockReturnValue(new Set());
  mocks.startStoppedSandboxContainerForBackup.mockReturnValue({
    containerName: "openshell-sb-stopped-abc",
  });
  mocks.backupStartedSandboxState.mockRejectedValue(
    new Error("Agent 'sb-stopped' not found: /path/to/manifest.yaml"),
  );
  const logSpy = vi.spyOn(console, "log").mockImplementation(() => undefined);

  await backupAll();

  expect(mocks.returnSandboxContainerToStopped).toHaveBeenCalledWith("openshell-sb-stopped-abc");
  expect(logSpy.mock.calls.flat().join("\n")).toContain("Returned 'sb-stopped' to its stopped state");
});
🤖 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/maintenance.test.ts` around lines 204 - 328, Add a regression
test alongside the existing backupAll tests for a started stopped-sandbox whose
backupStartedSandboxState call rejects with an orphan-manifest error. Assert
backupAll completes, returnSandboxContainerToStopped is called with the started
container name, and the logs confirm the sandbox was returned to its stopped
state.
🤖 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 `@docs/manage-sandboxes/backup-restore.mdx`:
- Line 271: Update the sentence describing backup-all’s container behavior to
use the American English spelling “afterward” instead of “afterwards,” without
changing the documented behavior or surrounding wording.

In `@docs/reference/commands.mdx`:
- Line 2500: Update the sentence in the registered docker-driver sandbox
description to use the US spelling “afterward” instead of “afterwards,” matching
the wording in backup-restore.mdx.

---

Nitpick comments:
In `@src/lib/actions/maintenance.test.ts`:
- Around line 204-328: Add a regression test alongside the existing backupAll
tests for a started stopped-sandbox whose backupStartedSandboxState call rejects
with an orphan-manifest error. Assert backupAll completes,
returnSandboxContainerToStopped is called with the started container name, and
the logs confirm the sandbox was returned to its stopped state.
🪄 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: 4db17c3f-8f8e-43af-b11d-0a09d3232c14

📥 Commits

Reviewing files that changed from the base of the PR and between 8acb280 and f244cec.

📒 Files selected for processing (6)
  • docs/manage-sandboxes/backup-restore.mdx
  • docs/reference/commands.mdx
  • src/lib/actions/maintenance.test.ts
  • src/lib/actions/maintenance.ts
  • src/lib/actions/sandbox/stopped-sandbox-backup.test.ts
  • src/lib/actions/sandbox/stopped-sandbox-backup.ts

Comment thread docs/manage-sandboxes/backup-restore.mdx Outdated
Comment thread docs/reference/commands.mdx Outdated
@cv cv added the v0.0.82 label Jul 12, 2026
@wscurran wscurran added area: cli Command line interface, flags, terminal UX, or output area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery bug-fix PR fixes a bug or regression labels Jul 12, 2026
@prekshivyas prekshivyas self-assigned this Jul 13, 2026
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
@prekshivyas
prekshivyas requested a review from cv July 13, 2026 03:57
@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ⚠️ Run cancelled — no signal

Run: 29222727958
Workflow ref: pull-request/6723
Requested targets: (default — all supported)
Requested test IDs: onboard-repair,onboard-resume,state-backup-restore,upgrade-stale-sandbox,snapshot-commands
Summary: 0 passed, 0 failed, 5 cancelled, 0 skipped, 0 unknown

Test Result
onboard-repair ⚠️ cancelled
onboard-resume ⚠️ cancelled
snapshot-commands ⚠️ cancelled
state-backup-restore ⚠️ cancelled
upgrade-stale-sandbox ⚠️ cancelled

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

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

Inline comments:
In `@docs/manage-sandboxes/backup-restore.mdx`:
- Around line 271-273: Update the relevant section heading and introductory
sentence to describe registered sandboxes generally, explicitly including
stopped Docker-driver sandboxes that can be started temporarily; keep the
existing backup behavior details unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 9523c1a7-31b3-46bc-9fc3-6027fa0c1dc7

📥 Commits

Reviewing files that changed from the base of the PR and between f244cec and 9d9b84b.

📒 Files selected for processing (7)
  • docs/manage-sandboxes/backup-restore.mdx
  • docs/reference/commands.mdx
  • src/lib/actions/maintenance.test.ts
  • src/lib/actions/maintenance.ts
  • src/lib/actions/sandbox/stopped-sandbox-backup.test.ts
  • src/lib/actions/sandbox/stopped-sandbox-backup.ts
  • test/e2e/live/snapshot-commands.test.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/lib/actions/sandbox/stopped-sandbox-backup.test.ts
  • docs/reference/commands.mdx
  • src/lib/actions/sandbox/stopped-sandbox-backup.ts
  • src/lib/actions/maintenance.ts

Comment thread docs/manage-sandboxes/backup-restore.mdx
@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ⚠️ Run cancelled — no signal

Run: 29222985229
Workflow ref: pull-request/6723
Requested targets: (default — all supported)
Requested test IDs: onboard-repair,onboard-resume,state-backup-restore,upgrade-stale-sandbox,snapshot-commands
Summary: 0 passed, 0 failed, 5 cancelled, 0 skipped, 0 unknown

Test Result
onboard-repair ⚠️ cancelled
onboard-resume ⚠️ cancelled
snapshot-commands ⚠️ cancelled
state-backup-restore ⚠️ cancelled
upgrade-stale-sandbox ⚠️ cancelled

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested tests passed

Run: 29223032339
Workflow ref: pull-request/6723
Requested targets: (default — all supported)
Requested test IDs: onboard-repair,onboard-resume,state-backup-restore,upgrade-stale-sandbox,snapshot-commands
Summary: 5 passed, 0 failed, 0 cancelled, 0 skipped, 0 unknown

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

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested tests passed

Run: 29233970615
Workflow ref: pull-request/6723
Requested targets: (default — all supported)
Requested test IDs: onboard-repair,onboard-resume,state-backup-restore,upgrade-stale-sandbox,snapshot-commands
Summary: 5 passed, 0 failed, 0 cancelled, 0 skipped, 0 unknown

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

@cv
cv merged commit 3de1de6 into NVIDIA:main Jul 13, 2026
122 checks passed
cv pushed a commit that referenced this pull request Jul 13, 2026
<!-- markdownlint-disable MD041 -->
## 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

- [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 corrects transient
internal registry classification; existing docs already describe
backup/recovery for registered sandboxes and direct interrupted
onboarding to `nemoclaw onboard --resume`.
- [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: 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

- [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 — `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:
- [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)

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


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## 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.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: San Dang <sdang@nvidia.com>
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: cli Command line interface, flags, terminal UX, or output area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery bug-fix PR fixes a bug or regression

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants