Skip to content

fix(sandbox): propagate no-gpu intent into rebuild recreate#4399

Merged
cv merged 9 commits into
mainfrom
fix/3985-rebuild-cdi-preflight-no-gpu
May 29, 2026
Merged

fix(sandbox): propagate no-gpu intent into rebuild recreate#4399
cv merged 9 commits into
mainfrom
fix/3985-rebuild-cdi-preflight-no-gpu

Conversation

@laitingsheng

@laitingsheng laitingsheng commented May 28, 2026

Copy link
Copy Markdown
Contributor

Summary

nemoclaw <name> rebuild --yes on a sandbox onboarded with an explicit --no-gpu (recorded as sandboxGpuMode: "0") now propagates that recorded intent into the inner onboard --resume so the Docker CDI GPU preflight is skipped on hosts without an NVIDIA GPU (e.g. Snapdragon ARM WSL2). Without this, rebuild deletes the old sandbox, then the recreate's preflight fails on CDI and leaves the user with only a rebuild-backups/ archive and a stub registry entry. Auto-mode sandboxes (sandboxGpuMode: "auto") remain auto across rebuild, including the CPU-fallback case where sandboxGpuEnabled ends up false because the host has no NVIDIA GPU.

Related Issue

Fixes #3985.

Changes

  • New module src/lib/actions/sandbox/rebuild-gpu-opt-out.ts. Exports rebuildShouldOptOutGpu(sb): the source of truth is sandboxGpuMode (routed through normalizeSandboxGpuMode so "AUTO" / "off" / "false" map consistently). "0" → opt out, "1" / "auto" → keep current behaviour. Legacy entries without sandboxGpuMode fall back to gpuEnabled === false only when no sandboxGpuEnabled: true counter-signal is set, so a modern auto-mode CPU-fallback record (sandboxGpuMode: "auto", sandboxGpuEnabled: false) is not silently converted into a permanent explicit opt-out on rebuild. Also exports buildRebuildRecreateOnboardOpts({ sb, rebuildAgent, storedFromDockerfile, autoYes }), which returns the options object passed to the inner onboard() and conditionally spreads { noGpu: true } only when rebuildShouldOptOutGpu(sb) is true.
  • src/lib/actions/sandbox/rebuild.ts replaces the inline option literal with a call to buildRebuildRecreateOnboardOpts(...) so the wiring is testable from the helper module without driving the full rebuild flow.
  • src/lib/actions/sandbox/rebuild-gpu-opt-out.test.ts covers both helpers. For rebuildShouldOptOutGpu: null/undefined entry, sandboxGpuMode: "0" (with and without sandboxGpuEnabled), sandboxGpuMode: "auto" (CPU-fallback sandboxGpuEnabled: false returns false, matching the established getResumeSandboxGpuOverrides semantic), sandboxGpuMode: "1", the legacy gpuEnabled: false fallback when no sandboxGpuMode is recorded, the counter-signal case where sandboxGpuEnabled: true overrides legacy gpuEnabled: false, no-intent ({} and gpuEnabled: true), unrecognised sandboxGpuMode values that are NOT routed through the legacy gpuEnabled fallback (corrupted state cannot flip a sandbox into a permanent opt-out), empty-string sandboxGpuMode treated as no recorded mode and so still falling back to legacy gpuEnabled: false, and case-insensitive aliases ("AUTO", "off", "false", "TRUE"). For buildRebuildRecreateOnboardOpts: noGpu: true is forwarded for sandboxGpuMode: "0" and legacy gpuEnabled: false; omitted for sandboxGpuMode: "auto" / "1" and for the no-sandbox-entry case; agent / storedFromDockerfile / autoYes are preserved regardless of GPU opt-out.

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)

Verification

  • npx prek run --all-files passes
  • npm test passes
  • Tests added or updated for new or changed behavior
  • No secrets, API keys, or credentials committed
  • Docs updated for user-facing behavior changes
  • 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: Tinson Lai tinsonl@nvidia.com

Summary by CodeRabbit

  • New Features

    • Rebuild now preserves a sandbox's GPU opt-out intent so resumed onboarding skips GPU preflight on non‑NVIDIA hosts when appropriate, while preserving other onboarding options.
  • Tests

    • Added comprehensive tests covering explicit modes, legacy metadata precedence, malformed/empty values, normalization, and generated recreate/resume options.
  • Documentation

    • Documented that recorded sandbox GPU mode is preserved across rebuilds and affects onboard resume behavior.

Review Change Stack

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 0284cb96-30ab-4750-b257-ee61d9a8ed7f

📥 Commits

Reviewing files that changed from the base of the PR and between 6b0301b and 12ae57c.

📒 Files selected for processing (1)
  • docs/reference/commands.mdx
✅ Files skipped from review due to trivial changes (1)
  • docs/reference/commands.mdx

📝 Walkthrough

Walkthrough

Adds exported rebuildShouldOptOutGpu and buildRebuildRecreateOnboardOpts, tests for explicit modes, aliases, and legacy fallbacks, and uses the builder in rebuild to pass a conditional noGpu into onboard when resuming recreate.

Changes

GPU Opt-Out Detection for Sandbox Rebuild

Layer / File(s) Summary
Opt-out helper, types, and builder
src/lib/actions/sandbox/rebuild-gpu-opt-out.ts
Adds RebuildGpuOptOutEntry, rebuildShouldOptOutGpu (normalizes sandboxGpuMode, applies precedence across sandboxGpuMode/sandboxGpuEnabled/gpuEnabled), and buildRebuildRecreateOnboardOpts which builds recreate options and conditionally sets noGpu: true.
Tests for opt-out logic and option mapping
src/lib/actions/sandbox/rebuild-gpu-opt-out.test.ts
Vitest coverage for rebuildShouldOptOutGpu (null/undefined, empty metadata, `"0"
Rebuild flow integration
src/lib/actions/sandbox/rebuild.ts
Imports buildRebuildRecreateOnboardOpts(...) and replaces the inline recreate options with the builder result, then calls await onboard(recreateOpts) to preserve prior no-GPU intent during resume.
Docs note
docs/reference/commands.mdx
Documents that recorded sandbox GPU mode is preserved across rebuilds so resumed onboard --resume can skip GPU preflight when appropriate.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested labels

Sandbox, NemoClaw CLI, Platform: Windows/WSL

Suggested reviewers

  • ericksoa
  • cv

Poem

🐰 I sniffed the flags beneath the log,
old modes and aliases in a fog.
A gentle hop, the intent I tote—
carry no-GPU on the rebuild boat.
Resumes now sail without a clog.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: propagating no-gpu intent into rebuild recreate to respect recorded GPU settings during sandbox rebuild.
Linked Issues check ✅ Passed The PR implements the core requirement from #3985: respecting recorded GPU opt-out (sandboxGpuMode:"0" or legacy gpuEnabled:false) by forwarding no-gpu intent to inner onboard--resume, preventing CDI preflight failure on hosts without NVIDIA GPU.
Out of Scope Changes check ✅ Passed All changes are tightly scoped to implementing the GPU opt-out propagation: new rebuild-gpu-opt-out module, wiring in rebuild.ts, comprehensive tests, and documentation update for the rebuild command.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/3985-rebuild-cdi-preflight-no-gpu

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint skipped: no ESLint configuration detected in root package.json. To enable, add eslint to devDependencies.


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

@github-actions

github-actions Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: rebuild-openclaw-e2e, rebuild-hermes-e2e
Optional E2E: upgrade-stale-sandbox-e2e, docs-validation-e2e

Dispatch hint: rebuild-openclaw-e2e,rebuild-hermes-e2e

Auto-dispatched E2E: rebuild-openclaw-e2e, rebuild-hermes-e2e via nightly-e2e.yaml at 12ae57c7b9ccf86f77e48ac3eda094a8f16fa33anightly run

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • rebuild-openclaw-e2e (high): Directly exercises nemoclaw <name> rebuild --yes --verbose for OpenClaw, including the same registry-driven rebuild path changed here. The existing script registers an old sandbox with legacy gpuEnabled: false, so it is the closest current E2E for verifying CPU/opt-out rebuild does not fail the inner onboard GPU preflight and still restores state/policies.
  • rebuild-hermes-e2e (high): The changed recreate option builder is agent-agnostic and still forwards agent, fromDockerfile, and autoYes into onboard. Hermes rebuild uses the same rebuildSandbox integration path, so it should run to catch regressions in non-OpenClaw rebuild recreation.

Optional E2E

  • upgrade-stale-sandbox-e2e (high): upgrade-sandboxes reuses the rebuild backup/recreate/restore flow, so this is useful adjacent confidence that bulk/stale upgrade still carries the new recreate options safely, but it is less direct than the explicit rebuild jobs.
  • docs-validation-e2e (low): The command reference changed; docs validation can catch generated/help-reference drift or broken doc checks. It is not merge-blocking for the runtime GPU-mode rebuild behavior.

New E2E recommendations

  • sandbox lifecycle / GPU opt-out persistence (high): Existing rebuild E2Es incidentally cover legacy gpuEnabled:false, but there does not appear to be a dedicated scenario asserting that a sandbox with persisted sandboxGpuMode:"0" is rebuilt with noGpu:true, skips Docker CDI GPU preflight on CPU-only hosts, and remains recorded as opted out after recreate. Add explicit coverage for both modern sandboxGpuMode:"0" and legacy gpuEnabled:false, plus a negative assertion that sandboxGpuMode:"auto" remains auto.
    • Suggested test: Add a scenario-based E2E under test/e2e-scenario that onboards or registers an OpenClaw sandbox with explicit GPU opt-out, runs nemoclaw <name> rebuild --yes, and asserts rebuild succeeds on ubuntu-latest without CDI GPU preflight and preserves GPU mode metadata.

Dispatch hint

  • Workflow: nightly-e2e.yaml
  • jobs input: rebuild-openclaw-e2e,rebuild-hermes-e2e

@github-actions

github-actions Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

E2E Scenario Advisor Recommendation

Required scenario E2E: None
Optional scenario E2E: None

Workflow run

Full scenario advisor summary

E2E Scenario Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required scenario E2E

  • None. No scenario workflow, scenario metadata, scenario runtime, or validation-suite files changed.

Optional scenario E2E

  • None.

Relevant changed files

  • None.

@github-actions

github-actions Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor

Findings: 0 needs attention, 3 worth checking, 0 nice ideas
Since last review: 1 prior item resolved, 2 still apply, 0 new items found

Review findings

🛠️ Needs attention

  • None.

🔎 Worth checking

  • Source-of-truth review needed: src/lib/actions/sandbox/rebuild-gpu-opt-out.ts legacy gpuEnabled fallback: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: Comment at src/lib/actions/sandbox/rebuild-gpu-opt-out.ts:12-16 explains the source of truth and malformed-mode handling, and tests at src/lib/actions/sandbox/rebuild-gpu-opt-out.test.ts cover fallback behavior, but no permanence/removal condition is documented.
  • Add rebuildSandbox-to-onboard contract coverage for noGpu propagation (src/lib/actions/sandbox/rebuild.ts:687): The new unit tests cover the extracted decision helper and option object construction, but they do not exercise the actual destructive rebuild path that reads the registry entry, removes the old sandbox, and calls the dynamically required inner onboard flow. The linked bug occurs at that caller/callee boundary, so a future refactor could stop passing the helper output into onboard while the helper tests still pass.
    • Recommendation: Add a targeted rebuildSandbox contract test that stubs onboard and asserts entries with sandboxGpuMode:"0" and legacy gpuEnabled:false call onboard with noGpu:true, while sandboxGpuMode:"auto" with sandboxGpuEnabled:false and sandboxGpuMode:"1" omit noGpu. Keep host/no-NVIDIA/CDI validation as separate runtime validation.
    • Evidence: Production wiring now builds const recreateOpts = buildRebuildRecreateOnboardOpts({ sb, rebuildAgent, storedFromDockerfile, autoYes: skipConfirm || rebuildConfirmed }) and calls await onboard(recreateOpts) in src/lib/actions/sandbox/rebuild.ts. Current tests in src/lib/actions/sandbox/rebuild-gpu-opt-out.test.ts exercise rebuildShouldOptOutGpu and buildRebuildRecreateOnboardOpts, but not rebuildSandbox's actual onboard call.
  • Document whether the legacy gpuEnabled fallback is permanent compatibility or removable migration debt (src/lib/actions/sandbox/rebuild-gpu-opt-out.ts:12): The compatibility path for older registry entries without sandboxGpuMode is justified by existing persisted user state, and the comment now explains the modern source of truth plus malformed-mode handling. It still does not state whether consulting legacy gpuEnabled is permanent compatibility for installed sandboxes or the condition that would make it safe to remove.
    • Recommendation: Add a short source-of-truth note documenting either that the fallback is permanent compatibility for legacy installed registries, or the migration/removal condition that would let future maintainers delete it safely.
    • Evidence: src/lib/actions/sandbox/rebuild-gpu-opt-out.ts says the legacy gpuEnabled fallback only runs for older entries with no recorded mode field, and tests assert the fallback in src/lib/actions/sandbox/rebuild-gpu-opt-out.test.ts. No code comment states a removal condition or permanence policy.

🌱 Nice ideas

  • None.
Since last review details

Current findings:

  • Source-of-truth review needed: src/lib/actions/sandbox/rebuild-gpu-opt-out.ts legacy gpuEnabled fallback: The advisor marked localized patch analysis as needs_followup.
    • Recommendation: Identify the invalid state, source boundary, source-fix constraint, regression test, and removal condition before merging the localized behavior.
    • Evidence: Comment at src/lib/actions/sandbox/rebuild-gpu-opt-out.ts:12-16 explains the source of truth and malformed-mode handling, and tests at src/lib/actions/sandbox/rebuild-gpu-opt-out.test.ts cover fallback behavior, but no permanence/removal condition is documented.
  • Add rebuildSandbox-to-onboard contract coverage for noGpu propagation (src/lib/actions/sandbox/rebuild.ts:687): The new unit tests cover the extracted decision helper and option object construction, but they do not exercise the actual destructive rebuild path that reads the registry entry, removes the old sandbox, and calls the dynamically required inner onboard flow. The linked bug occurs at that caller/callee boundary, so a future refactor could stop passing the helper output into onboard while the helper tests still pass.
    • Recommendation: Add a targeted rebuildSandbox contract test that stubs onboard and asserts entries with sandboxGpuMode:"0" and legacy gpuEnabled:false call onboard with noGpu:true, while sandboxGpuMode:"auto" with sandboxGpuEnabled:false and sandboxGpuMode:"1" omit noGpu. Keep host/no-NVIDIA/CDI validation as separate runtime validation.
    • Evidence: Production wiring now builds const recreateOpts = buildRebuildRecreateOnboardOpts({ sb, rebuildAgent, storedFromDockerfile, autoYes: skipConfirm || rebuildConfirmed }) and calls await onboard(recreateOpts) in src/lib/actions/sandbox/rebuild.ts. Current tests in src/lib/actions/sandbox/rebuild-gpu-opt-out.test.ts exercise rebuildShouldOptOutGpu and buildRebuildRecreateOnboardOpts, but not rebuildSandbox's actual onboard call.
  • Document whether the legacy gpuEnabled fallback is permanent compatibility or removable migration debt (src/lib/actions/sandbox/rebuild-gpu-opt-out.ts:12): The compatibility path for older registry entries without sandboxGpuMode is justified by existing persisted user state, and the comment now explains the modern source of truth plus malformed-mode handling. It still does not state whether consulting legacy gpuEnabled is permanent compatibility for installed sandboxes or the condition that would make it safe to remove.
    • Recommendation: Add a short source-of-truth note documenting either that the fallback is permanent compatibility for legacy installed registries, or the migration/removal condition that would let future maintainers delete it safely.
    • Evidence: src/lib/actions/sandbox/rebuild-gpu-opt-out.ts says the legacy gpuEnabled fallback only runs for older entries with no recorded mode field, and tests assert the fallback in src/lib/actions/sandbox/rebuild-gpu-opt-out.test.ts. No code comment states a removal condition or permanence policy.

Workflow run details

This is an automated advisory review. A human maintainer must make the final merge decision.

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26554752730
Target ref: 8f3b181c3e6085c74a7b36b5440e02fca31d989c
Workflow ref: main
Requested jobs: rebuild-openclaw-e2e,upgrade-stale-sandbox-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
rebuild-openclaw-e2e ✅ success
upgrade-stale-sandbox-e2e ✅ success

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

65-67: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Correct the JSDoc comment.

The comment describes "Emit timestamped rebuild diagnostics" but the function actually returns a boolean indicating whether the sandbox rebuild should opt out of GPU based on registry metadata.

📝 Proposed fix
 /**
- * Emit timestamped rebuild diagnostics when verbose rebuild logging is enabled.
+ * Decide whether a sandbox rebuild should opt out of GPU based on its registry metadata.
+ *
+ * Returns `true` when the sandbox was created with explicit GPU opt-out (`sandboxGpuMode === "0"`),
+ * or when legacy entries have `gpuEnabled === false` without a counter-signal from `sandboxGpuEnabled`.
  */
 export function rebuildShouldOptOutGpu(
🤖 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 65 - 67, Update the JSDoc
above the function in this file that returns a boolean for opting out of GPU
during sandbox rebuild to accurately describe its behavior: state that the
function reads registry metadata and returns true when the sandbox rebuild
should opt out of GPU (false otherwise), document any parameters it inspects and
the boolean return value, and remove the incorrect "Emit timestamped rebuild
diagnostics" wording; ensure the summary, `@returns`, and any `@param` tags reflect
the registry-check semantics.
🤖 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 65-67: Update the JSDoc above the function in this file that
returns a boolean for opting out of GPU during sandbox rebuild to accurately
describe its behavior: state that the function reads registry metadata and
returns true when the sandbox rebuild should opt out of GPU (false otherwise),
document any parameters it inspects and the boolean return value, and remove the
incorrect "Emit timestamped rebuild diagnostics" wording; ensure the summary,
`@returns`, and any `@param` tags reflect the registry-check semantics.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: d7b09208-3040-4408-98fa-9f5ab1ebb43a

📥 Commits

Reviewing files that changed from the base of the PR and between 8f3b181 and 38d107d.

📒 Files selected for processing (2)
  • src/lib/actions/sandbox/rebuild-gpu-opt-out.test.ts
  • src/lib/actions/sandbox/rebuild.ts

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26555209513
Target ref: 38d107d1143828945e133449acd05d3f7221deb4
Workflow ref: main
Requested jobs: rebuild-openclaw-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
rebuild-openclaw-e2e ✅ success

@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26555653066
Target ref: 7de2f25ba5fe328b935d8e999144d6b0f1db627d
Workflow ref: main
Requested jobs: rebuild-openclaw-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
rebuild-openclaw-e2e ✅ success

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26556801195
Target ref: a60ed917a4a3080ff65fe0d25b6a01cdf6b7f5d7
Workflow ref: main
Requested jobs: rebuild-openclaw-e2e
Summary: 1 passed, 0 failed, 0 skipped

Job Result
rebuild-openclaw-e2e ✅ success

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26557508443
Target ref: f75c68b058928f6ed3fdafad5979d711247d7dec
Workflow ref: main
Requested jobs: rebuild-openclaw-e2e,rebuild-hermes-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
rebuild-hermes-e2e ✅ success
rebuild-openclaw-e2e ✅ success

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26559049011
Target ref: 15ef4e136ce7354f4dc716067f03691a66f2af33
Workflow ref: main
Requested jobs: rebuild-openclaw-e2e,rebuild-hermes-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
rebuild-hermes-e2e ✅ success
rebuild-openclaw-e2e ✅ success

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

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

🧹 Nitpick comments (1)
docs/reference/commands.mdx (1)

789-789: ⚡ Quick win

Replace the clause colon with a period (or split into two sentences).

The colon in this sentence is used as general punctuation between clauses, not to introduce a list.

As per coding guidelines, “Colons should only introduce a list. Flag colons used as general punctuation between clauses.”

🤖 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 `@docs/reference/commands.mdx` at line 789, The sentence beginning "The
recorded sandbox GPU mode is preserved across rebuild:" uses a colon
incorrectly; edit the sentence to replace that colon with a period (or otherwise
split into two sentences) so it no longer uses a colon as general
punctuation—ensure the rest of the text (including references to sandboxGpuMode:
"0", gpuEnabled: false, and the onboard --resume mention) remains unchanged and
grammatically connected.
🤖 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.

Nitpick comments:
In `@docs/reference/commands.mdx`:
- Line 789: The sentence beginning "The recorded sandbox GPU mode is preserved
across rebuild:" uses a colon incorrectly; edit the sentence to replace that
colon with a period (or otherwise split into two sentences) so it no longer uses
a colon as general punctuation—ensure the rest of the text (including references
to sandboxGpuMode: "0", gpuEnabled: false, and the onboard --resume mention)
remains unchanged and grammatically connected.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: a35459c5-046d-4179-9e69-081578e67f16

📥 Commits

Reviewing files that changed from the base of the PR and between 15ef4e1 and 6b0301b.

📒 Files selected for processing (1)
  • docs/reference/commands.mdx

@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26559810854
Target ref: 6b0301b4de349021689c864f80ef11330ab7117b
Workflow ref: main
Requested jobs: rebuild-openclaw-e2e,rebuild-hermes-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
rebuild-hermes-e2e ✅ success
rebuild-openclaw-e2e ✅ success

Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
@github-actions

Copy link
Copy Markdown
Contributor

Selective E2E Results — ✅ All requested jobs passed

Run: 26560526659
Target ref: 12ae57c7b9ccf86f77e48ac3eda094a8f16fa33a
Workflow ref: main
Requested jobs: rebuild-openclaw-e2e,rebuild-hermes-e2e
Summary: 2 passed, 0 failed, 0 skipped

Job Result
rebuild-hermes-e2e ✅ success
rebuild-openclaw-e2e ✅ success

@jyaunches jyaunches added R2 v0.0.56 Release target and removed v0.0.55 labels May 29, 2026
@cv cv merged commit b0e6c0f into main May 29, 2026
34 of 35 checks passed
@cv cv deleted the fix/3985-rebuild-cdi-preflight-no-gpu branch May 29, 2026 21:40
miyoungc added a commit that referenced this pull request Jun 1, 2026
## Summary

- Adds the v0.0.56 release notes section with links to the deeper docs
pages for installer, status, inference, messaging, policy, and lifecycle
changes.
- Updates source docs for the remaining release-prep gaps around `uv` in
the PyPI preset, compact WhatsApp pairing guidance, and `nemoclaw
inference set` command boundaries.
- Refreshes generated `nemoclaw-user-*` skills and removes skipped
experimental command terms from generated skill surfaces.

## Source summary

- #4613 -> `docs/manage-sandboxes/lifecycle.mdx`,
`docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Documents
that public installs and `nemoclaw update` follow the maintained `lkg`
tag by default.
- #4419 -> `docs/about/release-notes.mdx`: Notes that non-interactive
Linux installs can reactivate Docker group membership and continue in
one installer run when `sg docker` is available.
- #4550 -> `docs/reference/commands.mdx`,
`docs/about/release-notes.mdx`: Captures live sandbox agent-version
probing for status, connect, and upgrade checks.
- #4609 -> `docs/inference/use-local-inference.mdx`,
`docs/about/release-notes.mdx`: Captures the GPU Docker-driver
host-network local-inference reachability gate.
- #4607 -> `docs/manage-sandboxes/messaging-channels.mdx`,
`docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Documents
compact WhatsApp QR pairing guidance and gateway/session diagnostics.
- #4582 -> `docs/manage-sandboxes/messaging-channels.mdx`,
`docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Reflects
Slack credential validation before enabling the channel.
- #4554 -> `docs/manage-sandboxes/messaging-channels.mdx`,
`docs/reference/troubleshooting.mdx`, `docs/about/release-notes.mdx`:
Keeps Telegram allowlist alias guidance in the generated user skills and
release notes.
- #4563 -> `docs/reference/commands.mdx`,
`docs/about/release-notes.mdx`: Includes the new `nemoclaw <name> skill
remove <skill>` command in command docs and release notes.
- #4566 -> `docs/reference/commands.mdx`,
`docs/about/release-notes.mdx`: Documents the `nemoclaw inference set`
redirect boundary when `--provider` or `--model` is missing.
- #4323 -> `docs/reference/commands.mdx`,
`docs/about/release-notes.mdx`: Captures per-sandbox status JSON
support.
- #4506 -> `docs/reference/commands.mdx`,
`docs/about/release-notes.mdx`: Captures debug command sandbox-name
validation and safer tarball writing.
- #4569 -> `docs/network-policy/integration-policy-examples.mdx`,
`docs/about/release-notes.mdx`: Documents that the `pypi` preset allows
`/usr/local/bin/uv`.
- #4579 -> `docs/network-policy/integration-policy-examples.mdx`,
`docs/about/release-notes.mdx`: Captures observable Jira preset
validation guidance.
- #4229 -> `docs/manage-sandboxes/lifecycle.mdx`,
`docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Documents
user-data preservation defaults for uninstall.
- #4399 -> `docs/reference/commands.mdx`,
`docs/about/release-notes.mdx`: Captures CPU-only sandbox intent
preservation across rebuilds.
- #4058 -> `docs/reference/commands.mdx`,
`docs/about/release-notes.mdx`: Captures safer snapshot restore behavior
around existing destinations.
- #4155 and #4460 -> skipped by `docs/.docs-skip`: Removed skipped
experimental command terms from source docs and generated skill evals
instead of documenting those features.

## Verification

- `python3 scripts/docs-to-skills.py docs/ .agents/skills/ --prefix
nemoclaw-user --doc-platform fern-mdx`
- `npm run docs` (passes; Fern reports the pre-existing light-mode
accent contrast warning)
- `rg "permissive mode|shields down|shields up|shields status|config
rotate-token|rotate-token" .agents/skills` (no matches)
- `npm run build:cli` (run to refresh local CLI artifacts for the
pre-push TypeScript hook)
- Commit hooks passed, including `NEMOCLAW_* env-var documentation
gate`, `Verify docs-to-skills output`, `markdownlint-cli2`, `gitleaks`,
and `Test (skills YAML)`.

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

* **Documentation**
* Expanded Model Router setup with YAML examples, flow diagrams, and
credential handling; strengthened agent-config immutability and
integrity guidance; messaging channels updated (Telegram aliases,
WhatsApp pairing/diagnostics); CLI docs revised (GPU detection,
inference set behavior, uninstall/rebuild preservation); overview
rebranded to NemoClaw and added v0.0.56 release notes.

* **New Features**
* Added `nemoclaw <name> channels status` (messaging diagnostics, JSON);
added `nemoclaw <name> skill remove`; Hermes no longer marked
experimental; DGX Spark quickstart sandbox-name note.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@wscurran wscurran added bug-fix PR fixes a bug or regression and removed fix labels Jun 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug-fix PR fixes a bug or regression v0.0.56 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[WSL2][Sandbox] nemoclaw rebuild destroys --no-gpu sandbox without recreating when host has no NVIDIA GPU (CDI preflight)

4 participants