Skip to content

refactor(onboard): resolve create intent before mutation#6742

Merged
cv merged 3 commits into
NVIDIA:mainfrom
HOYALIM:codex/issue-6226-pre-destructive-intent
Jul 13, 2026
Merged

refactor(onboard): resolve create intent before mutation#6742
cv merged 3 commits into
NVIDIA:mainfrom
HOYALIM:codex/issue-6226-pre-destructive-intent

Conversation

@HOYALIM

@HOYALIM HOYALIM commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Summary

  • resolve a complete, serializable, secret-free sandbox create intent in the onboarding FSM before resume/delete or provider topology mutations
  • capture policy, messaging/provider contributions, disabled channels, GPU/resource args, placeholder keys, and extra-provider reconciliation in that intent
  • rebind credential-backed capabilities before mutation and again immediately before effectful materialization
  • retain the existing prepareSandboxCreatePlan and direct create compatibility surfaces while keeping intent process-local

Validation

  • focused CLI suites (91 passed)
  • new boundary/planner tests (17 passed)
  • seven-file integration suite covering messaging, recreate, prepared context, build, and stale-binding mutation prevention
  • npm run test:changed
  • npm run build:cli
  • npm run typecheck:cli
  • npm run check:diff

Closes #6226

Signed-off-by: Ho Lim subhoya@gmail.com

Summary by CodeRabbit

  • New Features
    • Sandbox onboarding now resolves a complete create intent earlier, including messaging capabilities, policy tier selection, GPU/resource create arguments, and extra-provider placeholder keys.
  • Bug Fixes
    • Extra-provider cleanup now uses a safer plan/apply workflow that removes only providers identified as stale.
    • Added pre-materialization validation to ensure messaging token bindings match the resolved intent.
    • Improved handling when policy tier is intentionally unset.
  • Documentation
    • Updated the onboarding lifecycle contract sequencing.
  • Tests
    • Expanded boundary and cleanup coverage to match the new resolved payload and workflow.

Copilot AI review requested due to automatic review settings July 13, 2026 03:01
@copy-pr-bot

copy-pr-bot Bot commented Jul 13, 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.

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai

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

The onboarding flow resolves a complete secret-free sandbox create intent before destructive effects, validates capabilities, materializes the plan, and applies extra-provider cleanup separately. Machine handlers, lifecycle contracts, policy handling, and boundary tests were updated.

Changes

Sandbox create boundary

Layer / File(s) Summary
Intent model and resolver
src/lib/onboard/sandbox-create-intent*.ts, src/lib/onboard/sandbox-create-intent-resolution.ts
Create intents now include provider, resource, placeholder, policy, GPU, and messaging capability data.
Machine intent capture and flow wiring
src/lib/onboard.ts, src/lib/onboard/machine/handlers/sandbox.ts, src/lib/onboard/machine/...test.ts
Sandbox handlers resolve complete intents, record sandboxName, and pass resolved data into creation.
Capability validation and plan materialization
src/lib/onboard/sandbox-create-plan*.ts, src/lib/onboard/sandbox-create-plan-materialization.ts, test/onboard-*.test.ts
Credential bindings and policy/resource inputs are validated and materialized from the resolved intent.
Two-phase provider reconciliation
src/lib/onboard/extra-provider-reconciliation*.ts, src/lib/onboard/sandbox-provider-cleanup.ts
Provider probing returns retained and stale lists, with stale removal applied later.
Lifecycle and boundary validation
src/lib/onboard/lifecycle-contracts.md, test/onboard-fsm-live-slices.test.ts, test/onboard-pre-destructive-intent.test.ts
Lifecycle ordering, deterministic failures, non-mutating resolution, and policy-tier propagation are covered.

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

Possibly related PRs

  • NVIDIA/NemoClaw#2931: Both update sandbox-name recording across onboarding lifecycle steps.
  • NVIDIA/NemoClaw#3742: Both integrate Hermes tool-gateway provider resolution into sandbox onboarding.
  • NVIDIA/NemoClaw#5039: Both connect onboarding sandbox creation with messaging gateway conflict enforcement.

Suggested reviewers: cv, ericksoa

Sequence Diagram(s)

sequenceDiagram
  participant OnboardingMachine
  participant IntentResolver
  participant PlanMaterializer
  participant ProviderRegistry
  participant Sandbox
  OnboardingMachine->>IntentResolver: resolve complete create intent
  IntentResolver-->>OnboardingMachine: return resolved capabilities
  OnboardingMachine->>PlanMaterializer: validate and materialize intent
  OnboardingMachine->>ProviderRegistry: apply stale-provider reconciliation
  PlanMaterializer->>Sandbox: create sandbox
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 11.54% 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 is concise and accurately summarizes the main change: resolving create intent before mutation.
Linked Issues check ✅ Passed The PR moves create-intent resolution before destructive effects, keeps compatibility surfaces, validates bindings, and adds regression coverage.
Out of Scope Changes check ✅ Passed The changes are focused on onboarding intent resolution, reconciliation, tests, and related docs, with no clear unrelated additions.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@github-actions

github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: cloud-onboard, onboard-repair, onboard-resume
Optional E2E: None

Dispatch hint: cloud-onboard,onboard-repair,onboard-resume

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: target/main
Head: HEAD
Confidence: high

Required E2E

  • cloud-onboard: Run the clean-host public installer and hosted full onboarding flow because the central onboarding and sandbox-create orchestration changed.
  • onboard-repair: Validate the live missing-sandbox repair path, including complete create-intent validation before destructive repair and selective stale/live extra-provider reconciliation.
  • onboard-resume: Validate interrupted onboarding resume and sandbox recreation with the refactored state-machine create-intent and materialization boundaries.

Optional E2E

  • None.

New E2E recommendations

  • None.

Dispatch hint

  • Workflow: E2E
  • jobs input: cloud-onboard,onboard-repair,onboard-resume

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
src/lib/onboard/machine/handlers/sandbox-recreate-resume.test.ts (1)

84-90: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Fragile positional-index mock assertion.

createSandboxCall[14] combined with the as unknown[] cast discards type safety and hardcodes the argument position. If a new positional parameter is ever inserted before this in createSandbox, this index silently drifts. Prefer .at(-1) (as used in sandbox-create-intent-boundary.test.ts) to reliably target the trailing options object regardless of positional-argument count.

♻️ Suggested fix
-    const createSandboxCall = calls.createSandbox.mock.calls[0] as unknown[];
-    expect(createSandboxCall[14]).toMatchObject({
+    const createSandboxCall = calls.createSandbox.mock.calls[0];
+    expect(createSandboxCall.at(-1)).toMatchObject({
       extraProviders: [],
       recreate: true,
       resolved: expect.objectContaining({ staleExtraProviders: ["stale-extra-provider"] }),
     });

As per path instructions for **/*.test.{ts,js,mts,mjs,cts,cjs}: "Prefer observable outcomes through the public boundary over source-text, private-shape, or mock-call assertions."

🤖 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/onboard/machine/handlers/sandbox-recreate-resume.test.ts` around
lines 84 - 90, Update the createSandbox mock assertion in the sandbox recreate
resume test to use the trailing call argument via .at(-1), matching the
established pattern in sandbox-create-intent-boundary.test.ts. Remove the
positional index and unknown[] cast while preserving the existing options-object
expectations.

Source: Path instructions

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

Inline comments:
In `@src/lib/onboard.ts`:
- Around line 3759-3761: Make messagingPreflightDeps.gatewayName in runOnboard
resolve GATEWAY_NAME lazily at call time rather than capturing its module-scope
startup value. Update the dependency contract and Slack pre-enable conflict hook
usage as needed to invoke the getter, preserving the current gateway value after
rebuild or resume paths reassign GATEWAY_NAME.

In `@src/lib/onboard/extra-provider-reconciliation.ts`:
- Around line 220-227: Remove the exported reconcileRegisteredExtraProviders
wrapper and its re-export from sandbox-provider-cleanup.ts, updating tests to
call planRegisteredExtraProviders and applyExtraProviderReconciliation directly.
If compatibility requires retaining the wrapper, document its purpose and add a
clear retirement note.

---

Nitpick comments:
In `@src/lib/onboard/machine/handlers/sandbox-recreate-resume.test.ts`:
- Around line 84-90: Update the createSandbox mock assertion in the sandbox
recreate resume test to use the trailing call argument via .at(-1), matching the
established pattern in sandbox-create-intent-boundary.test.ts. Remove the
positional index and unknown[] cast while preserving the existing options-object
expectations.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 4c49cb4e-d13c-412e-8bca-85ad6871ae00

📥 Commits

Reviewing files that changed from the base of the PR and between deed1aa and 762e172.

📒 Files selected for processing (22)
  • src/lib/onboard.ts
  • src/lib/onboard/extra-provider-reconciliation.test.ts
  • src/lib/onboard/extra-provider-reconciliation.ts
  • src/lib/onboard/lifecycle-contracts.md
  • src/lib/onboard/machine/core-flow-phases.test.ts
  • src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts
  • src/lib/onboard/machine/handlers/sandbox-dcode-selection.test.ts
  • src/lib/onboard/machine/handlers/sandbox-recreate-resume.test.ts
  • src/lib/onboard/machine/handlers/sandbox-test-fixtures.ts
  • src/lib/onboard/machine/handlers/sandbox-tool-disclosure.test.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
  • src/lib/onboard/sandbox-create-intent-resolution.ts
  • src/lib/onboard/sandbox-create-intent-types.ts
  • src/lib/onboard/sandbox-create-intent.ts
  • src/lib/onboard/sandbox-create-plan-materialization.ts
  • src/lib/onboard/sandbox-create-plan.test.ts
  • src/lib/onboard/sandbox-create-plan.ts
  • src/lib/onboard/sandbox-provider-cleanup.ts
  • src/lib/onboard/types.ts
  • test/onboard-pre-destructive-intent.test.ts
  • test/onboard-prepared-build-context.test.ts

Comment thread src/lib/onboard.ts Outdated
Comment thread src/lib/onboard/extra-provider-reconciliation.ts
@cv cv added the v0.0.82 Release target label Jul 13, 2026
@HOYALIM
HOYALIM force-pushed the codex/issue-6226-pre-destructive-intent branch from 762e172 to e43be18 Compare July 13, 2026 05:40

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (1)
src/lib/onboard/sandbox-messaging-preflight.test.ts (1)

247-247: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Assert the conflict outcome, not the getter call count.

toHaveBeenCalledOnce() couples the test to the current implementation and can reject valid refactors without changing public behavior. Rely on the existing observable conflict result instead; make the returned gateway affect that result rather than asserting invocation count.

🤖 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/onboard/sandbox-messaging-preflight.test.ts` at line 247, Update the
test around the gateway conflict scenario to assert the existing observable
conflict result instead of deps.gatewayName invocation count. Configure the
returned gateway value from deps.gatewayName so it drives the expected conflict
outcome, and remove the toHaveBeenCalledOnce assertion to keep the test
independent of implementation details.

Source: Path instructions

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

Inline comments:
In `@src/lib/onboard/machine/core-flow-phases.test.ts`:
- Around line 211-238: Update the resolveSandboxCreateIntent mock in
core-flow-phases.test.ts to accept and return staleExtraProviders from its input
instead of always using an empty list. Add a test case with a non-empty
stale-provider list and assert that the machine preserves it through deferred
cleanup.

In `@test/onboard-pre-destructive-intent.test.ts`:
- Around line 103-109: Update the child environment setup in the test that
invokes createSandbox() to remove all inherited DISCORD_* and TELEGRAM_*
variables before spawning the helper, while preserving the existing HOME and
NEMOCLAW_* overrides. Ensure locally configured messaging credentials cannot
influence provider selection or stale-binding validation.
- Around line 100-110: Bound the synchronous child process in the spawnSync
invocation within the onboarding test by adding a per-call timeout below
Vitest’s 60-second limit, such as 55,000 milliseconds, so stalled onboarding
fails fast.

---

Nitpick comments:
In `@src/lib/onboard/sandbox-messaging-preflight.test.ts`:
- Line 247: Update the test around the gateway conflict scenario to assert the
existing observable conflict result instead of deps.gatewayName invocation
count. Configure the returned gateway value from deps.gatewayName so it drives
the expected conflict outcome, and remove the toHaveBeenCalledOnce assertion to
keep the test independent of implementation details.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 55549532-1e3d-4135-9b0a-00fc5d19da48

📥 Commits

Reviewing files that changed from the base of the PR and between 762e172 and e43be18.

📒 Files selected for processing (24)
  • src/lib/onboard.ts
  • src/lib/onboard/extra-provider-reconciliation.test.ts
  • src/lib/onboard/extra-provider-reconciliation.ts
  • src/lib/onboard/lifecycle-contracts.md
  • src/lib/onboard/machine/core-flow-phases.test.ts
  • src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts
  • src/lib/onboard/machine/handlers/sandbox-dcode-selection.test.ts
  • src/lib/onboard/machine/handlers/sandbox-recreate-resume.test.ts
  • src/lib/onboard/machine/handlers/sandbox-test-fixtures.ts
  • src/lib/onboard/machine/handlers/sandbox-tool-disclosure.test.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
  • src/lib/onboard/sandbox-create-intent-resolution.ts
  • src/lib/onboard/sandbox-create-intent-types.ts
  • src/lib/onboard/sandbox-create-intent.ts
  • src/lib/onboard/sandbox-create-plan-materialization.ts
  • src/lib/onboard/sandbox-create-plan.test.ts
  • src/lib/onboard/sandbox-create-plan.ts
  • src/lib/onboard/sandbox-messaging-preflight.test.ts
  • src/lib/onboard/sandbox-messaging-preflight.ts
  • src/lib/onboard/sandbox-provider-cleanup.ts
  • src/lib/onboard/types.ts
  • test/onboard-pre-destructive-intent.test.ts
  • test/onboard-prepared-build-context.test.ts
🚧 Files skipped from review as they are similar to previous changes (20)
  • src/lib/onboard/sandbox-provider-cleanup.ts
  • src/lib/onboard/machine/handlers/sandbox-tool-disclosure.test.ts
  • src/lib/onboard/types.ts
  • src/lib/onboard/extra-provider-reconciliation.test.ts
  • src/lib/onboard/machine/handlers/sandbox-dcode-selection.test.ts
  • src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts
  • test/onboard-prepared-build-context.test.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • src/lib/onboard/sandbox-create-intent-resolution.ts
  • src/lib/onboard/machine/handlers/sandbox-recreate-resume.test.ts
  • src/lib/onboard/sandbox-create-intent.ts
  • src/lib/onboard/lifecycle-contracts.md
  • src/lib/onboard/machine/handlers/sandbox-test-fixtures.ts
  • src/lib/onboard/sandbox-create-intent-types.ts
  • src/lib/onboard/extra-provider-reconciliation.ts
  • src/lib/onboard/sandbox-create-plan-materialization.ts
  • src/lib/onboard/sandbox-create-plan.ts
  • src/lib/onboard.ts
  • src/lib/onboard/sandbox-create-plan.test.ts
  • src/lib/onboard/machine/handlers/sandbox.ts

Comment thread src/lib/onboard/machine/core-flow-phases.test.ts Outdated
Comment thread test/onboard-pre-destructive-intent.test.ts Outdated
Comment thread test/onboard-pre-destructive-intent.test.ts Outdated
@HOYALIM
HOYALIM force-pushed the codex/issue-6226-pre-destructive-intent branch from e43be18 to 01e1e3f Compare July 13, 2026 06:33

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

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

Inline comments:
In `@src/lib/onboard/machine/handlers/sandbox.ts`:
- Around line 641-654: Update the outer CompleteSandboxCreateIntent construction
near the resolved sandbox creation flow so policyTier preserves an explicit null
authoritativePolicyTier, distinguishing it from undefined. Replace the
truthy-based handling with an undefined-only check, while retaining the existing
resolved policy tier fallback for unmanaged configurations.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: f300fe87-3d8b-4789-96ff-caa1f5b52d4a

📥 Commits

Reviewing files that changed from the base of the PR and between e43be18 and 01e1e3f.

📒 Files selected for processing (24)
  • src/lib/onboard.ts
  • src/lib/onboard/extra-provider-reconciliation.test.ts
  • src/lib/onboard/extra-provider-reconciliation.ts
  • src/lib/onboard/lifecycle-contracts.md
  • src/lib/onboard/machine/core-flow-phases.test.ts
  • src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts
  • src/lib/onboard/machine/handlers/sandbox-dcode-selection.test.ts
  • src/lib/onboard/machine/handlers/sandbox-recreate-resume.test.ts
  • src/lib/onboard/machine/handlers/sandbox-test-fixtures.ts
  • src/lib/onboard/machine/handlers/sandbox-tool-disclosure.test.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
  • src/lib/onboard/sandbox-create-intent-resolution.ts
  • src/lib/onboard/sandbox-create-intent-types.ts
  • src/lib/onboard/sandbox-create-intent.ts
  • src/lib/onboard/sandbox-create-plan-materialization.ts
  • src/lib/onboard/sandbox-create-plan.test.ts
  • src/lib/onboard/sandbox-create-plan.ts
  • src/lib/onboard/sandbox-messaging-preflight.test.ts
  • src/lib/onboard/sandbox-messaging-preflight.ts
  • src/lib/onboard/sandbox-provider-cleanup.ts
  • src/lib/onboard/types.ts
  • test/onboard-pre-destructive-intent.test.ts
  • test/onboard-prepared-build-context.test.ts
🚧 Files skipped from review as they are similar to previous changes (19)
  • src/lib/onboard/types.ts
  • src/lib/onboard/sandbox-provider-cleanup.ts
  • src/lib/onboard/extra-provider-reconciliation.test.ts
  • src/lib/onboard/sandbox-messaging-preflight.test.ts
  • src/lib/onboard/machine/handlers/sandbox-tool-disclosure.test.ts
  • test/onboard-prepared-build-context.test.ts
  • src/lib/onboard/sandbox-messaging-preflight.ts
  • src/lib/onboard/machine/handlers/sandbox-dcode-selection.test.ts
  • src/lib/onboard/sandbox-create-intent-resolution.ts
  • src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts
  • src/lib/onboard/machine/handlers/sandbox-test-fixtures.ts
  • src/lib/onboard/extra-provider-reconciliation.ts
  • src/lib/onboard/lifecycle-contracts.md
  • src/lib/onboard/sandbox-create-intent-types.ts
  • src/lib/onboard/sandbox-create-plan.ts
  • src/lib/onboard/sandbox-create-plan-materialization.ts
  • src/lib/onboard/sandbox-create-plan.test.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • src/lib/onboard.ts

Comment thread src/lib/onboard/machine/handlers/sandbox.ts
@HOYALIM
HOYALIM force-pushed the codex/issue-6226-pre-destructive-intent branch from 01e1e3f to dced8eb Compare July 13, 2026 06:46

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts (1)

10-12: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Reset the shared module mock between tests.

detectMessagingChannelsFromEnv is a module-scoped vi.fn; add beforeEach(() => vi.clearAllMocks()) (or equivalent) so call history and future implementation changes cannot leak between cases.

🤖 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/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts`
around lines 10 - 12, Reset the shared detectMessagingChannelsFromEnv mock
before each test by adding a beforeEach hook that clears all mocks. Keep the
existing mock setup unchanged and ensure both call history and mock
implementations are isolated between test cases.

Source: Coding guidelines

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

Inline comments:
In `@src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts`:
- Around line 40-71: Strengthen the test around handleSandboxState so each
captured create intent is validated as complete before cross-variant
comparisons: assert all required intent fields, confirm it is serializable, and
verify it contains no credential-bearing values. Keep the existing equality
checks between fresh and resumed intents after these per-intent assertions.

---

Nitpick comments:
In `@src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts`:
- Around line 10-12: Reset the shared detectMessagingChannelsFromEnv mock before
each test by adding a beforeEach hook that clears all mocks. Keep the existing
mock setup unchanged and ensure both call history and mock implementations are
isolated between test cases.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: d7b6599a-b5d9-42c6-9d68-7ad741e07d7e

📥 Commits

Reviewing files that changed from the base of the PR and between 01e1e3f and dced8eb.

📒 Files selected for processing (24)
  • src/lib/onboard.ts
  • src/lib/onboard/extra-provider-reconciliation.test.ts
  • src/lib/onboard/extra-provider-reconciliation.ts
  • src/lib/onboard/lifecycle-contracts.md
  • src/lib/onboard/machine/core-flow-phases.test.ts
  • src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts
  • src/lib/onboard/machine/handlers/sandbox-dcode-selection.test.ts
  • src/lib/onboard/machine/handlers/sandbox-recreate-resume.test.ts
  • src/lib/onboard/machine/handlers/sandbox-test-fixtures.ts
  • src/lib/onboard/machine/handlers/sandbox-tool-disclosure.test.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
  • src/lib/onboard/sandbox-create-intent-resolution.ts
  • src/lib/onboard/sandbox-create-intent-types.ts
  • src/lib/onboard/sandbox-create-intent.ts
  • src/lib/onboard/sandbox-create-plan-materialization.ts
  • src/lib/onboard/sandbox-create-plan.test.ts
  • src/lib/onboard/sandbox-create-plan.ts
  • src/lib/onboard/sandbox-messaging-preflight.test.ts
  • src/lib/onboard/sandbox-messaging-preflight.ts
  • src/lib/onboard/sandbox-provider-cleanup.ts
  • src/lib/onboard/types.ts
  • test/onboard-pre-destructive-intent.test.ts
  • test/onboard-prepared-build-context.test.ts
🚧 Files skipped from review as they are similar to previous changes (22)
  • src/lib/onboard/sandbox-provider-cleanup.ts
  • src/lib/onboard/machine/handlers/sandbox-dcode-selection.test.ts
  • src/lib/onboard/extra-provider-reconciliation.test.ts
  • src/lib/onboard/machine/handlers/sandbox-recreate-resume.test.ts
  • src/lib/onboard/sandbox-messaging-preflight.ts
  • src/lib/onboard/sandbox-messaging-preflight.test.ts
  • src/lib/onboard/machine/handlers/sandbox-test-fixtures.ts
  • src/lib/onboard/types.ts
  • src/lib/onboard/sandbox-create-intent.ts
  • src/lib/onboard/lifecycle-contracts.md
  • src/lib/onboard/sandbox-create-intent-types.ts
  • src/lib/onboard/machine/handlers/sandbox-tool-disclosure.test.ts
  • src/lib/onboard/machine/core-flow-phases.test.ts
  • src/lib/onboard/sandbox-create-plan.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • test/onboard-prepared-build-context.test.ts
  • src/lib/onboard.ts
  • src/lib/onboard/sandbox-create-intent-resolution.ts
  • src/lib/onboard/sandbox-create-plan-materialization.ts
  • src/lib/onboard/extra-provider-reconciliation.ts
  • src/lib/onboard/sandbox-create-plan.test.ts
  • src/lib/onboard/machine/handlers/sandbox.ts

Comment thread src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts Outdated
Signed-off-by: Ho Lim <subhoya@gmail.com>
@HOYALIM
HOYALIM force-pushed the codex/issue-6226-pre-destructive-intent branch from dced8eb to cc2dd93 Compare July 13, 2026 06:56
@wscurran wscurran added area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow area: providers Inference provider integrations and provider behavior area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery refactor PR restructures code without intended behavior change labels Jul 13, 2026
@wscurran

Copy link
Copy Markdown
Contributor

✨ Thanks for the refactor work, @HOYALIM. Resolving sandbox create intent before mutation in the onboarding FSM should improve consistency and prevent stale-binding issues. Ready for maintainer review.


Related open issues:


Related open issues:

@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested tests passed

Run: 29272396963
Workflow ref: tmp/e2e/pr-6742-cc2dd93d
Requested targets: (default — all supported)
Requested test IDs: cloud-onboard,onboard-repair,onboard-resume
Summary: 3 passed, 0 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result
cloud-onboard ✅ success
onboard-repair ✅ success
onboard-resume ✅ success

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

Requesting one focused correctness fix on exact head cc2dd93d65882531e4608b5ccfabeb58d557ea05.

[P1] Ordinary noninteractive policy selection is suppressed by null/undefined drift. runOnboard passes authoritativePolicyTier: null when authoritative resume is false. This refactor changes the sandbox handler from a truthy spread to !== undefined, so ordinary-path null now survives into resolveSandboxCreatePolicyTier(). That resolver treats every non-undefined value—including null—as authoritative and never reads NEMOCLAW_POLICY_TIER. With NEMOCLAW_POLICY_TIER=balanced, undefined resolves to balanced while null resolves to null; initial policy then omits the balanced/open create-time presets and the sandbox can initially register policyTier: null.

Please omit/pass undefined for non-authoritative onboarding (for example, only preserve opts.policyTier ?? null when authoritativeResumeConfig === true) while retaining explicit null for authoritative rebuild/resume. Add a real machine/runOnboard regression proving ordinary noninteractive balanced/restricted environment tiers reach create intent, materialization, and registration, while authoritative null remains null.

The pre-destructive intent resolution, credential exclusion/rebinding, provider/capability drift checks, and deferred stale-provider cleanup otherwise passed review. Standard CI and exact live cloud-onboard/onboard-repair/onboard-resume are green; the fork also still lacks a canonical bot sticky Advisor verdict.

Signed-off-by: Ho Lim <subhoya@gmail.com>
@HOYALIM

HOYALIM commented Jul 13, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the ordinary-policy-tier regression in a7d616ff6.

  • Ordinary onboarding now leaves authoritativePolicyTier undefined in both the sandbox and final-policy phase assembly, allowing non-interactive NEMOCLAW_POLICY_TIER resolution.
  • Authoritative rebuild/resume still preserves an explicitly absent tier as null.
  • Added a live runOnboard/FSM assembly regression for ordinary balanced/restricted tiers and authoritative null.
  • Extended the real createSandbox product-path regression to prove both balanced and restricted tiers reach create materialization and registry persistence.

Validation:

  • npm run build:cli - passed
  • CLI sandbox handler/create-plan suites - 53/53 passed
  • integration FSM/recreation/pre-destructive-intent suites - 23/23 passed
  • npm run typecheck:cli - passed
  • npm run check:diff - all applicable gates passed

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

@HOYALIM Thanks for the detailed update and validation summary. I'll take a fresh look at the changes, including the a7d616ff6 fix for the ordinary-policy-tier regression and the new regression coverage for authoritativePolicyTier handling.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@cjagwani cjagwani self-assigned this Jul 13, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
test/onboard-fsm-live-slices.test.ts (1)

209-214: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Assert policy-tier behavior at the public sandbox boundary.

Replacing createCoreOnboardFlowPhases only proves a private options object was assembled; the sentinel prevents the sandbox state from consuming it. Exercise the real phase and assert the resulting sandbox/materialized plan instead.

As per path instructions, “Prefer observable outcomes through the public boundary over source-text, private-shape, or mock-call assertions.”

Also applies to: 491-506

🤖 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 `@test/onboard-fsm-live-slices.test.ts` around lines 209 - 214, Update the
policy-tier scenarios in the relevant test block to stop replacing
createCoreOnboardFlowPhases or asserting the private options capture. Run the
real onboarding phase through the public sandbox boundary, then assert the
resulting sandbox state or materialized plan reflects the expected authoritative
policy tier, including the undefined case.

Source: Path instructions

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

Inline comments:
In `@test/onboard-pre-destructive-intent.test.ts`:
- Line 17: Update the test setup around tmpDir in the onboard pre-destructive
intent test to wrap the test body in a try/finally block, and remove the
temporary directory in finally with recursive, forced cleanup via fs.rmSync.
Ensure cleanup runs for both successful and failing test executions.

---

Nitpick comments:
In `@test/onboard-fsm-live-slices.test.ts`:
- Around line 209-214: Update the policy-tier scenarios in the relevant test
block to stop replacing createCoreOnboardFlowPhases or asserting the private
options capture. Run the real onboarding phase through the public sandbox
boundary, then assert the resulting sandbox state or materialized plan reflects
the expected authoritative policy tier, including the undefined case.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 917252fb-b695-44b9-83f6-a8fb2e2c46fa

📥 Commits

Reviewing files that changed from the base of the PR and between dced8eb and a7d616f.

📒 Files selected for processing (26)
  • src/lib/onboard.ts
  • src/lib/onboard/extra-provider-reconciliation.test.ts
  • src/lib/onboard/extra-provider-reconciliation.ts
  • src/lib/onboard/lifecycle-contracts.md
  • src/lib/onboard/machine/core-flow-phases.test.ts
  • src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts
  • src/lib/onboard/machine/handlers/sandbox-dcode-selection.test.ts
  • src/lib/onboard/machine/handlers/sandbox-recreate-resume.test.ts
  • src/lib/onboard/machine/handlers/sandbox-test-fixtures.ts
  • src/lib/onboard/machine/handlers/sandbox-tool-disclosure.test.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
  • src/lib/onboard/sandbox-create-intent-resolution.ts
  • src/lib/onboard/sandbox-create-intent-types.ts
  • src/lib/onboard/sandbox-create-intent.ts
  • src/lib/onboard/sandbox-create-plan-materialization.ts
  • src/lib/onboard/sandbox-create-plan.test.ts
  • src/lib/onboard/sandbox-create-plan.ts
  • src/lib/onboard/sandbox-messaging-preflight.test.ts
  • src/lib/onboard/sandbox-messaging-preflight.ts
  • src/lib/onboard/sandbox-provider-cleanup.ts
  • src/lib/onboard/types.ts
  • test/onboard-fsm-live-slices.test.ts
  • test/onboard-pre-destructive-intent.test.ts
  • test/onboard-prepared-build-context.test.ts
  • test/onboard-sandbox-recreation.test.ts
🚧 Files skipped from review as they are similar to previous changes (22)
  • src/lib/onboard/machine/handlers/sandbox-tool-disclosure.test.ts
  • src/lib/onboard/sandbox-messaging-preflight.ts
  • src/lib/onboard/machine/handlers/sandbox-dcode-selection.test.ts
  • src/lib/onboard/extra-provider-reconciliation.test.ts
  • src/lib/onboard/lifecycle-contracts.md
  • src/lib/onboard/types.ts
  • test/onboard-prepared-build-context.test.ts
  • src/lib/onboard/machine/handlers/sandbox-recreate-resume.test.ts
  • src/lib/onboard/machine/handlers/sandbox-test-fixtures.ts
  • src/lib/onboard/extra-provider-reconciliation.ts
  • src/lib/onboard/sandbox-create-intent.ts
  • src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts
  • src/lib/onboard/sandbox-create-intent-types.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • src/lib/onboard/machine/core-flow-phases.test.ts
  • src/lib/onboard/sandbox-provider-cleanup.ts
  • src/lib/onboard/sandbox-create-plan.ts
  • src/lib/onboard/sandbox-messaging-preflight.test.ts
  • src/lib/onboard.ts
  • src/lib/onboard/sandbox-create-plan.test.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
  • src/lib/onboard/sandbox-create-plan-materialization.ts

Comment thread test/onboard-pre-destructive-intent.test.ts
@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested tests passed

Run: 29281467517
Workflow ref: codex/pr-6742-e2e-a7d616ff
Requested targets: (default — all supported)
Requested test IDs: cloud-onboard,onboard-repair,onboard-resume
Summary: 3 passed, 0 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result
cloud-onboard ✅ success
onboard-repair ✅ success
onboard-resume ✅ 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.

Actionable comments posted: 1

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

Inline comments:
In `@test/onboard-pre-destructive-intent.test.ts`:
- Around line 20-26: Update the test’s createSandbox setup to use an injected
dependency seam or loader-based mock for the runner and registry modules instead
of assigning to exports returned by require(). Ensure the child-process stubs
reliably replace runner.run and registry.registerSandbox, so the pre-intent
failure path reaches and verifies the intended mutation boundary.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: a1b24b42-39ab-4ef3-9fa4-f1094a94691c

📥 Commits

Reviewing files that changed from the base of the PR and between dced8eb and a7d616f.

📒 Files selected for processing (26)
  • src/lib/onboard.ts
  • src/lib/onboard/extra-provider-reconciliation.test.ts
  • src/lib/onboard/extra-provider-reconciliation.ts
  • src/lib/onboard/lifecycle-contracts.md
  • src/lib/onboard/machine/core-flow-phases.test.ts
  • src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts
  • src/lib/onboard/machine/handlers/sandbox-dcode-selection.test.ts
  • src/lib/onboard/machine/handlers/sandbox-recreate-resume.test.ts
  • src/lib/onboard/machine/handlers/sandbox-test-fixtures.ts
  • src/lib/onboard/machine/handlers/sandbox-tool-disclosure.test.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
  • src/lib/onboard/sandbox-create-intent-resolution.ts
  • src/lib/onboard/sandbox-create-intent-types.ts
  • src/lib/onboard/sandbox-create-intent.ts
  • src/lib/onboard/sandbox-create-plan-materialization.ts
  • src/lib/onboard/sandbox-create-plan.test.ts
  • src/lib/onboard/sandbox-create-plan.ts
  • src/lib/onboard/sandbox-messaging-preflight.test.ts
  • src/lib/onboard/sandbox-messaging-preflight.ts
  • src/lib/onboard/sandbox-provider-cleanup.ts
  • src/lib/onboard/types.ts
  • test/onboard-fsm-live-slices.test.ts
  • test/onboard-pre-destructive-intent.test.ts
  • test/onboard-prepared-build-context.test.ts
  • test/onboard-sandbox-recreation.test.ts
🚧 Files skipped from review as they are similar to previous changes (24)
  • src/lib/onboard/types.ts
  • src/lib/onboard/machine/handlers/sandbox-dcode-selection.test.ts
  • test/onboard-prepared-build-context.test.ts
  • src/lib/onboard/machine/handlers/sandbox-recreate-resume.test.ts
  • src/lib/onboard/sandbox-messaging-preflight.ts
  • src/lib/onboard/sandbox-messaging-preflight.test.ts
  • src/lib/onboard/sandbox-provider-cleanup.ts
  • src/lib/onboard/machine/handlers/sandbox-create-intent-boundary.test.ts
  • src/lib/onboard/machine/core-flow-phases.test.ts
  • test/onboard-sandbox-recreation.test.ts
  • src/lib/onboard/machine/handlers/sandbox.test.ts
  • src/lib/onboard/machine/handlers/sandbox-tool-disclosure.test.ts
  • src/lib/onboard/sandbox-create-intent-types.ts
  • src/lib/onboard/extra-provider-reconciliation.test.ts
  • test/onboard-fsm-live-slices.test.ts
  • src/lib/onboard/sandbox-create-plan.ts
  • src/lib/onboard/machine/handlers/sandbox-test-fixtures.ts
  • src/lib/onboard/sandbox-create-intent.ts
  • src/lib/onboard/lifecycle-contracts.md
  • src/lib/onboard/sandbox-create-plan-materialization.ts
  • src/lib/onboard/sandbox-create-intent-resolution.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
  • src/lib/onboard/sandbox-create-plan.test.ts
  • src/lib/onboard.ts

Comment thread test/onboard-pre-destructive-intent.test.ts Outdated
Signed-off-by: Ho Lim <subhoya@gmail.com>
@cv
cv dismissed cjagwani’s stale review July 13, 2026 20:51

Addressed

@cv
cv merged commit 1a74b83 into NVIDIA:main Jul 13, 2026
115 checks passed
cv pushed a commit that referenced this pull request Jul 14, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Release-prep documentation for v0.0.82 now summarizes user-facing
changes merged since v0.0.81.
It also closes stale wording in the stopped-sandbox backup,
snapshot-clone, Ollama selection, and custom-policy authoring guidance.

## Changes

- Add the `v0.0.82` section to `docs/about/release-notes.mdx` with links
to the focused user guides.
- Document that snapshot clones receive a destination-owned dashboard
port before destructive replacement begins.
- Align `backup-all` guidance with eligible stopped Docker-driver
sandboxes that NemoClaw starts temporarily.
- Describe the running and stopped Ollama menu states without claiming
one fixed label.
- Document runtime rejection of catch-all hosts in custom policy files.

### Source summary

- [#6748](#6748) ->
`docs/about/release-notes.mdx`, `docs/manage-sandboxes/lifecycle.mdx`,
and `docs/reference/commands.mdx`: Summarize non-destructive sandbox
`stop` and `start` commands.
- [#6723](#6723) ->
`docs/about/release-notes.mdx`,
`docs/manage-sandboxes/backup-restore.mdx`, and
`docs/reference/commands.mdx`: Record temporary startup and cleanup for
eligible stopped-sandbox backups.
- [#6749](#6749) ->
`docs/about/release-notes.mdx` and
`docs/manage-sandboxes/backup-restore.mdx`: Document destination-owned
dashboard ports for snapshot clones.
- [#6764](#6764) ->
`docs/about/release-notes.mdx`: Summarize installer handling of
route-only onboarding placeholders.
- [#6771](#6771) ->
`docs/about/release-notes.mdx`, `docs/inference/set-up-vllm.mdx`,
`docs/inference/choose-inference-provider.mdx`,
`docs/reference/commands.mdx`, and
`docs/reference/platform-support.mdx`: Summarize managed-vLLM storage
gates, immutable image digests, and the explicit override boundary.
- [#6759](#6759) ->
`docs/about/release-notes.mdx`: Record early, actionable OpenShell
gateway-port conflict diagnostics.
- [#6753](#6753) ->
`docs/about/release-notes.mdx` and `docs/inference/set-up-ollama.mdx`:
Document truthful running and stopped Ollama menu states.
- [#6776](#6776) ->
`docs/about/release-notes.mdx`: Summarize proxy-independent loopback
readiness checks.
- [#6769](#6769) ->
`docs/about/release-notes.mdx`: Record compatible endpoint and agent
guidance when Chat Completions is unavailable.
- [#6730](#6730) ->
`docs/about/release-notes.mdx`: Summarize bounded reuse of an eligible
successful Chat Completions check.
- [#6768](#6768) ->
`docs/about/release-notes.mdx`: Record route-reservation repair during
resumed onboarding.
- [#6742](#6742) ->
`docs/about/release-notes.mdx`: Summarize pre-mutation resolution of
secret-free sandbox create intent.
- [#6721](#6721) ->
`docs/about/release-notes.mdx` and
`docs/get-started/quickstart-langchain-deepagents-code.mdx`: Record
bounded cleanup of completed managed Deep Agents headless sessions.
- [#6731](#6731) ->
`docs/about/release-notes.mdx` and
`docs/network-policy/customize-network-policy.mdx`: Document runtime
rejection of catch-all custom-policy destinations.
- [#6729](#6729) ->
`docs/about/release-notes.mdx` and `docs/get-started/prerequisites.mdx`:
Record the Node.js 22.19 minimum.
- [#6735](#6735) ->
`docs/about/release-notes.mdx` and
`docs/reference/platform-support.mdx`: Summarize the Ubuntu 26.04
userspace contract without claiming pending host or live validation.
- [#6775](#6775) ->
`docs/about/release-notes.mdx` and
`docs/resources/community-contributions.mdx`: Route independent
solutions outside canonical supported-product documentation.
- [#6740](#6740) ->
`docs/about/release-notes.mdx`: Summarize the semantic
dependency-upgrade contributor workflow.
- [#6777](#6777) ->
`docs/about/release-notes.mdx` and `docs/CONTRIBUTING.md`: Summarize the
route-safe documentation-refactor workflow.
- [#6741](#6741) ->
`docs/about/release-notes.mdx` and
`docs/security/openclaw-2026.6.10-dependency-review.md`: Summarize
reviewed npm archive verification and audit enforcement.
- [#6739](#6739) ->
`docs/about/release-notes.mdx` and
`docs/security/openclaw-2026.6.10-dependency-review.md`: Record the
locked offline dependency graph for the managed OpenClaw WeChat runtime.
- [#6737](#6737) ->
`docs/about/release-notes.mdx`: Record removal of the messaging build
plan from final OpenClaw and Hermes image environments.
- [#6733](#6733) ->
`docs/about/release-notes.mdx`: Summarize cached plugin dependency
layers for source and blueprint rebuilds.

### Skipped from docs-skip

- None. No commit or changed path in `v0.0.81..origin/main` matched
`openclaw-sandbox-permissive.yaml` or `config-show`, and the drafted
content contains none of the configured skip terms.

## Type of Change

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

## Quality Gates

- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: This is a documentation-only
release-prep update; behavior is protected by the merged source PRs, and
the documentation build validates the changed routes and agent variants.
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [ ] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [ ] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification:
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Verification

- [x] PR description includes the DCO sign-off declaration and every
commit appears as `Verified` in GitHub
- [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or
`npm run check:diff` passed when hooks were skipped or unavailable
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — tests are not applicable for this
documentation-only change.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result: not run for this
documentation-only change.
- [x] Quality Gates section completed with required justifications or
waivers
- [x] No secrets, API keys, or credentials committed
- [ ] `npm run docs` builds without warnings (doc changes only) — 0
errors; two pre-existing Fern warnings remain.
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [ ] New doc pages include SPDX header and frontmatter (new pages only)
— no new pages.

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


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

## Summary by CodeRabbit

* **Documentation**
* Updated release notes with improvements to sandbox recovery,
onboarding, session management, policy validation, storage checks, and
system requirements.
  * Clarified Ollama setup instructions and status labels.
* Documented safer snapshot restoration, including dedicated ports and
protection against destructive failures.
* Expanded `backup-all` coverage to include eligible stopped sandboxes.
* Added guidance rejecting broad or catch-all network destinations in
custom policies.

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

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

Labels

area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow area: providers Inference provider integrations and provider behavior area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery refactor PR restructures code without intended behavior change v0.0.82 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor(onboard): capture sandbox create intent before destructive effects

6 participants