Skip to content

fix(destroy): release final gateway on macOS - #6597

Merged
cv merged 57 commits into
mainfrom
fix/4662_release_macos_gateway_current
Jul 11, 2026
Merged

fix(destroy): release final gateway on macOS#6597
cv merged 57 commits into
mainfrom
fix/4662_release_macos_gateway_current

Conversation

@chengjiew

@chengjiew chengjiew commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Summary

On macOS, unattended destruction of the final sandbox now tears down the shared NemoClaw gateway so the host listener on port 8080 is released. Linux keeps the existing gateway-preservation default for fast reuse, and explicit CLI or environment overrides still take precedence.

Related Issue

Fixes #4662

Changes

  • Use the platform default for unattended final-sandbox gateway cleanup: cleanup on macOS, preserve on Linux.
  • Preserve --cleanup-gateway, --no-cleanup-gateway, and NEMOCLAW_CLEANUP_GATEWAY precedence.
  • Add deterministic destroy-flow coverage for Darwin cleanup, Docker-probe fail-closed behavior, and explicit preservation override.
  • Wire the live two-sandbox sandbox-operations target into the Docker-gated macOS E2E workflow and assert that final destroy releases 127.0.0.1:8080 within 90 seconds.
  • Update command-level macOS cleanup coverage, CLI help, and the command reference.

Type of Change

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

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior - justification:
  • Tests not applicable - justification:
  • Docs updated for user-facing behavior changes
  • Docs not applicable - justification:
  • Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging)
  • Sensitive-path review completed or maintainer-approved waiver recorded - reviewer/approval link/justification: deterministic destroy-flow coverage verifies Darwin cleanup and explicit cleanupGateway: false; command integration verifies actual macOS cleanup; live sandbox-operations now covers non-final destroy preservation and final port release.
  • 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: focused destroy/gateway/non-interactive suites passed locally; sandbox-operations e2e-live collection passed with the live gate enabled and skipped only for missing local E2E secret
  • Applicable broad gates passed locally: npm run build:cli, npm run source-shape:check, npm run test-conditionals:scan -- --top 25, git diff --check, and sandbox-operations workflow boundary tests
  • 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) - completed earlier with 0 errors and 2 existing Fern warnings
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Additional checks:

  • Exact-head E2E run 29111016862 passed onboard-repair, onboard-resume, and sandbox-operations at d5b2a7f1 before the latest test/workflow-only hardening.
  • Real Apple-Silicon/OpenShell 0.0.72 proof showed successful onboard, unattended final destroy, and port 8080 free after destroy.
  • git diff --check passed.

Known Limitations

The hosted macOS workflow still skips live E2E when Docker is unavailable on the runner. When Docker is available, it now runs the checked-in two-sandbox sandbox-operations path on macOS and asserts that final unattended destroy releases 127.0.0.1:8080 within 90 seconds. Follow-up #6639 tracks removing the workaround after OpenShell no longer needs it.


Signed-off-by: Chengjie Wang chengjiew@nvidia.com

Summary by CodeRabbit

  • New Features

    • Final sandbox destruction now follows platform-specific shared gateway cleanup defaults (macOS cleans; Linux/Windows preserve).
    • Gateway cleanup can be overridden with --cleanup-gateway / --no-cleanup-gateway and NEMOCLAW_CLEANUP_GATEWAY (with CLI flag precedence).
  • Bug Fixes

    • Improved behavior when destroying a sandbox that’s already gone, with clearer messaging and safer teardown decisions based on actual running containers.
  • Tests

    • Expanded unit, CLI, and live E2E validation, including confirmation that the gateway port is released after the last destroy.
  • Documentation / CI

    • Updated destroy command reference; adjusted macOS E2E workflow timeout and gating.

Signed-off-by: Chengjie Wang <chengjiew@nvidia.com>
@coderabbitai

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

This PR updates final sandbox destruction so unattended macOS cleanup removes the shared gateway, while Linux and Windows preserve it by default. It adds live-sandbox probing, gateway process cleanup, centralized non-interactive detection, documentation, CI changes, and platform-specific validation.

Changes

Sandbox destruction and gateway lifecycle

Layer / File(s) Summary
Shared non-interactive environment handling
src/lib/core/*, src/lib/onboard.ts, src/lib/actions/sandbox/policy-channel.ts, src/lib/inference/ollama/proxy.ts
Centralizes exact NEMOCLAW_NON_INTERACTIVE=1 detection across onboarding, policy, and Ollama behavior.
Platform-specific cleanup decision and live-sandbox detection
src/lib/domain/sandbox/destroy.ts, src/lib/actions/sandbox/destroy.ts, src/lib/actions/sandbox/destroy-gateway-cleanup.ts, src/lib/domain/sandbox/destroy.test.ts
Applies platform and explicit cleanup overrides, then checks terminal OpenShell entries against Docker container snapshots before final cleanup.
Gateway teardown and process identity
src/lib/actions/sandbox/destroy-gateway.ts, src/lib/onboard/gateway-process-identity.ts, src/lib/onboard/host-gateway-process.test.ts, src/lib/actions/sandbox/destroy-gateway.test.ts
Adds macOS host-process reaping, shared gateway removal, volume cleanup, and recognition of openshell gateway start processes.
Destroy-flow, CLI, harness, workflow, and E2E validation
src/lib/actions/sandbox/*test.ts, test/cli/*, test/helpers/*, test/e2e/*, .github/workflows/macos-e2e.yaml
Covers platform defaults, overrides, prompts, stale entries, Docker state, gateway port release, and trusted macOS live execution.
Destroy command documentation
src/commands/sandbox/destroy.ts, src/lib/domain/lifecycle/options.ts, docs/reference/commands.mdx
Documents platform defaults, CLI and environment override precedence, and shared cluster-volume cleanup.

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

Possibly related PRs

Suggested labels: bug-fix, refactor, area: e2e

Suggested reviewers: cv, ericksoa, brandonpelfrey

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning Several unrelated non-interactive refactors touch onboarding, policy, and inference code that are not needed for the macOS destroy fix. Split the shared non-interactive helper refactor into a separate PR, keeping this change focused on destroy cleanup and gateway release.
Docstring Coverage ⚠️ Warning Docstring coverage is 3.45% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: fixing final gateway cleanup on macOS during destroy.
Linked Issues check ✅ Passed The destroy logic and tests address #4662 by cleaning up the final macOS gateway and preserving it for intermediate sandboxes.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/4662_release_macos_gateway_current

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

@github-code-quality

github-code-quality Bot commented Jul 9, 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/4662_release_mac... branch is 79%. The coverage in the main branch is 78%.

Show a code coverage summary of the most impacted files.
File main dfee116 fix/4662_release_mac... 57a7ffb +/-
src/lib/tunnel/...owed-origins.ts 94% 69% -25%
src/lib/onboard...er-gpu-patch.ts 79% 67% -12%
src/lib/shields...nsition-lock.ts 88% 83% -5%
src/lib/inference/local.ts 79% 74% -5%
src/lib/policy/index.ts 61% 71% +10%
src/lib/shields/index.ts 58% 71% +13%
src/lib/state/m...-acquisition.ts 81% 100% +19%
src/lib/cli/com...and-registry.ts 60% 94% +34%
src/lib/actions...troy-gateway.ts 7% 78% +71%
src/lib/onboard...get-identity.ts 0% 93% +93%

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

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor (Nemotron Ultra) — No blocking findings

Merge posture: No blocking advisor findings
Primary next action: Add or justify PRA-T1 and any related test follow-ups.
Open items: 0 required · 0 warnings · 0 suggestions · 5 test follow-ups
Since last review: 0 prior items resolved · 0 still apply · 0 new items found

Action checklist

  • PRA-T1 Add or justify test follow-up: Runtime validation
  • PRA-T2 Add or justify test follow-up: Runtime validation
  • PRA-T3 Add or justify test follow-up: Runtime validation
  • PRA-T4 Add or justify test follow-up: Runtime validation
  • PRA-T5 Add or justify test follow-up: Runtime validation
Test follow-ups to resolve or justify

If these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.

  • PRA-T1 Runtime validation — Run the `cloud-onboard` E2E job for Installer and platform changes must work on a clean supported host with the pinned runtime dependencies. Matched files: `src/lib/onboard/machine/handlers/provider-inference.ts`.. Deterministic regression risks require live validation: lifecycle-state, inference-policy, messaging-lifecycle, platform-install. RiskPlan lists 7 required E2E jobs (cloud-onboard, channels-add-remove, channels-stop-start, inference-routing, network-policy, onboard-repair, onboard-resume) as validation floors for live integration; these are correctly gated to trusted main-branch runs in macos-e2e.yaml. All deterministic invariants have checked-in unit/mocked test coverage.
  • PRA-T2 Runtime validation — Run cloud-onboard E2E job for installer/platform changes (matched: provider-inference.ts). Deterministic regression risks require live validation: lifecycle-state, inference-policy, messaging-lifecycle, platform-install. RiskPlan lists 7 required E2E jobs (cloud-onboard, channels-add-remove, channels-stop-start, inference-routing, network-policy, onboard-repair, onboard-resume) as validation floors for live integration; these are correctly gated to trusted main-branch runs in macos-e2e.yaml. All deterministic invariants have checked-in unit/mocked test coverage.
  • PRA-T3 Runtime validation — Run the `channels-add-remove` E2E job for Messaging changes must preserve the manifest-to-policy-to-runtime lifecycle through restart and removal. Matched files: `src/lib/actions/sandbox/policy-channel.ts`.. Deterministic regression risks require live validation: lifecycle-state, inference-policy, messaging-lifecycle, platform-install. RiskPlan lists 7 required E2E jobs (cloud-onboard, channels-add-remove, channels-stop-start, inference-routing, network-policy, onboard-repair, onboard-resume) as validation floors for live integration; these are correctly gated to trusted main-branch runs in macos-e2e.yaml. All deterministic invariants have checked-in unit/mocked test coverage.
  • PRA-T4 Runtime validation — Run channels-add-remove E2E job for messaging lifecycle (matched: policy-channel.ts). Deterministic regression risks require live validation: lifecycle-state, inference-policy, messaging-lifecycle, platform-install. RiskPlan lists 7 required E2E jobs (cloud-onboard, channels-add-remove, channels-stop-start, inference-routing, network-policy, onboard-repair, onboard-resume) as validation floors for live integration; these are correctly gated to trusted main-branch runs in macos-e2e.yaml. All deterministic invariants have checked-in unit/mocked test coverage.
  • PRA-T5 Runtime validation — Run the `channels-stop-start` E2E job for Messaging changes must preserve the manifest-to-policy-to-runtime lifecycle through restart and removal. Matched files: `src/lib/actions/sandbox/policy-channel.ts`.. Deterministic regression risks require live validation: lifecycle-state, inference-policy, messaging-lifecycle, platform-install. RiskPlan lists 7 required E2E jobs (cloud-onboard, channels-add-remove, channels-stop-start, inference-routing, network-policy, onboard-repair, onboard-resume) as validation floors for live integration; these are correctly gated to trusted main-branch runs in macos-e2e.yaml. All deterministic invariants have checked-in unit/mocked test coverage.

Workflow run details

This is an automated, non-binding review; it still expects maintainers and agents to respond to each required or warning item. Treat suggestions as current-PR improvements when they touch changed code; defer only with maintainer rationale or a linked follow-up. A human maintainer must make the final merge decision.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: channels-add-remove, channels-stop-start, inference-routing, network-policy, onboard-repair, onboard-resume, cloud-onboard, sandbox-operations
Optional E2E: macos-e2e

Dispatch hint: channels-add-remove,channels-stop-start,inference-routing,network-policy,onboard-repair,onboard-resume,cloud-onboard,sandbox-operations

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • channels-add-remove (high): Required by the deterministic risk plan for messaging lifecycle changes in policy-channel; validates channel credentials, policy application, runtime add/remove, and teardown.
  • channels-stop-start (high): Required by the deterministic risk plan for messaging lifecycle changes; validates channel stop/start persistence through rebuild/restart and policy restoration.
  • inference-routing (medium): Required by the deterministic risk plan because inference proxy and policy-channel changes can affect selected-provider reachability and advertised host-to-sandbox routes.
  • network-policy (high): Required by the deterministic risk plan because routing and policy-channel changes can affect real network-policy allow/deny behavior at the sandbox boundary.
  • onboard-repair (high): Required by the deterministic risk plan for onboarding and sandbox state convergence; gateway runtime/bootstrap changes must prove repair can converge persisted metadata, reported status, and live runtime.
  • onboard-resume (medium): Required by the deterministic risk plan for onboarding lifecycle changes; validates interrupted onboarding resume paths and live state convergence that unit tests cannot fully cover.
  • cloud-onboard (high): Onboarding gateway bootstrap/runtime files changed in ways that can affect full hosted onboarding, so the full cloud-onboard real flow should run in addition to resume/repair.
  • sandbox-operations (high): Destroy and final gateway cleanup logic changed directly; run the live sandbox operations flow to validate real create/status/destroy behavior and final cleanup convergence.

Optional E2E

  • macos-e2e (medium): Useful adjacent confidence because the PR changes the macOS E2E workflow and macOS-specific gateway cleanup defaults; the PR-safe macOS job validates build and gateway lifecycle regressions on Apple Silicon even though secret-bearing Docker live E2E is intentionally skipped on pull_request.

New E2E recommendations

  • macos-final-destroy (high): The changed behavior is specifically macOS unattended final-sandbox destroy releasing the Docker-driver gateway listener and shared volume. Existing PR-dispatched E2E coverage validates sandbox-operations on Linux, while the new macOS Docker final-destroy workflow path is gated to trusted main-branch events and is not a selectable PR E2E target.
    • Suggested test: Add or expose a trusted, selectively dispatchable macOS Docker final-destroy E2E target that runs sandbox-operations on macOS Intel with Docker after maintainer approval and verifies the gateway listener, PID evidence, and shared cluster volume are removed after the last sandbox destroy.

Dispatch hint

  • Workflow: .github/workflows/e2e.yaml
  • jobs input: channels-add-remove,channels-stop-start,inference-routing,network-policy,onboard-repair,onboard-resume,cloud-onboard,sandbox-operations

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Target Recommendation

Required E2E targets: cloud-onboard, channels-add-remove, channels-stop-start, inference-routing, network-policy, onboard-repair, onboard-resume, sandbox-operations
Optional E2E targets: None

Dispatch required E2E targets:

  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=cloud-onboard
  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=channels-add-remove
  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=channels-stop-start
  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=inference-routing
  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=network-policy
  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=onboard-repair
  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=onboard-resume
  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=sandbox-operations

Workflow run

Full E2E target advisor summary

E2E Target Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E targets

  • cloud-onboard: Installer and platform changes must work on a clean supported host with the pinned runtime dependencies.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=cloud-onboard
  • channels-add-remove: Messaging changes must preserve the manifest-to-policy-to-runtime lifecycle through restart and removal.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=channels-add-remove
  • channels-stop-start: Messaging changes must preserve the manifest-to-policy-to-runtime lifecycle through restart and removal.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=channels-stop-start
  • inference-routing: Inference selection, reachability, and network policy must agree at the real host-to-sandbox boundary.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=inference-routing
  • network-policy: Inference selection, reachability, and network policy must agree at the real host-to-sandbox boundary.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=network-policy
  • onboard-repair: Onboarding and sandbox state must converge across persisted metadata, reported status, and the live runtime.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=onboard-repair
  • onboard-resume: Onboarding and sandbox state must converge across persisted metadata, reported status, and the live runtime.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=onboard-resume
  • sandbox-operations: Focused free-standing E2E job wired for changed live test test/e2e/live/sandbox-operations.test.ts.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=sandbox-operations

Optional E2E targets

  • None.

Relevant changed files

  • src/commands/sandbox/destroy.ts
  • src/lib/actions/sandbox/destroy-gateway-cleanup.ts
  • src/lib/actions/sandbox/destroy-gateway.ts
  • src/lib/actions/sandbox/destroy.ts
  • src/lib/actions/sandbox/policy-channel.ts
  • src/lib/core/non-interactive.ts
  • src/lib/domain/lifecycle/options.ts
  • src/lib/domain/sandbox/destroy.ts
  • src/lib/inference/ollama/proxy.ts
  • src/lib/onboard.ts
  • src/lib/onboard/docker-driver-gateway-launch.ts
  • src/lib/onboard/docker-driver-gateway-process-identity.ts
  • src/lib/onboard/docker-driver-gateway-runtime.ts
  • src/lib/onboard/gateway-process-identity.ts
  • src/lib/onboard/gateway-process-target-identity.ts
  • src/lib/onboard/host-gateway-process.ts
  • src/lib/onboard/machine/handlers/provider-inference.ts
  • test/e2e/live/sandbox-operations.test.ts
  • test/e2e/mock-parity.json

Signed-off-by: Chengjie Wang <chengjiew@nvidia.com>
@github-actions

github-actions Bot commented Jul 9, 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

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: Chengjie Wang <chengjiew@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/lib/actions/sandbox/destroy-flow.test.ts (1)

58-93: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider extracting the repeated darwin-mock-and-assert pattern.

Three consecutive tests (unattended, forced, env-driven) repeat the same vi.spyOn(process, "platform", "get") + harness + cleanupGatewaySpy assertion shape. A small local helper (e.g. expectDarwinGatewayCleanup(destroyOptions, envStub?)) would cut duplication without weakening behavioral coverage.

🤖 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/sandbox/destroy-flow.test.ts` around lines 58 - 93, The three
macOS destroy tests repeat the same setup and assertion pattern around
process.platform mocking, createDestroyHarness, and cleanupGatewaySpy. Extract
this into a small local helper in destroy-flow.test.ts, such as a helper that
accepts destroySandbox options and an optional env stub, then reuse it in the
unattended, forced, and environment-driven cases while keeping the same
cleanupGatewaySpy expectation against destroySandbox and createDestroyHarness.
🤖 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/actions/sandbox/destroy-flow.test.ts`:
- Around line 82-93: Add a Linux/default-platform test for the
environment-driven non-interactive destroy path in destroy-flow.test.ts,
alongside the existing destroySandbox coverage. Mirror the current macOS test
setup using createDestroyHarness and vi.stubEnv("NEMOCLAW_NON_INTERACTIVE",
"1"), but mock process.platform to a non-darwin value and assert that
destroySandbox("alpha", {}) still resolves and that cleanupGatewaySpy is called
with the expected gateway id and runOpenshellSpy. Use the destroySandbox and
cleanupGatewaySpy symbols to place the new case near the existing
non-interactive gateway test.

---

Nitpick comments:
In `@src/lib/actions/sandbox/destroy-flow.test.ts`:
- Around line 58-93: The three macOS destroy tests repeat the same setup and
assertion pattern around process.platform mocking, createDestroyHarness, and
cleanupGatewaySpy. Extract this into a small local helper in
destroy-flow.test.ts, such as a helper that accepts destroySandbox options and
an optional env stub, then reuse it in the unattended, forced, and
environment-driven cases while keeping the same cleanupGatewaySpy expectation
against destroySandbox and createDestroyHarness.
🪄 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: 2b69cdb7-314a-48d8-a7a1-2e2ddae420bd

📥 Commits

Reviewing files that changed from the base of the PR and between cb23052 and cf54c98.

📒 Files selected for processing (2)
  • src/lib/actions/sandbox/destroy-flow.test.ts
  • test/helpers/destroy-flow-test-harness.ts

Comment thread src/lib/actions/sandbox/destroy-flow.test.ts Outdated
@apurvvkumaria apurvvkumaria self-assigned this Jul 9, 2026
chengjiew and others added 2 commits July 10, 2026 04:23
Signed-off-by: Chengjie Wang <chengjiew@nvidia.com>
Co-authored-by: Chengjie Wang <chengjiew@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested jobs passed

Run: 29048159036
Workflow ref: fix/4662_release_macos_gateway_current
Requested targets: (default — all supported)
Requested jobs: onboard-repair,onboard-resume
Summary: 2 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
onboard-repair ✅ success
onboard-resume ✅ success

@apurvvkumaria
apurvvkumaria requested a review from jyaunches July 9, 2026 20:45
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested jobs passed

Run: 29048838655
Workflow ref: fix/4662_release_macos_gateway_current
Requested targets: (default — all supported)
Requested jobs: onboard-repair,onboard-resume
Summary: 2 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
onboard-repair ✅ success
onboard-resume ✅ success

Co-authored-by: Chengjie Wang <chengjiew@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@apurvvkumaria

apurvvkumaria commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

Addressed the native Windows coverage follow-up in 36ea1262e and the exact-head advisor follow-ups in 55e21783d.

Native win32 is not a supported NemoClaw execution surface: Windows users run NemoClaw inside WSL2, where Node reports linux. The regressions lock an unexpected native win32 runtime to the conservative non-macOS gateway-preservation default, verify macOS NEMOCLAW_CLEANUP_GATEWAY=1/0 precedence, and cover an interactive user accepting gateway cleanup. The production branch now carries the #4662 rationale inline.

Validation:

  • npx vitest run --project cli src/lib/actions/sandbox/destroy-flow.test.ts — 25/25 passed
  • npx biome check src/lib/actions/sandbox/destroy.ts src/lib/actions/sandbox/destroy-flow.test.ts — passed
  • npm run test:titles:check — passed
  • scoped pre-commit gates and the push-time CLI type-check — passed
  • exact-final-head live E2E dispatched for onboard-repair, onboard-resume, and sandbox-operations: https://github.com/NVIDIA/NemoClaw/actions/runs/29049975813

Co-authored-by: Chengjie Wang <chengjiew@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ⚠️ Run cancelled — no signal

Run: 29049496379
Workflow ref: fix/4662_release_macos_gateway_current
Requested targets: (default — all supported)
Requested jobs: (selector rejected by workflow validation)
Summary: 0 passed, 0 failed, 75 cancelled, 0 skipped

Job Result
agent-turn-latency ⚠️ cancelled
bedrock-runtime-compatible-anthropic ⚠️ cancelled
brave-search ⚠️ cancelled
channels-add-remove ⚠️ cancelled
channels-stop-start ⚠️ cancelled
cloud-inference ⚠️ cancelled
cloud-onboard ⚠️ cancelled
common-egress-agent ⚠️ cancelled
concurrent-gateway-ports ⚠️ cancelled
credential-migration ⚠️ cancelled
credential-sanitization ⚠️ cancelled
cron-preflight-inference-local ⚠️ cancelled
device-auth-health ⚠️ cancelled
diagnostics ⚠️ cancelled
docs-validation ⚠️ cancelled
double-onboard ⚠️ cancelled
full-e2e ⚠️ cancelled
gateway-drift-preflight ⚠️ cancelled
gateway-guard-recovery ⚠️ cancelled
gateway-health-honest ⚠️ cancelled
gpu-double-onboard ⚠️ cancelled
gpu-e2e ⚠️ cancelled
hermes-dashboard ⚠️ cancelled
hermes-discord ⚠️ cancelled
hermes-e2e ⚠️ cancelled
hermes-gpu-startup ⚠️ cancelled
hermes-inference-switch ⚠️ cancelled
hermes-shields-config ⚠️ cancelled
hermes-slack ⚠️ cancelled
inference-routing ⚠️ cancelled
issue-2478-crash-loop-recovery ⚠️ cancelled
issue-4434-tui-unreachable-inference ⚠️ cancelled
issue-4462-scope-upgrade-approval ⚠️ cancelled
jetson-nvmap-gpu ⚠️ cancelled
kimi-inference-compat ⚠️ cancelled
launchable-smoke ⚠️ cancelled
live ⚠️ cancelled
mcp-bridge ⚠️ cancelled
mcp-bridge-dev ⚠️ cancelled
messaging-compatible-endpoint ⚠️ cancelled
messaging-providers ⚠️ cancelled
model-router-provider-routed-inference ⚠️ cancelled
network-policy ⚠️ cancelled
ollama-auth-proxy ⚠️ cancelled
onboard-negative-paths ⚠️ cancelled
onboard-repair ⚠️ cancelled
onboard-resume ⚠️ cancelled
openclaw-discord-pairing ⚠️ cancelled
openclaw-inference-switch ⚠️ cancelled
openclaw-plugin-runtime-exdev ⚠️ cancelled
openclaw-skill-cli ⚠️ cancelled
openclaw-slack-pairing ⚠️ cancelled
openclaw-tui-chat-correlation ⚠️ cancelled
openshell-gateway-auth-contract ⚠️ cancelled
openshell-gateway-upgrade ⚠️ cancelled
openshell-version-pin ⚠️ cancelled
overlayfs-autofix ⚠️ cancelled
rebuild-hermes ⚠️ cancelled
rebuild-hermes-stale-base ⚠️ cancelled
rebuild-openclaw ⚠️ cancelled
sandbox-operations ⚠️ cancelled
sandbox-rebuild ⚠️ cancelled
sandbox-rlimits-connect ⚠️ cancelled
sandbox-survival ⚠️ cancelled
security-posture ⚠️ cancelled
sessions-agents-cli ⚠️ cancelled
shields-config ⚠️ cancelled
skill-agent ⚠️ cancelled
snapshot-commands ⚠️ cancelled
spark-install ⚠️ cancelled
state-backup-restore ⚠️ cancelled
telegram-injection ⚠️ cancelled
token-rotation ⚠️ cancelled
tunnel-lifecycle ⚠️ cancelled
upgrade-stale-sandbox ⚠️ cancelled

@apurvvkumaria

Copy link
Copy Markdown
Collaborator

Advisor follow-up on exact head 55e21783db82d608cf247a898780bce55c83dc1b:

Exact-head onboard-repair, onboard-resume, and sandbox-operations are currently running in E2E run 29049975813; results are still pending.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested jobs passed

Run: 29049975813
Workflow ref: fix/4662_release_macos_gateway_current
Requested targets: (default — all supported)
Requested jobs: onboard-repair,onboard-resume,sandbox-operations
Summary: 3 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
onboard-repair ✅ success
onboard-resume ✅ success
sandbox-operations ✅ success

@cv cv added v0.0.80 and removed v0.0.79 labels Jul 9, 2026

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Exact-head maintainer sweep (55e2178): the implementation path looks sound, DCO/verification are clean, and onboard-repair, onboard-resume, and sandbox-operations passed in run 29049975813.

Two pieces still need disposition before approval:

  1. Please document a durable removal condition for the macOS-only gateway cleanup workaround and link a separate follow-up tracker. This PR says Fixes #4662, so #4662 will close on merge and cannot track removal after OpenShell releases the underlying listener fix.
  2. Please provide real macOS OpenShell evidence that the final unattended destroy releases port 8080, or get an explicit maintainer waiver. The exact-head macOS run 29049896724 was green, but Docker was unavailable and its full E2E path was skipped.

The branch is also one unrelated documentation commit behind main; please merge current main and rerun the advisors/CI after the source update.

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

Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
@cv
cv dismissed cjagwani’s stale review July 11, 2026 17:37

Addressed

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested tests passed

Run: 29163339423
Workflow ref: fix/4662_release_macos_gateway_current
Requested targets: (default — all supported)
Requested test IDs: inference-routing
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result
inference-routing ✅ success

@cv

cv commented Jul 11, 2026

Copy link
Copy Markdown
Collaborator

/nvskills-ci

@cv
cv merged commit 235afc6 into main Jul 11, 2026
126 of 129 checks passed
@cv
cv deleted the fix/4662_release_macos_gateway_current branch July 11, 2026 18:26
@cv cv mentioned this pull request Jul 12, 2026
21 tasks
cv added a commit that referenced this pull request Jul 12, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Release-prep documentation for v0.0.81 now summarizes user-facing
changes merged since v0.0.80.
It also closes the Hermes dashboard-profile backup gap and distinguishes
direct blueprint-runner actions from public host CLI commands.

## Changes

- Add the `v0.0.81` section to `docs/about/release-notes.mdx` with links
to the detailed user guides.
- Document that Hermes rebuilds preserve `.hermes/dashboard-home/`,
including Dashboard `MEMORY.md` and `USER.md`.
- Update Hermes manual backup and restore examples to transfer those two
profile files without copying generated configuration or the
secret-bearing dashboard `.env`.
- Explain the new per-item backup failure causes.
- Clarify that migration snapshot retention fragments are direct-runner
arguments and are not exposed by the host `nemoclaw` CLI.

### Source summary

- #6445 -> `docs/about/release-notes.mdx`,
`docs/manage-sandboxes/backup-restore.mdx`, and
`docs/manage-sandboxes/workspace-files.mdx`: Summarize manifest-owned
key-level restore and current-config authority.
- #6617 -> `docs/about/release-notes.mdx` and
`docs/manage-sandboxes/backup-restore.mdx`: Record the fail-closed
`/proc` fallback used to verify an idle Deep Agents runtime before
snapshot creation.
- #6685 -> `docs/about/release-notes.mdx`,
`docs/manage-sandboxes/backup-restore.mdx`, and
`docs/manage-sandboxes/workspace-files.mdx`: Document Hermes Web
Dashboard profile persistence and safe manual transfer.
- #6649 -> `docs/about/release-notes.mdx`: Summarize host-validated
loopback compatible-endpoint routing through the sandbox gateway.
- #6643 -> `docs/about/release-notes.mdx`: Summarize automatic
`max_completion_tokens` handling for GPT-5 and o-series models.
- #6661 -> `docs/about/release-notes.mdx`: Summarize bounded connection
reuse for eligible provider-validation probes.
- #6704 -> `docs/about/release-notes.mdx`: Record that direct blueprint
apply stops instead of persisting incomplete state after provider or
inference setup fails.
- #6677 -> `docs/about/release-notes.mdx`: Summarize transactional
recovery for legacy Docker containers whose managed supervisor
disappeared after restart.
- #6625 -> `docs/about/release-notes.mdx`: Record Hermes managed-startup
persistence across direct Docker restarts.
- #6597 -> `docs/about/release-notes.mdx`: Record final-sandbox gateway
cleanup on macOS.
- #6680 -> `docs/about/release-notes.mdx`: Summarize managed Deep Agents
first-run and process-tree cleanup improvements.
- #6647 -> `docs/about/release-notes.mdx`: Record fail-closed validation
for the managed Deep Agents fetch CA bundle.
- #6645 -> `docs/about/release-notes.mdx`: Summarize WhatsApp loopback
pairing and trusted npm plugin provenance.
- #6673 -> `docs/about/release-notes.mdx` and
`docs/manage-sandboxes/backup-restore.mdx`: Document stopped-sandbox
backup remediation.
- #6631 -> `docs/about/release-notes.mdx` and
`docs/manage-sandboxes/backup-restore.mdx`: Document per-item backup
failure causes.
- #6620 -> `docs/about/release-notes.mdx`: Record the
created-but-not-ready sandbox lifecycle receipt.
- #6664 -> `docs/about/release-notes.mdx`: Record prompt-aware
onboarding progress output.
- #6598 -> `docs/about/release-notes.mdx`: Summarize stale replay-result
invalidation during resumed onboarding.
- #6593 -> `docs/about/release-notes.mdx`: Summarize contextual OpenClaw
audit findings for managed dashboard compatibility settings.
- #6650 -> `docs/about/release-notes.mdx`: Record redaction of
token-shaped URL query values.
- #6638 -> `docs/about/release-notes.mdx`: Record the exact-path MCP
`DELETE` policy recipe for session termination.
- #5453 -> `docs/reference/host-files-and-state.mdx`: Clarify that
snapshot retention actions belong to direct runner integrations and are
not standalone host CLI commands.

### Skipped from docs-skip

- #6633 matched the `openclaw-sandbox-permissive.yaml` path in
`docs/.docs-skip` and produced no documentation in this update.

## Type of Change

- [ ] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [x] 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 examples and routes.
- [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; `npm run docs` completed successfully.
- [ ] 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 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: Carlos Villela <cvillela@nvidia.com>


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

## Summary by CodeRabbit

- **Documentation**
- Added release notes for v0.0.81 covering state preservation, inference
setup, sandbox recovery, session setup, pairing, diagnostics, and
security policy updates.
- Expanded backup and restore guidance to include dashboard profile
files and clarify files that must not be copied.
- Added dashboard profile persistence details to workspace and rebuild
documentation.
- Clarified snapshot retention guidance and the distinction between host
CLI capabilities and direct runner actions.
  - Added more detailed backup failure reporting information.

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

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
## Summary
On macOS, unattended destruction of the final sandbox now tears down the
shared NemoClaw gateway so the host listener on port 8080 is released.
Linux keeps the existing gateway-preservation default for fast reuse,
and explicit CLI or environment overrides still take precedence.

## Related Issue
Fixes NVIDIA#4662

## Changes
- Use the platform default for unattended final-sandbox gateway cleanup:
cleanup on macOS, preserve on Linux.
- Preserve `--cleanup-gateway`, `--no-cleanup-gateway`, and
`NEMOCLAW_CLEANUP_GATEWAY` precedence.
- Add deterministic destroy-flow coverage for Darwin cleanup,
Docker-probe fail-closed behavior, and explicit preservation override.
- Wire the live two-sandbox `sandbox-operations` target into the
Docker-gated macOS E2E workflow and assert that final destroy releases
`127.0.0.1:8080` within 90 seconds.
- Update command-level macOS cleanup coverage, CLI help, and the command
reference.

## 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: deterministic
destroy-flow coverage verifies Darwin cleanup and explicit
`cleanupGateway: false`; command integration verifies actual macOS
cleanup; live sandbox-operations now covers non-final destroy
preservation and final port release.
- [ ] 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: focused
destroy/gateway/non-interactive suites passed locally;
`sandbox-operations` e2e-live collection passed with the live gate
enabled and skipped only for missing local E2E secret
- [x] Applicable broad gates passed locally: `npm run build:cli`, `npm
run source-shape:check`, `npm run test-conditionals:scan -- --top 25`,
`git diff --check`, and sandbox-operations workflow boundary tests
- [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 earlier with 0 errors and 2 existing Fern warnings
- [x] Doc pages follow the style guide (doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

Additional checks:
- Exact-head E2E run 29111016862 passed `onboard-repair`,
`onboard-resume`, and `sandbox-operations` at `d5b2a7f1` before the
latest test/workflow-only hardening.
- Real Apple-Silicon/OpenShell 0.0.72 proof showed successful onboard,
unattended final destroy, and port 8080 free after destroy.
- `git diff --check` passed.

## Known Limitations
The hosted macOS workflow still skips live E2E when Docker is
unavailable on the runner. When Docker is available, it now runs the
checked-in two-sandbox `sandbox-operations` path on macOS and asserts
that final unattended destroy releases `127.0.0.1:8080` within 90
seconds. Follow-up NVIDIA#6639 tracks removing the workaround after OpenShell
no longer needs it.

---
Signed-off-by: Chengjie Wang <chengjiew@nvidia.com>


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

* **New Features**
* Final sandbox destruction now follows platform-specific shared gateway
cleanup defaults (macOS cleans; Linux/Windows preserve).
* Gateway cleanup can be overridden with `--cleanup-gateway` /
`--no-cleanup-gateway` and `NEMOCLAW_CLEANUP_GATEWAY` (with CLI flag
precedence).

* **Bug Fixes**
* Improved behavior when destroying a sandbox that’s already gone, with
clearer messaging and safer teardown decisions based on actual running
containers.

* **Tests**
* Expanded unit, CLI, and live E2E validation, including confirmation
that the gateway port is released after the last destroy.

* **Documentation / CI**
* Updated `destroy` command reference; adjusted macOS E2E workflow
timeout and gating.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Chengjie Wang <chengjiew@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Co-authored-by: Apurv Kumaria <akumaria@nvidia.com>
Co-authored-by: Prekshi Vyas <prekshiv@nvidia.com>
Co-authored-by: cjagwani <cjagwani@nvidia.com>
Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Release-prep documentation for v0.0.81 now summarizes user-facing
changes merged since v0.0.80.
It also closes the Hermes dashboard-profile backup gap and distinguishes
direct blueprint-runner actions from public host CLI commands.

## Changes

- Add the `v0.0.81` section to `docs/about/release-notes.mdx` with links
to the detailed user guides.
- Document that Hermes rebuilds preserve `.hermes/dashboard-home/`,
including Dashboard `MEMORY.md` and `USER.md`.
- Update Hermes manual backup and restore examples to transfer those two
profile files without copying generated configuration or the
secret-bearing dashboard `.env`.
- Explain the new per-item backup failure causes.
- Clarify that migration snapshot retention fragments are direct-runner
arguments and are not exposed by the host `nemoclaw` CLI.

### Source summary

- NVIDIA#6445 -> `docs/about/release-notes.mdx`,
`docs/manage-sandboxes/backup-restore.mdx`, and
`docs/manage-sandboxes/workspace-files.mdx`: Summarize manifest-owned
key-level restore and current-config authority.
- NVIDIA#6617 -> `docs/about/release-notes.mdx` and
`docs/manage-sandboxes/backup-restore.mdx`: Record the fail-closed
`/proc` fallback used to verify an idle Deep Agents runtime before
snapshot creation.
- NVIDIA#6685 -> `docs/about/release-notes.mdx`,
`docs/manage-sandboxes/backup-restore.mdx`, and
`docs/manage-sandboxes/workspace-files.mdx`: Document Hermes Web
Dashboard profile persistence and safe manual transfer.
- NVIDIA#6649 -> `docs/about/release-notes.mdx`: Summarize host-validated
loopback compatible-endpoint routing through the sandbox gateway.
- NVIDIA#6643 -> `docs/about/release-notes.mdx`: Summarize automatic
`max_completion_tokens` handling for GPT-5 and o-series models.
- NVIDIA#6661 -> `docs/about/release-notes.mdx`: Summarize bounded connection
reuse for eligible provider-validation probes.
- NVIDIA#6704 -> `docs/about/release-notes.mdx`: Record that direct blueprint
apply stops instead of persisting incomplete state after provider or
inference setup fails.
- NVIDIA#6677 -> `docs/about/release-notes.mdx`: Summarize transactional
recovery for legacy Docker containers whose managed supervisor
disappeared after restart.
- NVIDIA#6625 -> `docs/about/release-notes.mdx`: Record Hermes managed-startup
persistence across direct Docker restarts.
- NVIDIA#6597 -> `docs/about/release-notes.mdx`: Record final-sandbox gateway
cleanup on macOS.
- NVIDIA#6680 -> `docs/about/release-notes.mdx`: Summarize managed Deep Agents
first-run and process-tree cleanup improvements.
- NVIDIA#6647 -> `docs/about/release-notes.mdx`: Record fail-closed validation
for the managed Deep Agents fetch CA bundle.
- NVIDIA#6645 -> `docs/about/release-notes.mdx`: Summarize WhatsApp loopback
pairing and trusted npm plugin provenance.
- NVIDIA#6673 -> `docs/about/release-notes.mdx` and
`docs/manage-sandboxes/backup-restore.mdx`: Document stopped-sandbox
backup remediation.
- NVIDIA#6631 -> `docs/about/release-notes.mdx` and
`docs/manage-sandboxes/backup-restore.mdx`: Document per-item backup
failure causes.
- NVIDIA#6620 -> `docs/about/release-notes.mdx`: Record the
created-but-not-ready sandbox lifecycle receipt.
- NVIDIA#6664 -> `docs/about/release-notes.mdx`: Record prompt-aware
onboarding progress output.
- NVIDIA#6598 -> `docs/about/release-notes.mdx`: Summarize stale replay-result
invalidation during resumed onboarding.
- NVIDIA#6593 -> `docs/about/release-notes.mdx`: Summarize contextual OpenClaw
audit findings for managed dashboard compatibility settings.
- NVIDIA#6650 -> `docs/about/release-notes.mdx`: Record redaction of
token-shaped URL query values.
- NVIDIA#6638 -> `docs/about/release-notes.mdx`: Record the exact-path MCP
`DELETE` policy recipe for session termination.
- NVIDIA#5453 -> `docs/reference/host-files-and-state.mdx`: Clarify that
snapshot retention actions belong to direct runner integrations and are
not standalone host CLI commands.

### Skipped from docs-skip

- NVIDIA#6633 matched the `openclaw-sandbox-permissive.yaml` path in
`docs/.docs-skip` and produced no documentation in this update.

## Type of Change

- [ ] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [ ] Doc only (prose changes, no code sample modifications)
- [x] 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 examples and routes.
- [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; `npm run docs` completed successfully.
- [ ] 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 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: Carlos Villela <cvillela@nvidia.com>


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

## Summary by CodeRabbit

- **Documentation**
- Added release notes for v0.0.81 covering state preservation, inference
setup, sandbox recovery, session setup, pairing, diagnostics, and
security policy updates.
- Expanded backup and restore guidance to include dashboard profile
files and clarify files that must not be copied.
- Added dashboard profile persistence details to workspace and rebuild
documentation.
- Clarified snapshot retention guidance and the distinction between host
CLI capabilities and direct runner actions.
  - Added more detailed backup failure reporting information.

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

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
@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 platform: macos Affects macOS, including Apple Silicon labels Jul 30, 2026
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 platform: macos Affects macOS, including Apple Silicon

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[macOS][Sandbox] destroying last sandbox leaves OpenShell gateway listening on port 8080

6 participants