Skip to content

fix(sandbox): allow rebuild --force to skip backup when container is unreachable - #6211

Merged
cv merged 2 commits into
NVIDIA:mainfrom
kagura-agent:fix/rebuild-force-skip-backup
Jul 8, 2026
Merged

fix(sandbox): allow rebuild --force to skip backup when container is unreachable#6211
cv merged 2 commits into
NVIDIA:mainfrom
kagura-agent:fix/rebuild-force-skip-backup

Conversation

@kagura-agent

@kagura-agent kagura-agent commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Problem

When a sandbox container is killed or crashes (Phase: Error), nemoclaw <name> rebuild --yes consistently aborts during backup:

Backing up sandbox state...
Failed to back up sandbox state.
Failed: agents, extensions, workspace, skills, hooks, identity, devices, canvas, cron, memory, ...
Failed files: openclaw.json
Aborting rebuild to prevent data loss.

The recovery path that status itself recommends (rebuild --yes) cannot complete because SSH into the dead container fails, and no state can be backed up.

Root Cause

backupSandboxStateForRebuild uses SSH to copy state from inside the sandbox. When the container is dead, SSH fails completely (0 dirs, 0 files backed up). The function unconditionally aborts on total backup failure with no recovery option.

The staleRecovery path (which skips backup) only activates when the sandbox is missing from openshell sandbox list. But a crashed container may still appear "live" in the gateway, so staleRecovery stays false.

Fix

  • When backup fails completely AND --force is passed, skip backup and proceed with rebuild (returning null, same as staleRecovery), with a clear warning about potential data loss
  • Without --force, preserve existing abort behavior but add a hint: re-run with --force to skip the backup and recreate the sandbox
  • Recovery command: nemoclaw <name> rebuild --yes --force

Changes

  • rebuild-flow-helpers.ts: Add options: { force?: boolean } parameter to backupSandboxStateForRebuild. On total backup failure with force: true, warn and return null instead of aborting. On abort without force, add --force hint.
  • rebuild.ts: Pass normalized.force to backupSandboxStateForRebuild
  • rebuild-flow-helpers.test.ts: 3 new tests covering force-skip, abort-without-force, and hint-in-error-message

Testing

  • All 8 tests in rebuild-flow-helpers.test.ts pass (5 existing + 3 new)
  • Build passes with tsc -p tsconfig.src.json

Fixes #6135

Summary by CodeRabbit

  • New Features

    • Added an optional force flag for sandbox rebuilds to allow the process to continue when backup preparation fails by returning null and using existing registry metadata.
  • Bug Fixes

    • Improved rebuild backup failure handling with clearer warning/error output and consistent behavior when force is set, omitted, or false.
  • Tests

    • Added Vitest coverage for force modes, including assertions for console messages and expected bail/return behavior.

Signed-off-by: kagura-agent kagura.agent.ai@gmail.com

@copy-pr-bot

copy-pr-bot Bot commented Jul 2, 2026

Copy link
Copy Markdown

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

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@coderabbitai

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

Adds an optional force flag to the sandbox rebuild backup flow. When total backup failure occurs with force enabled, the helper returns null instead of aborting, and the flag is passed from the rebuild pipeline into the backup phase.

Changes

Force skip backup on rebuild

Layer / File(s) Summary
Force option implementation in backup helper
src/lib/actions/sandbox/rebuild-flow-helpers.ts
backupSandboxStateForRebuild gains an optional options?: { force?: boolean } parameter; on total backup failure, force mode warns and returns null instead of continuing to the abort/bail path.
Wiring force flag through rebuild phase and pipeline
src/lib/actions/sandbox/rebuild-backup-phase.ts, src/lib/actions/sandbox/rebuild-pipeline.ts
RebuildBackupPhaseInput gains an optional force property forwarded into backupSandboxStateForRebuild; rebuildSandboxUnlocked normalizes options via normalizeRebuildSandboxOptions and passes force into runRebuildBackupPhase.
Tests for force skip behavior
src/lib/actions/sandbox/rebuild-flow-helpers.test.ts
New describe suite mocks total backup failure and verifies null-with-warning on force: true, bail with --force hint when omitted, and bail when force: false.

Estimated code review effort: 2 (Simple) | ~15 minutes

Suggested reviewers: cjagwani

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The changes match #6135 by preserving abort-by-default, adding a --force skip path, and keeping the recovery flow working when backup fully fails.
Out of Scope Changes check ✅ Passed The touched code stays within sandbox rebuild backup/force handling and the related tests, with no obvious unrelated changes.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main change: enabling rebuild --force to skip backup when the container is unreachable.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

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

⚠️ Outside diff range comments (1)
src/lib/actions/sandbox/rebuild.ts (1)

1327-1343: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Forced backup-skip isn't reflected in the final rebuild summary.

When --force skips a total backup failure, backupManifest is null and staleRecovery is false, so postRestoreComplete can still be true and the code prints the plain "rebuilt successfully" message — identical to a normal, fully-backed-up rebuild. The only "no prior state" callout is gated on staleRecovery && !backupManifest (Line 1336), which never fires for the new forced-skip path, so the final summary silently omits that workspace data was discarded.

🛠️ Proposed fix
     if (postRestoreComplete) {
       console.log(`  ${G}\u2713${R} Sandbox '${sandboxName}' rebuilt successfully`);
       if (staleRecovery && !backupManifest) {
         console.log(
           `    ${D}Recovered from a stale registry entry \u2014 no prior workspace state was available to restore.${R}`,
         );
+      } else if (!staleRecovery && !recoveryManifest && !backupManifest) {
+        console.log(
+          `    ${YW}\u26a0${R} Backup was skipped via --force after a total backup failure \u2014 prior workspace state was not preserved.${R}`,
+        );
       }
🤖 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/rebuild.ts` around lines 1327 - 1343, The final
rebuild summary in rebuild() does not distinguish the forced backup-skip path
from a normal successful restore. Update the success-summary logic around
postRestoreComplete so it also detects the case where backupManifest is null
because --force skipped a total backup failure, and print an explicit callout in
that branch instead of only relying on staleRecovery && !backupManifest. Use the
existing rebuild summary block and symbols like postRestoreComplete,
staleRecovery, and backupManifest to keep the messaging accurate.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@src/lib/actions/sandbox/rebuild.ts`:
- Around line 1327-1343: The final rebuild summary in rebuild() does not
distinguish the forced backup-skip path from a normal successful restore. Update
the success-summary logic around postRestoreComplete so it also detects the case
where backupManifest is null because --force skipped a total backup failure, and
print an explicit callout in that branch instead of only relying on
staleRecovery && !backupManifest. Use the existing rebuild summary block and
symbols like postRestoreComplete, staleRecovery, and backupManifest to keep the
messaging accurate.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: b277673d-85e1-4bac-a31e-bc186dd51de5

📥 Commits

Reviewing files that changed from the base of the PR and between 12ec9fe and 6e930b9.

📒 Files selected for processing (3)
  • src/lib/actions/sandbox/rebuild-flow-helpers.test.ts
  • src/lib/actions/sandbox/rebuild-flow-helpers.ts
  • src/lib/actions/sandbox/rebuild.ts

@wscurran
wscurran requested a review from prekshivyas July 2, 2026 23:19
@wscurran wscurran added area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery bug-fix PR fixes a bug or regression labels Jul 2, 2026
@wscurran

wscurran commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

✨ Thanks for the PR. This fixes the recovery path where rebuild --yes aborts on dead containers by adding --force to skip backup when the container is unreachable. Ready for maintainer review.


Related open issues:


Related open issues:

@kagura-agent

Copy link
Copy Markdown
Contributor Author

Thanks for the catch — addressed in 91ac805. The rebuild summary now shows a ⚠ callout when --force skips a total backup failure, so the user knows workspace state wasn't preserved.

@cv

cv commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator

Coordination note from #6388: that performance PR converts rebuild-flow-helpers.test.ts from createRequire/cache reloads to native imports and is intended to land first. I inspected this PR’s overlap; it is mechanical rather than a behavior conflict. On rebase, retain the new backupSandboxStateForRebuild with --force cases, spy on the imported sandboxState namespace directly, and call the statically imported helper. Please rebase #6211 after #6388 merges so both the functional coverage and the retired loader seam are preserved.

@kagura-agent

Copy link
Copy Markdown
Contributor Author

Thanks for the coordination note. I'll rebase #6211 after #6388 lands — will retain the backupSandboxStateForRebuild with --force test cases and adapt the spy/import style to match the new approach.

@kagura-agent
kagura-agent force-pushed the fix/rebuild-force-skip-backup branch from f12f3a6 to 5fb8a6d Compare July 7, 2026 18:13
@kagura-agent

Copy link
Copy Markdown
Contributor Author

Thanks for the heads-up @cv! #6388 is merged — I'll rebase onto main, retain the --force backup skip test cases, switch to imported namespace spying, and use the statically imported helper. Will push the updated branch shortly.

@kagura-agent
kagura-agent force-pushed the fix/rebuild-force-skip-backup branch from 5fb8a6d to be98230 Compare July 8, 2026 00:07
…unreachable

When a sandbox container is killed or in Error phase, 'rebuild --force'
aborts during backup because the container cannot be reached.

Add a --force flag that skips the backup step when the container is
unreachable, allowing the user to rebuild without manual cleanup.

Signed-off-by: kagura-agent <kagura.chen28@gmail.com>
Signed-off-by: kagura-agent <kagura.agent.ai@gmail.com>
@kagura-agent
kagura-agent force-pushed the fix/rebuild-force-skip-backup branch from be98230 to 86dfa57 Compare July 8, 2026 01:24
@kagura-agent

Copy link
Copy Markdown
Contributor Author

Rebased onto main (includes #6388). All 16 tests pass — the spy/import style already matches the new pattern from #6388 (namespace import + vi.spyOn). No behavioral changes, just a clean rebase.

@cv cv added the v0.0.77 label Jul 8, 2026
@cjagwani cjagwani self-assigned this Jul 8, 2026
@cjagwani
cjagwani self-requested a review July 8, 2026 14:35
@ericksoa ericksoa added v0.0.78 and removed v0.0.77 labels Jul 8, 2026
Keep the destructive backup-loss warning in the final rebuild summary after --force skips a total backup failure.

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

cjagwani commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

Maintainer follow-up pushed at exact head b76ae2ad.

The post-rebase branch still lost the final-summary warning called out in the earlier review: after --force skipped a total backup failure, the terminal ended with only the normal success line. This head now carries an explicit backupWasForceSkipped signal through the rebuild phases and repeats the data-loss warning in the successful final summary.

Local validation on the exact content:

  • npm run build:cli
  • npm run typecheck:cli
  • 42 focused rebuild tests
  • Biome format + lint on all five touched files
  • npm run test-size:check

All passed. The commit is GitHub-signed and DCO-signed.

@kagura-agent

Copy link
Copy Markdown
Contributor Author

Thanks @cjagwani! The backupWasForceSkipped signal through the rebuild phases is a much cleaner approach — appreciate you tying it up.

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

Approved exact signed head after the final-summary data-loss warning was restored. The force-skip signal is carried explicitly through the rebuild phases, all required checks pass, and no unresolved threads remain.

@cv
cv merged commit edf69f0 into NVIDIA:main Jul 8, 2026
29 checks passed
@cjagwani cjagwani mentioned this pull request Jul 9, 2026
21 tasks
cv pushed a commit that referenced this pull request Jul 9, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Prepares the user documentation for NemoClaw v0.0.78 by replacing the
unreleased section with release highlights and synchronizing the
affected inference, lifecycle, messaging, and CLI reference pages with
merged behavior.

## Changes

- Publish the v0.0.78 release-notes section with links to the most
specific user guides for each shipped behavior.
- Document authoritative Deep Agents route health, Nemotron Ultra
profile behavior, and Hermes compatible-endpoint context metadata.
- Document forced rebuild recovery after total backup failure and the
ownership-safe tunnel/full-stop behavior.
- Keep command examples and shared agent variants aligned with the
current OpenClaw, Hermes, and Deep Agents interfaces.

Source mapping:

- [#3787](#3787) ->
`docs/about/release-notes.mdx`: Record reliable workspace template
seeding during sandbox startup.
- [#4960](#4960) ->
`docs/about/release-notes.mdx`: Record safer detection of rewritten
OpenClaw gateway processes.
- [#5676](#5676) ->
`docs/about/release-notes.mdx`: Record warning-tolerant agent-list JSON
handling.
- [#5857](#5857) ->
`docs/about/release-notes.mdx`: Record synchronization of explicit
OpenClaw main-agent model state.
- [#5929](#5929) ->
`docs/about/release-notes.mdx`: Record copyable SSH port-forward
guidance for remote dashboards.
- [#6068](#6068) ->
`docs/about/release-notes.mdx`: Record custom-image plugin provenance
reconciliation.
- [#6116](#6116) ->
`docs/about/release-notes.mdx`: Record live-loopback dashboard-forward
recovery.
- [#6122](#6122) ->
`docs/about/release-notes.mdx`: Announce validated, round-trippable
policy YAML output.
- [#6211](#6211) ->
`docs/manage-sandboxes/lifecycle.mdx`, `docs/reference/commands.mdx`,
`docs/about/release-notes.mdx`: Explain the explicit no-backup `rebuild
--force` recovery boundary.
- [#6283](#6283) ->
`docs/about/release-notes.mdx`: Record Hermes WebUI port alignment.
- [#6293](#6293) ->
`docs/inference/switch-inference-providers.mdx`,
`docs/about/release-notes.mdx`: Document compatible-endpoint
context-length probing for Hermes.
- [#6320](#6320) ->
`docs/about/release-notes.mdx`: Record bounded gateway-recovery waits.
- [#6377](#6377) ->
`docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Explain
rebuild diagnostics and prepared MCP-destroy recovery.
- [#6412](#6412) ->
`docs/get-started/quickstart-langchain-deepagents-code.mdx`,
`docs/about/release-notes.mdx`: Document authoritative agent-visible
inference route health.
- [#6421](#6421) ->
`docs/about/release-notes.mdx`: Record the longer quiet-pull window for
managed vLLM images.
- [#6431](#6431) ->
`docs/inference/model-capability-audit.mdx`,
`docs/about/release-notes.mdx`: Document the version-pinned Nemotron
Ultra profile plugin.
- [#6439](#6439) ->
`docs/about/release-notes.mdx`: Summarize the authenticated, pinned
credential-capture helper boundary.
- [#6450](#6450) ->
`docs/manage-sandboxes/messaging-channels.mdx`,
`docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Document
host-forward cleanup and ownership-safe gateway-port release.
- [#6474](#6474) ->
`docs/manage-sandboxes/messaging-channels.mdx`,
`docs/about/release-notes.mdx`: Record composable OpenClaw messaging
runtime loaders.
- [#6475](#6475) ->
`docs/about/release-notes.mdx`: Record removal of the unavailable Kimi
K2.6 production endpoint option.
- [#6480](#6480) ->
`docs/about/release-notes.mdx`: Record stderr routing for the plugin
registration banner.
- [#6481](#6481) ->
`docs/about/release-notes.mdx`: Record post-pull Ollama model discovery
checks.
- [#6482](#6482) ->
`docs/about/release-notes.mdx`: Record Ollama model warm-up after daemon
restart.
- [#6486](#6486) ->
`docs/about/release-notes.mdx`: Publish the opt-in, thread-scoped Deep
Agents auto-approval boundary.
- [#6490](#6490) ->
`docs/about/release-notes.mdx`: Record diagnostics for custom images
missing the managed runtime.
- [#6494](#6494) ->
`docs/inference/model-capability-audit.mdx`,
`docs/about/release-notes.mdx`: Document nonempty tool-call content
preservation and placeholder rejection.
- [#6497](#6497) ->
`docs/get-started/quickstart-langchain-deepagents-code.mdx`,
`docs/about/release-notes.mdx`: Document isolated Deep Agents
route-probe output.
- [#6506](#6506) ->
`docs/get-started/quickstart-langchain-deepagents-code.mdx`,
`docs/about/release-notes.mdx`: Document observability-preserving
managed route probes.
- [#6508](#6508) ->
`docs/about/release-notes.mdx`: Link the new extension taxonomy and
SDK-readiness reference from the release summary.

Release-source verification: GitHub reports all 29 cited source PRs as
merged with base `main`, and every merge commit is an ancestor of
`origin/main` at `17bf9a6a9688b3b1d69cf4b37d3f23110acb055e`. No
source-mapping mismatches were found.

## 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-prep changes; `npm run docs` validates variants, routes, and
Fern content.
- [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 set.
- [ ] 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) — exited
0 with zero errors; Fern reported the existing unauthenticated
redirect-check and light-mode contrast warnings.
- [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: Charan Jagwani <cjagwani@nvidia.com>

---------

Signed-off-by: cjagwani <cjagwani@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
…unreachable (NVIDIA#6211)

## Problem

When a sandbox container is killed or crashes (`Phase: Error`),
`nemoclaw <name> rebuild --yes` consistently aborts during backup:

```
Backing up sandbox state...
Failed to back up sandbox state.
Failed: agents, extensions, workspace, skills, hooks, identity, devices, canvas, cron, memory, ...
Failed files: openclaw.json
Aborting rebuild to prevent data loss.
```

The recovery path that `status` itself recommends (`rebuild --yes`)
cannot complete because SSH into the dead container fails, and no state
can be backed up.

## Root Cause

`backupSandboxStateForRebuild` uses SSH to copy state from inside the
sandbox. When the container is dead, SSH fails completely (0 dirs, 0
files backed up). The function unconditionally aborts on total backup
failure with no recovery option.

The `staleRecovery` path (which skips backup) only activates when the
sandbox is missing from `openshell sandbox list`. But a crashed
container may still appear "live" in the gateway, so `staleRecovery`
stays `false`.

## Fix

- When backup fails completely AND `--force` is passed, skip backup and
proceed with rebuild (returning `null`, same as `staleRecovery`), with a
clear warning about potential data loss
- Without `--force`, preserve existing abort behavior but add a hint:
`re-run with --force to skip the backup and recreate the sandbox`
- Recovery command: `nemoclaw <name> rebuild --yes --force`

## Changes

- `rebuild-flow-helpers.ts`: Add `options: { force?: boolean }`
parameter to `backupSandboxStateForRebuild`. On total backup failure
with `force: true`, warn and return `null` instead of aborting. On abort
without force, add `--force` hint.
- `rebuild.ts`: Pass `normalized.force` to
`backupSandboxStateForRebuild`
- `rebuild-flow-helpers.test.ts`: 3 new tests covering force-skip,
abort-without-force, and hint-in-error-message

## Testing

- All 8 tests in `rebuild-flow-helpers.test.ts` pass (5 existing + 3
new)
- Build passes with `tsc -p tsconfig.src.json`

Fixes NVIDIA#6135

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

* **New Features**
* Added an optional `force` flag for sandbox rebuilds to allow the
process to continue when backup preparation fails by returning `null`
and using existing registry metadata.

* **Bug Fixes**
* Improved rebuild backup failure handling with clearer warning/error
output and consistent behavior when `force` is set, omitted, or `false`.

* **Tests**
* Added Vitest coverage for `force` modes, including assertions for
console messages and expected bail/return behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---
Signed-off-by: kagura-agent <kagura.agent.ai@gmail.com>

---------

Signed-off-by: kagura-agent <kagura.chen28@gmail.com>
Signed-off-by: kagura-agent <kagura.agent.ai@gmail.com>
Signed-off-by: cjagwani <cjagwani@nvidia.com>
Co-authored-by: cjagwani <cjagwani@nvidia.com>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Prepares the user documentation for NemoClaw v0.0.78 by replacing the
unreleased section with release highlights and synchronizing the
affected inference, lifecycle, messaging, and CLI reference pages with
merged behavior.

## Changes

- Publish the v0.0.78 release-notes section with links to the most
specific user guides for each shipped behavior.
- Document authoritative Deep Agents route health, Nemotron Ultra
profile behavior, and Hermes compatible-endpoint context metadata.
- Document forced rebuild recovery after total backup failure and the
ownership-safe tunnel/full-stop behavior.
- Keep command examples and shared agent variants aligned with the
current OpenClaw, Hermes, and Deep Agents interfaces.

Source mapping:

- [NVIDIA#3787](NVIDIA#3787) ->
`docs/about/release-notes.mdx`: Record reliable workspace template
seeding during sandbox startup.
- [NVIDIA#4960](NVIDIA#4960) ->
`docs/about/release-notes.mdx`: Record safer detection of rewritten
OpenClaw gateway processes.
- [NVIDIA#5676](NVIDIA#5676) ->
`docs/about/release-notes.mdx`: Record warning-tolerant agent-list JSON
handling.
- [NVIDIA#5857](NVIDIA#5857) ->
`docs/about/release-notes.mdx`: Record synchronization of explicit
OpenClaw main-agent model state.
- [NVIDIA#5929](NVIDIA#5929) ->
`docs/about/release-notes.mdx`: Record copyable SSH port-forward
guidance for remote dashboards.
- [NVIDIA#6068](NVIDIA#6068) ->
`docs/about/release-notes.mdx`: Record custom-image plugin provenance
reconciliation.
- [NVIDIA#6116](NVIDIA#6116) ->
`docs/about/release-notes.mdx`: Record live-loopback dashboard-forward
recovery.
- [NVIDIA#6122](NVIDIA#6122) ->
`docs/about/release-notes.mdx`: Announce validated, round-trippable
policy YAML output.
- [NVIDIA#6211](NVIDIA#6211) ->
`docs/manage-sandboxes/lifecycle.mdx`, `docs/reference/commands.mdx`,
`docs/about/release-notes.mdx`: Explain the explicit no-backup `rebuild
--force` recovery boundary.
- [NVIDIA#6283](NVIDIA#6283) ->
`docs/about/release-notes.mdx`: Record Hermes WebUI port alignment.
- [NVIDIA#6293](NVIDIA#6293) ->
`docs/inference/switch-inference-providers.mdx`,
`docs/about/release-notes.mdx`: Document compatible-endpoint
context-length probing for Hermes.
- [NVIDIA#6320](NVIDIA#6320) ->
`docs/about/release-notes.mdx`: Record bounded gateway-recovery waits.
- [NVIDIA#6377](NVIDIA#6377) ->
`docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Explain
rebuild diagnostics and prepared MCP-destroy recovery.
- [NVIDIA#6412](NVIDIA#6412) ->
`docs/get-started/quickstart-langchain-deepagents-code.mdx`,
`docs/about/release-notes.mdx`: Document authoritative agent-visible
inference route health.
- [NVIDIA#6421](NVIDIA#6421) ->
`docs/about/release-notes.mdx`: Record the longer quiet-pull window for
managed vLLM images.
- [NVIDIA#6431](NVIDIA#6431) ->
`docs/inference/model-capability-audit.mdx`,
`docs/about/release-notes.mdx`: Document the version-pinned Nemotron
Ultra profile plugin.
- [NVIDIA#6439](NVIDIA#6439) ->
`docs/about/release-notes.mdx`: Summarize the authenticated, pinned
credential-capture helper boundary.
- [NVIDIA#6450](NVIDIA#6450) ->
`docs/manage-sandboxes/messaging-channels.mdx`,
`docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Document
host-forward cleanup and ownership-safe gateway-port release.
- [NVIDIA#6474](NVIDIA#6474) ->
`docs/manage-sandboxes/messaging-channels.mdx`,
`docs/about/release-notes.mdx`: Record composable OpenClaw messaging
runtime loaders.
- [NVIDIA#6475](NVIDIA#6475) ->
`docs/about/release-notes.mdx`: Record removal of the unavailable Kimi
K2.6 production endpoint option.
- [NVIDIA#6480](NVIDIA#6480) ->
`docs/about/release-notes.mdx`: Record stderr routing for the plugin
registration banner.
- [NVIDIA#6481](NVIDIA#6481) ->
`docs/about/release-notes.mdx`: Record post-pull Ollama model discovery
checks.
- [NVIDIA#6482](NVIDIA#6482) ->
`docs/about/release-notes.mdx`: Record Ollama model warm-up after daemon
restart.
- [NVIDIA#6486](NVIDIA#6486) ->
`docs/about/release-notes.mdx`: Publish the opt-in, thread-scoped Deep
Agents auto-approval boundary.
- [NVIDIA#6490](NVIDIA#6490) ->
`docs/about/release-notes.mdx`: Record diagnostics for custom images
missing the managed runtime.
- [NVIDIA#6494](NVIDIA#6494) ->
`docs/inference/model-capability-audit.mdx`,
`docs/about/release-notes.mdx`: Document nonempty tool-call content
preservation and placeholder rejection.
- [NVIDIA#6497](NVIDIA#6497) ->
`docs/get-started/quickstart-langchain-deepagents-code.mdx`,
`docs/about/release-notes.mdx`: Document isolated Deep Agents
route-probe output.
- [NVIDIA#6506](NVIDIA#6506) ->
`docs/get-started/quickstart-langchain-deepagents-code.mdx`,
`docs/about/release-notes.mdx`: Document observability-preserving
managed route probes.
- [NVIDIA#6508](NVIDIA#6508) ->
`docs/about/release-notes.mdx`: Link the new extension taxonomy and
SDK-readiness reference from the release summary.

Release-source verification: GitHub reports all 29 cited source PRs as
merged with base `main`, and every merge commit is an ancestor of
`origin/main` at `17bf9a6a9688b3b1d69cf4b37d3f23110acb055e`. No
source-mapping mismatches were found.

## 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-prep changes; `npm run docs` validates variants, routes, and
Fern content.
- [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 set.
- [ ] 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) — exited
0 with zero errors; Fern reported the existing unauthenticated
redirect-check and light-mode contrast warnings.
- [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: Charan Jagwani <cjagwani@nvidia.com>

---------

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

Labels

area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery bug-fix PR fixes a bug or regression

Projects

None yet

5 participants