Skip to content

fix(sandbox): surface actionable recovery hint when destroy wipe fails - #6094

Merged
cv merged 1 commit into
mainfrom
fix/5970-destroy-workspace-not-wiped
Jul 3, 2026
Merged

fix(sandbox): surface actionable recovery hint when destroy wipe fails#6094
cv merged 1 commit into
mainfrom
fix/5970-destroy-workspace-not-wiped

Conversation

@Dongni-Yang

@Dongni-Yang Dongni-Yang commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Summary

When nemoclaw destroy cannot wipe a sandbox's workspace because the pod is no longer live, the exec-fail warning now names concrete self-serve recovery paths so users don't hit stale USER.md/SOUL.md after re-onboarding with the same name (#5970). This is a message-only improvement; the durable PVC retention that causes the stale files is owned upstream by OpenShell sandbox delete semantics (NemoClaw can only exec+rm while the pod is live).

Scope: intentionally a warning-text mitigation, not the root fix for #5970 — hence Refs, not Fixes/Closes. The actual PVC purge requires an upstream OpenShell change (sandbox delete retains the per-sandbox k3s PVC by design). See the response to the PR Review Advisor's PRA-1 in the thread for the full rationale.

Related Issue

Refs #5970

Changes

  • src/lib/actions/sandbox/wipe-state.ts — the best-effort exec-fail warning in wipeSandboxState() now names two self-serve recovery paths instead of a dead-end "may resurface old files" note: (1) re-onboard with a different sandbox name (fresh PVC), or (2) when this is the last sandbox, re-run destroy --cleanup-gateway to purge the shared cluster volume that retains the PVC so the same name comes up clean.
  • test/destroy-wipe-sandbox-state.test.ts — new red→green test asserting the exec-fail warning (non-zero sandbox exec) names both recovery paths.
  • Note: the local test-cli pre-commit hook (full CLI+integration suite with coverage) was skipped locally because it hangs starting an OpenShell gateway on this host (glibc 2.31, no live gateway); targeted tests for the changed behavior pass and CI runs the full suite (cli-test-shards 1–5 all green).
  • Live E2E: the advisor-required sandbox-operations job was dispatched against this branch and passed (run 28492424319), confirming the live destroy lifecycle this change touches does not regress.

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: internal CLI warning-text change; no doc page quotes this specific message and --cleanup-gateway is already documented
  • 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: message-only change (pure string append; no logic, control-flow, or signature change); all standard CI green plus the advisor-required sandbox-operations live E2E passed (run 28492424319)
  • 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
  • Git hooks passed during commit and push, or npx prek run --from-ref main --to-ref HEAD passes
  • Targeted tests pass for changed behavior
  • Full npm test passes (broad runtime changes only)
  • 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: Dongni Yang dongniy@nvidia.com

wipeSandboxState() runs `openshell sandbox exec` to rm workspace files
before `sandbox delete`. When the pod is not live at destroy time (100%
repro in all 5 CI runners, #5970), exec returns non-zero and the wipe
silently warns-and-continues. The k3s PVC retains USER.md/SOUL.md and
re-onboarding with the same sandbox name rebinds the old PVC, resurrecting
the files despite destroy claiming a clean teardown.

The durable PVC retention is owned upstream by OpenShell `sandbox delete`
semantics (NemoClaw can only exec-and-rm while the pod is live). Within
NemoClaw's control, improve the exec-fail warning to name the two self-serve
recovery paths: re-onboard with a different name (fresh PVC), or — on the
last sandbox — re-run destroy with --cleanup-gateway to purge the shared
cluster volume that retains the PVC so the same name comes up clean.

Refs #5970

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
@Dongni-Yang Dongni-Yang self-assigned this Jul 1, 2026
@coderabbitai

coderabbitai Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The pull request expands the warning message displayed when wipeSandboxState fails to wipe sandbox state, adding guidance on re-onboarding with a different sandbox name or using --cleanup-gateway to purge the retained cluster volume. A regression test verifies this new warning content.

Changes

Sandbox Wipe Warning Update

Layer / File(s) Summary
Expanded failure warning and regression test
src/lib/actions/sandbox/wipe-state.ts, test/destroy-wipe-sandbox-state.test.ts
The wipe failure warning now includes guidance to re-onboard with a different sandbox name or re-run destroy with --cleanup-gateway to purge the retained cluster volume; a new test simulates exec failure and asserts both recovery strings appear in the warning output.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Suggested labels: area: sandbox, bug-fix

Suggested reviewers: cv

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the main change: improving the sandbox wipe failure warning with actionable recovery guidance.
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ 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/5970-destroy-workspace-not-wiped

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

@github-code-quality

github-code-quality Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in the fix/5970-destroy-wor... branch is 96%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main fix/5970-destroy-wor... 101a366 +/-
nemoclaw/src/se...cret-scanner.ts 100%
nemoclaw/src/commands/slash.ts 100%
nemoclaw/src/li...bprocess-env.ts 100%
nemoclaw/src/bl...eprint/state.ts 98%
nemoclaw/src/onboard/config.ts 98%
nemoclaw/src/bl...int/snapshot.ts 97%
nemoclaw/src/bl...print/runner.ts 95%
nemoclaw/src/co...ration-state.ts 94%
nemoclaw/src/bl...ate-networks.ts 94%
nemoclaw/src/index.ts 94%

TypeScript / code-coverage/cli

The overall coverage in the fix/5970-destroy-wor... branch is 68%. Coverage data for the main branch is not yet available.

Show a code coverage summary of the most covered files.
File main fix/5970-destroy-wor... 101a366 +/-
src/lib/shields...nsition-lock.ts 86%
src/lib/actions...dbox/rebuild.ts 80%
src/lib/actions...all/run-plan.ts 80%
src/lib/state/o...oard-session.ts 80%
src/lib/state/sandbox.ts 72%
src/lib/onboard/preflight.ts 69%
src/lib/shields/index.ts 67%
src/lib/onboard...er-gpu-patch.ts 59%
src/lib/actions...licy-channel.ts 58%
src/lib/onboard.ts 20%

Updated July 01, 2026 03:35 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor (Nemotron Ultra) — No blocking findings

Merge posture: No blocking advisor findings
Primary next action: Consider PRA-1: Em dash in warning string may not render in all terminals.
Open items: 0 required · 0 warnings · 1 suggestion · 0 test follow-ups
Since last review: 0 prior items resolved · 0 still apply · 0 new items found

Action checklist

  • PRA-1 In-scope improvement: Em dash in warning string may not render in all terminals in src/lib/actions/sandbox/wipe-state.ts:188

Findings index

ID Severity Category Location Required action
PRA-1 Improvement correctness src/lib/actions/sandbox/wipe-state.ts:188 Replace em dash with ASCII ' - ' or '--' for maximum terminal compatibility. Current-PR action recommended as it's a one-character change local to the modified line.
Review findings by urgency: 0 required fixes, 0 items to resolve/justify, 1 in-scope improvement

⚠️ Resolve or justify before merge

Investigate these in the current review; either fix them, explain why they are not applicable, or document the accepted risk.

  • None.

💡 In-scope improvements

These are lower-risk, not throwaway. Prefer fixing them in this PR when they are local to changed code; defer only with rationale or a linked follow-up.

PRA-1 Improvement — Em dash in warning string may not render in all terminals

  • Location: src/lib/actions/sandbox/wipe-state.ts:188
  • Category: correctness
  • Problem: The warning message uses a UTF-8 em dash (—) in the string literal. Modern terminals handle this fine, but for maximum compatibility consider ASCII alternative.
  • Impact: Cosmetic only — in rare legacy terminal environments the em dash may render as a replacement character or garbled output. Does not affect functionality or security.
  • Suggested action: Replace em dash with ASCII ' - ' or '--' for maximum terminal compatibility. Current-PR action recommended as it's a one-character change local to the modified line.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Check line 188-189 in wipe-state.ts for the em dash character in the warning string.
  • Missing regression test: Not needed — cosmetic only, no behavioral change.
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: Line 188-189: 'or — when this is your last sandbox — re-run destroy with --cleanup-gateway'
Simplification opportunities: 1 possible cut

These are safe simplification checks only. Do not remove validation, security controls, data-loss prevention, or required tests.

  • PRA-1 shrink (src/lib/actions/sandbox/wipe-state.ts:188): em dash (—) characters in warning string
    • Replacement: ASCII ' - ' or '--'
    • Net: 0 lines
    • Safety boundary: Warning message text only; no logic, validation, or execution path affected
Since last review details

Current findings, using the urgency labels above:

PRA-1 Improvement — Em dash in warning string may not render in all terminals

  • Location: src/lib/actions/sandbox/wipe-state.ts:188
  • Category: correctness
  • Problem: The warning message uses a UTF-8 em dash (—) in the string literal. Modern terminals handle this fine, but for maximum compatibility consider ASCII alternative.
  • Impact: Cosmetic only — in rare legacy terminal environments the em dash may render as a replacement character or garbled output. Does not affect functionality or security.
  • Suggested action: Replace em dash with ASCII ' - ' or '--' for maximum terminal compatibility. Current-PR action recommended as it's a one-character change local to the modified line.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Check line 188-189 in wipe-state.ts for the em dash character in the warning string.
  • Missing regression test: Not needed — cosmetic only, no behavioral change.
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: Line 188-189: 'or — when this is your last sandbox — re-run destroy with --cleanup-gateway'

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 1, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: sandbox-operations
Optional E2E: state-backup-restore

Dispatch hint: sandbox-operations

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • sandbox-operations (high): Required because a non-test source change touches sandbox destroy lifecycle code. This live job exercises real onboard/list/status/logs, multi-sandbox behavior, and nemoclaw <sandbox> destroy --yes removing NemoClaw and OpenShell entries.

Optional E2E

  • state-backup-restore (high): Optional adjacent confidence for destroy/recreate workspace-state behavior. It writes real workspace state, backs it up, destroys and recreates the sandbox, restores, and verifies workspace files return.

New E2E recommendations

  • destroy wipe failure recovery (medium): Existing live jobs exercise successful destroy and destroy/recreate flows, but do not appear to force openshell sandbox exec wipe failure and assert the user-facing recovery contract: warning includes both different sandbox name and --cleanup-gateway, same-name re-onboard may retain stale PVC state unless the gateway volume is purged.
    • Suggested test: Add a live E2E that creates workspace markers, forces/observes a wipe exec failure during destroy, verifies the warning text and retained-state behavior on same-name re-onboard, then verifies destroy --cleanup-gateway purges the retained volume.

Dispatch hint

  • Workflow: .github/workflows/e2e.yaml
  • jobs input: sandbox-operations

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

E2E Target Recommendation

Required E2E targets: sandbox-operations
Optional E2E targets: None

Dispatch required E2E targets:

  • 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

  • sandbox-operations: The PR changes sandbox destroy wipe-state behavior and warning handling. The sandbox-operations E2E job is the smallest wired live E2E path that exercises real NemoClaw/OpenShell sandbox lifecycle behavior, including destroy/remove contracts against live sandboxes.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=sandbox-operations

Optional E2E targets

  • None.

Relevant changed files

  • src/lib/actions/sandbox/wipe-state.ts

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Changes requested

Merge posture: Do not merge yet
Primary next action: Resolve or justify PRA-1: Linked #5970 is mitigated, not satisfied end-to-end.
Open items: 0 required · 1 warning · 0 suggestions · 7 test follow-ups
Since last review: 0 prior items resolved · 0 still apply · 1 new item found

Action checklist

  • PRA-1 Resolve or justify: Linked [All Platforms][Sandbox] nemoclaw destroy does not delete workspace files — USER.md persists after re-onboard #5970 is mitigated, not satisfied end-to-end in src/lib/actions/sandbox/wipe-state.ts:221
  • 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: Acceptance clause
  • PRA-T4 Add or justify test follow-up: Acceptance clause
  • PRA-T5 Add or justify test follow-up: Acceptance clause
  • PRA-T6 Add or justify test follow-up: Acceptance clause
  • PRA-T7 Add or justify test follow-up: Acceptance clause

Findings index

ID Severity Category Location Required action
PRA-1 Resolve/justify acceptance src/lib/actions/sandbox/wipe-state.ts:221 Keep this PR explicitly scoped as a mitigation/Refs-only change, or, if the intent is to satisfy #5970, add the root behavior and validation that same-name destroy/re-onboard cannot resurface USER.md/SOUL.md even for the failing non-live path.
Review findings by urgency: 0 required fixes, 1 item to resolve/justify, 0 in-scope improvements

⚠️ Resolve or justify before merge

Investigate these in the current review; either fix them, explain why they are not applicable, or document the accepted risk.

PRA-1 Resolve/justify — Linked #5970 is mitigated, not satisfied end-to-end

💡 In-scope improvements

These are lower-risk, not throwaway. Prefer fixing them in this PR when they are local to changed code; defer only with rationale or a linked follow-up.

  • None.
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 — Exercise destroy for a sandbox whose pod is already stopped or otherwise non-live, and assert the exec-fail warning includes both `re-onboard with a different sandbox name` and `--cleanup-gateway` while destroy continues.. The changed code is warning text only and has focused unit coverage, but it sits in sandbox destroy/recovery behavior where runtime validation gives higher confidence for the non-live failure path and manual recovery guidance.
  • PRA-T2 Runtime validation — If this PR is intended to satisfy [All Platforms][Sandbox] nemoclaw destroy does not delete workspace files — USER.md persists after re-onboard #5970 rather than mitigate it, validate same-name destroy/re-onboard behavior so USER.md and SOUL.md do not resurface after the relevant recovery path.. The changed code is warning text only and has focused unit coverage, but it sits in sandbox destroy/recovery behavior where runtime validation gives higher confidence for the non-live failure path and manual recovery guidance.
  • PRA-T3 Acceptance clause — NemoClaw v0.0.68: after `nemoclaw destroy` followed by re-onboard, user-created workspace files (USER.md, SOUL.md) persist in `/sandbox/.openclaw/workspace/`. — add test evidence or identify existing coverage. Existing nearby tests cover normal wipe behavior; this PR only adds warning recovery guidance when the wipe exec fails.
  • PRA-T4 Acceptance clause — The product CLI states "permanently delete the sandbox and all workspace files" but workspace content survives the destroy cycle. — add test evidence or identify existing coverage. The changed warning now tells users same-name re-onboard may resurface old files and names two recovery paths; it does not alter the durable PVC cleanup behavior.
  • PRA-T5 Acceptance clause — Fails on ALL 5 runners — 100% repro. — add test evidence or identify existing coverage. No runtime execution was performed in this read-only review; deterministic context includes no issue comments and the diff contains only warning text plus unit coverage.
  • PRA-T6 Acceptance clause — Device: All CI runners — add test evidence or identify existing coverage. Environment metadata from the linked issue; no platform-specific behavior is changed in this PR.
  • PRA-T7 Acceptance clause — OS: Ubuntu 24.04 / macOS / Windows WSL2 — add test evidence or identify existing coverage. Environment metadata from the linked issue; this PR changes a platform-independent TypeScript warning string.
Since last review details

Current findings, using the urgency labels above:

PRA-1 Resolve/justify — Linked #5970 is mitigated, not satisfied end-to-end

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 1, 2026

Copy link
Copy Markdown
Contributor

Vitest E2E Target Results — ✅ All requested jobs passed

Run: 28492424319
Workflow ref: fix/5970-destroy-workspace-not-wiped
Requested targets: (default — all supported)
Requested jobs: sandbox-operations
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
sandbox-operations ✅ success

@Dongni-Yang

Copy link
Copy Markdown
Contributor Author

Response to PR Review Advisor (GPT-5.5)

Thanks — responding to each open item. Short version: this PR is intentionally a warning-text mitigation, not the root fix for #5970, which is why it uses Refs #5970 rather than Fixes/Closes.

PRA-1 — "Warning-only mitigation does not satisfy the linked issue's cleanup contract" → Justified (accepted scope)

Agreed, and this is by design:

  • Root cause is upstream. The stale USER.md/SOUL.md survive because openshell sandbox delete retains the per-sandbox k3s PVC (keyed by sandbox name, living inside the shared openshell-cluster-<gateway> Docker volume). NemoClaw can only exec+rm inside a live pod; when the pod is already down at destroy time, there is no NemoClaw-side action that can purge the PVC. Making sandbox delete purge the PVC by default is an OpenShell change (also affects non-NemoClaw consumers). This is documented in the wipeSandboxState JSDoc (src/lib/actions/sandbox/wipe-state.ts:36-63, "Removal condition").
  • Non-overclaiming keyword. The PR uses Refs #5970, not Fixes/Closes, precisely so triage automation does not treat [All Platforms][Sandbox] nemoclaw destroy does not delete workspace files — USER.md persists after re-onboard #5970's data-removal contract as resolved. The PR summary and commit body both state explicitly that this is a message-only improvement and that the durable PVC retention is upstream-owned.
  • What the change does deliver: the previous dead-end warning ("re-onboarding with the same name may resurface old files.") now names two concrete self-serve recovery paths — a different sandbox name (fresh PVC), or, on the last sandbox, destroy --cleanup-gateway which removes the openshell-cluster-<gateway> volume that holds the PVC so the same name comes up clean (destroy-gateway.ts:114, gated by shouldCleanupGatewayAfterDestroy).

PRA-T1PRA-T8 — test follow-ups → Partly covered by live E2E; remainder deferred to the root fix

Live E2E dispatched and passed: the advisor-recommended required job sandbox-operations ran against this branch and passed — run 28492424319 (1 passed, 0 failed). It exercises real onboard/list/status/logs, multi-sandbox behavior, and nemoclaw <sandbox> destroy --yes against a live OpenShell-backed sandbox, confirming this change does not regress the live destroy lifecycle. This gives runtime coverage for the successful-destroy lifecycle behind PRA-T3 and the general destroy-contract concern.

The remaining items require forcing a wipe exec failure and asserting same-name re-onboard PVC state / --cleanup-gateway purge (PRA-T1, PRA-T2), which no wired live job does today:

  • This PR's changed surface is a warning string; the new red→green unit test in test/destroy-wipe-sandbox-state.test.ts fully covers it (asserts both recovery strings on the non-zero exec path).
  • The forced-failure runtime validations belong with the upstream root fix that actually purges the PVC. Adding them now would validate a behavior this PR does not change, and per the advisor's own note "the existing new warning-string unit test is sufficient for this PR but not for closing the issue."

The E2E Advisor separately flagged a good new test — "destroy wipe failure recovery" — which I've captured as the acceptance test to land alongside the upstream PVC-purge fix, not this mitigation.

Happy to adjust scope if a maintainer would prefer this PR be reframed or held for the root fix.

@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 1, 2026
@wscurran

wscurran commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

@cv
cv merged commit ad33616 into main Jul 3, 2026
131 checks passed
@cv
cv deleted the fix/5970-destroy-workspace-not-wiped branch July 3, 2026 07:38
@ericksoa ericksoa mentioned this pull request Jul 4, 2026
21 tasks
ericksoa added a commit that referenced this pull request Jul 4, 2026
<!-- markdownlint-disable MD041 -->
## Summary
This PR prepares the user-facing documentation for v0.0.74 before the
release plan is frozen.
It expands the release notes across the 56-commit train and closes
durable documentation gaps found during the pre-tag commit scan.

## Changes
- Expand the `v0.0.74` release notes to cover OpenShell 0.0.72, managed
MCP, progressive tool disclosure, LangChain Deep Agents Code,
onboarding, local inference, messaging, recovery, and contributor
workflows.
- Correct the `destroy` contract for retained per-name volumes,
gateway-unreachable `--force` cleanup, managed MCP ownership, and
same-name recovery.
- Document separate remediation for an unreachable container DNS
resolver versus one that answers with `NXDOMAIN` or `REFUSED`.
- Document the Windows on Arm N1X automatic Ollama safeguard and its
remaining large-model limitations.
- State that messaging conflicts abort rebuild before backup or
deletion, leaving the original sandbox intact.
- Link the agent-runnable value benchmark from the contributor task
index.
- Synchronize generated agent command variants.
- Validate with `npm run docs:sync-agent-variants` and `npm run docs`;
Fern completed with 0 errors and 2 existing warnings.
- Source summary:
- [#6020](#6020) and
[#5876](#5876) ->
`docs/about/release-notes.mdx`: Consolidate the OpenShell 0.0.72 policy
boundary and managed MCP lifecycle.
- [#6251](#6251) and
[#5989](#5989) ->
`docs/about/release-notes.mdx`: Summarize progressive tool disclosure
and sandbox-first inference controls.
- [#6232](#6232),
[#6082](#6082),
[#6219](#6219),
[#6214](#6214),
[#6215](#6215),
[#6230](#6230), and
[#6260](#6260) ->
`docs/about/release-notes.mdx`: Summarize the experimental LangChain
Deep Agents Code status, secret, version, rebuild, snapshot, and MCP
boundaries.
- [#6166](#6166),
[#6254](#6254),
[#6265](#6265),
[#6164](#6164), and
[#6017](#6017) ->
`docs/about/release-notes.mdx`: Summarize BuildKit prebuild, validated
image reuse, bounded readiness, and preflight improvements.
- [#6150](#6150) ->
`docs/about/release-notes.mdx` and `docs/reference/troubleshooting.mdx`:
Separate unreachable-resolver remediation from reachable-but-rejected
DNS responses.
- [#6234](#6234) ->
`docs/about/release-notes.mdx`,
`docs/inference/use-local-inference.mdx`, and
`docs/get-started/windows-preparation.mdx`: Document N1X automatic 9B
selection and the remaining explicit-large-model boundary.
- [#6129](#6129),
[#5987](#5987),
[#5955](#5955), and
[#6220](#6220) ->
`docs/about/release-notes.mdx`,
`docs/manage-sandboxes/messaging-channels.mdx`,
`docs/reference/commands.mdx`, and
`docs/reference/commands-nemohermes.mdx`: Document messaging policy
persistence, status, and the pre-destructive conflict check.
- [#5963](#5963),
[#6050](#6050),
[#6094](#6094),
[#6238](#6238),
[#5988](#5988),
[#6235](#6235),
[#6181](#6181), and
[#5986](#5986) ->
`docs/about/release-notes.mdx`, `docs/reference/commands.mdx`, and
`docs/reference/commands-nemohermes.mdx`: Summarize day-two recovery and
clarify retained-volume and local-only destroy semantics.
- [#6200](#6200),
[#6248](#6248),
[#6168](#6168),
[#6270](#6270), and
[#5649](#5649) ->
`docs/about/release-notes.mdx` and `CONTRIBUTING.md`: Summarize
contributor setup and verification improvements and expose the advisory
value benchmark.

## 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
<!-- Check exactly one tests line and one docs line. Check other lines
when applicable. Add every requested justification or approval
reference. -->
- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: documentation-only release
preparation; generated-variant synchronization and the Fern docs build
validate the changed pages 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
<!-- Check each applicable item only when supported by the requested
evidence. Run targeted tests once per relevant change set and rerun
after later edits or hook autofixes that can affect the tested behavior.
Do not rerun hook-covered checks. -->
- [x] PR description includes 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 — command/result or justification: tests
are not applicable to this documentation-only change; `npm run docs`
validates the source and generated routes.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result:
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only)
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

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


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

## Summary by CodeRabbit

* **Documentation**
* Expanded setup guidance for Windows on Arm devices with safer default
local model selection.
* Clarified local inference and sandbox messaging behavior, including
conflict checks before rebuilds and safer recovery steps.
* Updated destroy/rebuild/reference docs with more detailed warnings,
failure handling, and volume-retention guidance.
* Improved troubleshooting instructions for Docker DNS issues with
clearer paths for unreachable vs. blocked resolvers.

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

---------

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
NVIDIA#6094)

<!-- markdownlint-disable MD041 -->
## Summary
When `nemoclaw destroy` cannot wipe a sandbox's workspace because the
pod is no longer live, the exec-fail warning now names concrete
self-serve recovery paths so users don't hit stale `USER.md`/`SOUL.md`
after re-onboarding with the same name (NVIDIA#5970). This is a message-only
improvement; the durable PVC retention that causes the stale files is
owned upstream by OpenShell `sandbox delete` semantics (NemoClaw can
only `exec`+`rm` while the pod is live).

> **Scope:** intentionally a warning-text mitigation, not the root fix
for NVIDIA#5970 — hence `Refs`, not `Fixes`/`Closes`. The actual PVC purge
requires an upstream OpenShell change (`sandbox delete` retains the
per-sandbox k3s PVC by design). See the response to the PR Review
Advisor's `PRA-1` in the thread for the full rationale.

## Related Issue
Refs NVIDIA#5970

## Changes
- `src/lib/actions/sandbox/wipe-state.ts` — the best-effort exec-fail
warning in `wipeSandboxState()` now names two self-serve recovery paths
instead of a dead-end "may resurface old files" note: (1) re-onboard
with a different sandbox name (fresh PVC), or (2) when this is the last
sandbox, re-run `destroy --cleanup-gateway` to purge the shared cluster
volume that retains the PVC so the same name comes up clean.
- `test/destroy-wipe-sandbox-state.test.ts` — new red→green test
asserting the exec-fail warning (non-zero `sandbox exec`) names both
recovery paths.
- Note: the local `test-cli` pre-commit hook (full CLI+integration suite
with coverage) was skipped locally because it hangs starting an
OpenShell gateway on this host (glibc 2.31, no live gateway); targeted
tests for the changed behavior pass and CI runs the full suite
(`cli-test-shards` 1–5 all green).
- Live E2E: the advisor-required `sandbox-operations` job was dispatched
against this branch and **passed** ([run
28492424319](https://github.com/NVIDIA/NemoClaw/actions/runs/28492424319)),
confirming the live destroy lifecycle this change touches does not
regress.

## 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: internal CLI warning-text
change; no doc page quotes this specific message and `--cleanup-gateway`
is already documented
- [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: message-only change
(pure string append; no logic, control-flow, or signature change); all
standard CI green plus the advisor-required `sandbox-operations` live
E2E passed ([run
28492424319](https://github.com/NVIDIA/NemoClaw/actions/runs/28492424319))
- [ ] 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
- [ ] Git hooks passed during commit and push, or `npx prek run
--from-ref main --to-ref HEAD` passes
- [x] Targeted tests pass for changed behavior
- [ ] Full `npm test` passes (broad runtime changes only)
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only)
- [ ] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

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

Signed-off-by: Dongni Yang <dongniy@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- markdownlint-disable MD041 -->
## Summary
This PR prepares the user-facing documentation for v0.0.74 before the
release plan is frozen.
It expands the release notes across the 56-commit train and closes
durable documentation gaps found during the pre-tag commit scan.

## Changes
- Expand the `v0.0.74` release notes to cover OpenShell 0.0.72, managed
MCP, progressive tool disclosure, LangChain Deep Agents Code,
onboarding, local inference, messaging, recovery, and contributor
workflows.
- Correct the `destroy` contract for retained per-name volumes,
gateway-unreachable `--force` cleanup, managed MCP ownership, and
same-name recovery.
- Document separate remediation for an unreachable container DNS
resolver versus one that answers with `NXDOMAIN` or `REFUSED`.
- Document the Windows on Arm N1X automatic Ollama safeguard and its
remaining large-model limitations.
- State that messaging conflicts abort rebuild before backup or
deletion, leaving the original sandbox intact.
- Link the agent-runnable value benchmark from the contributor task
index.
- Synchronize generated agent command variants.
- Validate with `npm run docs:sync-agent-variants` and `npm run docs`;
Fern completed with 0 errors and 2 existing warnings.
- Source summary:
- [NVIDIA#6020](NVIDIA#6020) and
[NVIDIA#5876](NVIDIA#5876) ->
`docs/about/release-notes.mdx`: Consolidate the OpenShell 0.0.72 policy
boundary and managed MCP lifecycle.
- [NVIDIA#6251](NVIDIA#6251) and
[NVIDIA#5989](NVIDIA#5989) ->
`docs/about/release-notes.mdx`: Summarize progressive tool disclosure
and sandbox-first inference controls.
- [NVIDIA#6232](NVIDIA#6232),
[NVIDIA#6082](NVIDIA#6082),
[NVIDIA#6219](NVIDIA#6219),
[NVIDIA#6214](NVIDIA#6214),
[NVIDIA#6215](NVIDIA#6215),
[NVIDIA#6230](NVIDIA#6230), and
[NVIDIA#6260](NVIDIA#6260) ->
`docs/about/release-notes.mdx`: Summarize the experimental LangChain
Deep Agents Code status, secret, version, rebuild, snapshot, and MCP
boundaries.
- [NVIDIA#6166](NVIDIA#6166),
[NVIDIA#6254](NVIDIA#6254),
[NVIDIA#6265](NVIDIA#6265),
[NVIDIA#6164](NVIDIA#6164), and
[NVIDIA#6017](NVIDIA#6017) ->
`docs/about/release-notes.mdx`: Summarize BuildKit prebuild, validated
image reuse, bounded readiness, and preflight improvements.
- [NVIDIA#6150](NVIDIA#6150) ->
`docs/about/release-notes.mdx` and `docs/reference/troubleshooting.mdx`:
Separate unreachable-resolver remediation from reachable-but-rejected
DNS responses.
- [NVIDIA#6234](NVIDIA#6234) ->
`docs/about/release-notes.mdx`,
`docs/inference/use-local-inference.mdx`, and
`docs/get-started/windows-preparation.mdx`: Document N1X automatic 9B
selection and the remaining explicit-large-model boundary.
- [NVIDIA#6129](NVIDIA#6129),
[NVIDIA#5987](NVIDIA#5987),
[NVIDIA#5955](NVIDIA#5955), and
[NVIDIA#6220](NVIDIA#6220) ->
`docs/about/release-notes.mdx`,
`docs/manage-sandboxes/messaging-channels.mdx`,
`docs/reference/commands.mdx`, and
`docs/reference/commands-nemohermes.mdx`: Document messaging policy
persistence, status, and the pre-destructive conflict check.
- [NVIDIA#5963](NVIDIA#5963),
[NVIDIA#6050](NVIDIA#6050),
[NVIDIA#6094](NVIDIA#6094),
[NVIDIA#6238](NVIDIA#6238),
[NVIDIA#5988](NVIDIA#5988),
[NVIDIA#6235](NVIDIA#6235),
[NVIDIA#6181](NVIDIA#6181), and
[NVIDIA#5986](NVIDIA#5986) ->
`docs/about/release-notes.mdx`, `docs/reference/commands.mdx`, and
`docs/reference/commands-nemohermes.mdx`: Summarize day-two recovery and
clarify retained-volume and local-only destroy semantics.
- [NVIDIA#6200](NVIDIA#6200),
[NVIDIA#6248](NVIDIA#6248),
[NVIDIA#6168](NVIDIA#6168),
[NVIDIA#6270](NVIDIA#6270), and
[NVIDIA#5649](NVIDIA#5649) ->
`docs/about/release-notes.mdx` and `CONTRIBUTING.md`: Summarize
contributor setup and verification improvements and expose the advisory
value benchmark.

## 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
<!-- Check exactly one tests line and one docs line. Check other lines
when applicable. Add every requested justification or approval
reference. -->
- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: documentation-only release
preparation; generated-variant synchronization and the Fern docs build
validate the changed pages 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
<!-- Check each applicable item only when supported by the requested
evidence. Run targeted tests once per relevant change set and rerun
after later edits or hook autofixes that can affect the tested behavior.
Do not rerun hook-covered checks. -->
- [x] PR description includes 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 — command/result or justification: tests
are not applicable to this documentation-only change; `npm run docs`
validates the source and generated routes.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result:
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only)
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)

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


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

## Summary by CodeRabbit

* **Documentation**
* Expanded setup guidance for Windows on Arm devices with safer default
local model selection.
* Clarified local inference and sandbox messaging behavior, including
conflict checks before rebuilds and safer recovery steps.
* Updated destroy/rebuild/reference docs with more detailed warnings,
failure handling, and volume-retention guidance.
* Improved troubleshooting instructions for Docker DNS issues with
clearer paths for unreachable vs. blocked resolvers.

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

---------

Signed-off-by: Aaron Erickson <aerickson@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