fix(sandbox): re-establish gateway pairing after cross-sandbox snapshot restore - #7437
Conversation
…ot restore A destination created by a cross-sandbox restore starts without device identity or pairing tokens, which are never captured into snapshots. Run the onboard warm-up and auto-pair approval on that path so the restored sandbox holds working gateway credentials before handoff, matching the fresh-onboard fallback. Self-restore keeps its live credentials untouched. Signed-off-by: Tinson Lai <tinsonl@nvidia.com>
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughSnapshot restoration now establishes and verifies gateway pairing for newly created destination sandboxes. Cross-sandbox restores run pairing after reconciliation, while self-restores skip it. Pairing and verification failures propagate with retry guidance. ChangesRestored gateway pairing
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant SnapshotRestore
participant PairingHelper
participant ScopeWarmup
participant ScopeApproval
participant GatewayVerification
SnapshotRestore->>PairingHelper: cross-sandbox restore completed
PairingHelper->>ScopeWarmup: warm up scope upgrade
ScopeWarmup-->>PairingHelper: completion
PairingHelper->>ScopeApproval: approve scope pairing
ScopeApproval-->>PairingHelper: completion
PairingHelper->>GatewayVerification: execute authenticated verification
GatewayVerification-->>PairingHelper: success or failure
PairingHelper-->>SnapshotRestore: complete or raise retryable command error
Suggested labels: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
PR Review Advisor — InformationalAdvisor assessment: Informational / medium confidence Model lanes
Nemotron output stays in workflow artifacts and does not change the assessment above. E2E guidanceAdvisory only. E2E / PR Gate selects and runs jobs independently. Recommended E2E: 3 optional E2E recommendations
This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge. |
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
|
🌿 Preview your docs: https://nvidia-preview-pr-7437.docs.buildwithfern.com/nemoclaw |
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/lib/actions/sandbox/restore-gateway-pairing.test.ts`:
- Line 38: Append the final issue-reference suffix "(`#7431`)" to the test titles
at src/lib/actions/sandbox/restore-gateway-pairing.test.ts lines 38, 56, and 66,
and at src/lib/actions/sandbox/snapshot-restore-lifecycle.test.ts line 240,
preserving the existing title text.
In `@src/lib/actions/sandbox/restore-gateway-pairing.ts`:
- Around line 44-68: Move OpenShell resolution and spawnSync execution from
verifyRestoredSandboxGatewayPairing into a dedicated adapter, then have the
action delegate gateway verification through that adapter. In
src/lib/actions/sandbox/restore-gateway-pairing.ts lines 44-68, retain the
action’s orchestration and boolean outcome contract. In
src/lib/actions/sandbox/restore-gateway-pairing.test.ts lines 66-74, mock the
adapter and replace RESTORE_GATEWAY_PAIRING_VERIFY_SCRIPT text assertions with
coverage for successful verification, failed verification, and timeout behavior.
🪄 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: 0c246b91-80a2-48e2-82fc-a4a377fe155b
📒 Files selected for processing (5)
docs/manage-sandboxes/backup-restore.mdxsrc/lib/actions/sandbox/restore-gateway-pairing.test.tssrc/lib/actions/sandbox/restore-gateway-pairing.tssrc/lib/actions/sandbox/snapshot-restore-lifecycle.test.tssrc/lib/actions/sandbox/snapshot.ts
🚧 Files skipped from review as they are similar to previous changes (2)
- docs/manage-sandboxes/backup-restore.mdx
- src/lib/actions/sandbox/snapshot.ts
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/lib/actions/sandbox/snapshot-restore-lifecycle.test.ts (1)
194-295: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd the
#7431issue-reference suffix to the new test titles.This whole suite exists to fix issue
#7431(gateway credentials missing after cross-sandbox restore), but none of the newdescribe/ittitles carry the(#1234)suffix required by the coding guideline.As per coding guidelines,
**/*.test.{js,ts}: "Use behavior-oriented test titles and place local issue references in a final(#1234)suffix."✏️ Suggested title update
-describe("runSandboxSnapshot restore: gateway pairing on a freshly created destination", () => { +describe("runSandboxSnapshot restore: gateway pairing on a freshly created destination (`#7431`)", () => {🤖 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/snapshot-restore-lifecycle.test.ts` around lines 194 - 295, Append the issue-reference suffix "(`#7431`)" to the new describe and it titles in the runSandboxSnapshot restore suite. Keep the existing behavior-oriented wording unchanged and place the suffix at the end of each title, including the self-restore test.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.
Nitpick comments:
In `@src/lib/actions/sandbox/snapshot-restore-lifecycle.test.ts`:
- Around line 194-295: Append the issue-reference suffix "(`#7431`)" to the new
describe and it titles in the runSandboxSnapshot restore suite. Keep the
existing behavior-oriented wording unchanged and place the suffix at the end of
each title, including the self-restore test.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 602bfdcb-de87-482e-bc55-2d4a736cf628
📒 Files selected for processing (2)
src/lib/actions/sandbox/snapshot-restore-lifecycle.test.tssrc/lib/actions/sandbox/snapshot-restore-test-fixture.ts
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
prekshivyas
left a comment
There was a problem hiding this comment.
Approved at exact head af4fc2d after the maintainer gate passed: current-base CI and selected E2E are green, mergeable, DCO/Verified complete, and no unresolved major review findings remain.
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary This PR adds the canonical dated release entry for NemoClaw v0.0.94 before the tag is cut. The entry reconciles all 26 commits since v0.0.93 and links each user-visible change to its owning documentation. ## Changes - Add `docs/changelog/2026-07-24.mdx` with the exact `## v0.0.94` heading, parser-safe SPDX comment, release summary, and detailed bullets. - Record sandbox restore and update behavior, onboarding and inference changes, network policy behavior, security evidence, Hermes build performance, DGX Station guidance, and E2E validation changes. - Preserve `docs/` as the source of truth without changing the AI-agent documentation routing skill. - Use [E2E run 30075443016](https://github.com/NVIDIA/NemoClaw/actions/runs/30075443016) for release QA evidence at exact tested SHA `04e6dfa883071dda9df429c66e73168e1a995cba`. ### Source summary - [#7461](#7461) -> `docs/changelog/2026-07-24.mdx`: Record the ownership-preserving Hermes image layer reduction and hosted timing comparison. - [#7460](#7460) -> `docs/changelog/2026-07-24.mdx`: Record removal of candidate Hermes swap setup from E2E validation. - [#7458](#7458) -> `docs/security/fern-5.80.1-dependency-review.md`, `docs/changelog/2026-07-24.mdx`: Record the reviewed Fern CLI update. - [#7457](#7457) -> `docs/changelog/2026-07-24.mdx`: Record periodic runner-pressure telemetry. - [#7455](#7455) -> `docs/changelog/2026-07-24.mdx`: Record non-blocking absent Fern previews. - [#7450](#7450) -> `docs/changelog/2026-07-24.mdx`: Record stable cancellation handling for live-test child processes. - [#7449](#7449) -> `docs/changelog/2026-07-24.mdx`: Record parallel plugin EXDEV coverage. - [#7448](#7448) -> `docs/changelog/2026-07-24.mdx`: Record isolated long-running E2E lanes. - [#7444](#7444) -> `docs/changelog/2026-07-24.mdx`: Record exact-head Hermes swap validation. - [#7437](#7437) -> `docs/manage-sandboxes/backup-restore.mdx`, `docs/changelog/2026-07-24.mdx`: Record gateway pairing and authenticated verification after cross-sandbox restore. - [#7436](#7436) -> `docs/manage-sandboxes/backup-restore.mdx`, `docs/reference/commands.mdx`, `docs/changelog/2026-07-24.mdx`: Record selected stale-state cleanup and Hermes virtual-environment access repair. - [#7385](#7385) -> `docs/network-policy/customize-network-policy.mdx`, `docs/changelog/2026-07-24.mdx`: Record the read-only agent-variant route check. - [#7371](#7371) -> `docs/changelog/2026-07-24.mdx`: Record host-artifact verification for session exports. - [#7359](#7359) -> `docs/changelog/2026-07-24.mdx`: Record platform validation for managed vLLM model overrides. - [#7356](#7356) -> `docs/changelog/2026-07-24.mdx`: Record token-shaped value redaction for `sandbox doctor --json`. - [#7354](#7354) -> `docs/security/advisory-early-warning.md`, `docs/changelog/2026-07-24.mdx`: Record advisory correlation and retained audit provenance. - [#7352](#7352) -> `docs/network-policy/customize-network-policy.mdx`, `docs/network-policy/integration-policy-examples.mdx`, `docs/reference/commands.mdx`, `docs/changelog/2026-07-24.mdx`: Record preset reapplication and bounded `tls: skip` guidance. - [#7345](#7345) -> `docs/security/openclaw-2026.6.10-dependency-review.md`, `docs/security/openclaw-2026.7.1-dependency-review.md`, `docs/changelog/2026-07-24.mdx`: Record reviewed npm audit exception enforcement. - [#7340](#7340) -> `docs/network-policy/customize-network-policy.mdx`, `docs/changelog/2026-07-24.mdx`: Record the repaired CLI-reference route. - [#7334](#7334) -> `docs/get-started/dgx-station-preparation.mdx`, `docs/changelog/2026-07-24.mdx`: Record the qualified OTA metadata fallback and narrowed override wording. - [#7322](#7322) -> `docs/changelog/2026-07-24.mdx`: Reconcile the gateway source tag added to plugin registration banners. - [#7284](#7284) -> `docs/manage-sandboxes/update-sandboxes.mdx`, `docs/changelog/2026-07-24.mdx`: Record read-only `upgrade-sandboxes --check` behavior and recorded-gateway selection. - [#7277](#7277) -> `docs/changelog/2026-07-24.mdx`: Reconcile deterministic gateway TCP refusal coverage. - [#7234](#7234) -> `docs/reference/troubleshooting.mdx`, `docs/changelog/2026-07-24.mdx`: Record preserved DGX Spark managed vLLM Express intent on resume. - [#7185](#7185) -> `docs/reference/troubleshooting.mdx`, `docs/changelog/2026-07-24.mdx`: Record IPv4 fallback DNS selection and exact resolver probing. - [#6820](#6820) -> `docs/reference/commands.mdx`, `docs/changelog/2026-07-24.mdx`: Record the versioned, redacted `--events=jsonl` onboarding stream. ## 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 - [x] Existing tests cover changed behavior — justification: `npx vitest run test/changelog-docs.test.ts` passed 6/6 tests. - [ ] Tests not applicable — justification: - [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: ## Documentation Writer Review - [x] Documentation writer subagent reviewed the completed changes - Result: `docs-updated` - Evidence: `docs/changelog/2026-07-24.mdx`; the writing rules, documentation style, exact release range, skip terms, published routes, and product scope were reviewed; the changelog test passed 6/6; `npm run docs` passed with route checking OK, zero errors, and two existing warnings. - Agent: Codex Desktop <!-- docs-review-head-sha: 65368f9 --> <!-- docs-review-agents-blob-sha: 9c9b36d --> ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: Not applicable - Station profile/scenario: Not applicable - Result: Not applicable - Supporting evidence: Not applicable. This PR does not change `scripts/prepare-dgx-station-host.sh`. ## Verification - [x] PR description includes a `Signed-off-by:` line 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 — `npx vitest run test/changelog-docs.test.ts` passed 6/6 tests. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: Not applicable to the dated changelog entry. - [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). The build passed with zero errors and two existing Fern 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). Native dated changelog entries use the required parser-safe MDX SPDX comment and no frontmatter. --- Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added the v0.0.94 release changelog. * Documented improvements to sandbox snapshot and restore behavior. * Added updates for gateway selection, policy comparisons, onboarding event output, and DGX recovery workflows. * Documented enhanced diagnostics redaction, npm audit provenance, image assembly performance, and validation stability improvements. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Cross-sandbox snapshot restore could inspect a gateway-global pending-device list and approve a different sandbox's request before verifying the restored clone. After restore, this change restarts and warms the clone, approves at most one bounded pairing or scope-upgrade request that matches the clone's local identity, restarts its gateway, and treats one ordinary authenticated verifier as the sole success condition. ## Related Issue Related to #7431 and #4462. Corrects the restore-pairing lifecycle introduced by #7437. ## Changes - Keep the established `restart → warm-up → approval → restart → authenticated verification` sequence to publish approved state before verification. - Select only one pending CLI/operator request whose public key and derived device ID match the restored clone. - Accept canonical pairing-only requests plus bounded write-scope initial or repair requests, including OpenClaw's pre-convergence `isRepair: false`, `scopes: ["operator.write"]` shape; reject malformed, ambiguous, duplicate, foreign, empty, read-only, noncanonical, or over-scoped requests. - Preserve the canonical OpenClaw approval command, stripped gateway credentials, existing one-request budget, and existing timeouts. - Remove the former two-cycle retry path; verification runs exactly once and is the only success condition. - Classify production and live-test failures with fixed, output-free values. - Route the live pairing probe through the clone's sandbox environment and hermetic inference fixture. - Require trusted PR E2E planning to include `snapshot-commands` when restored-gateway pairing production modules change. - Add focused lifecycle, identity/scope, environment-isolation, redaction, and risk-plan regressions, including invalid clone identity and nonrepair write-only cases. ## Type of Change - [x] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates - [x] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [ ] Tests not applicable — justification: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable — justification: This repairs internal clone pairing selection and restart ordering without changing the documented snapshot restore contract. - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: Independent exact-final-head nine-category review passed with no findings at `9f439dfd418d89be4870c4f3378c57af8a530b3c` against `origin/main` `1bc0283144062b560e7496baa92d3293e4a65089`. It reviewed all 16 changed files and confirmed accepted product scope, clone-only environment/inference routing, exact paired device/public-key binding, bounded canonical scopes, stored `operator.pairing` authorization for the pre-convergence write request, canonical locked publication, fixed output-free classifications, and the unchanged one-approval/one-verifier sequence without retries or longer timeouts. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Documentation Writer Review - [x] Documentation writer subagent reviewed the completed changes - Result: `no-docs-needed` - Evidence: At exact final head `9f439dfd418d89be4870c4f3378c57af8a530b3c`, the writer reviewed the complete 16-file diff. Existing snapshot documentation already defines automatic clone pairing, ordinary authenticated verification, nonzero failure, retained restored state, and `connect` recovery. The OpenClaw `2026.7.1` dependency review already bounds exact CLI/operator pairing/read/write transitions through stored-device authentication and canonical fail-closed approval. This internal repair adds no CLI syntax, flag, configuration, API, schema, policy, or supported workflow, so no docs, changelog, or docs build is required. - Agent: Codex Desktop <!-- docs-review-head-sha: 9f439df --> <!-- docs-review-agents-blob-sha: be20a09 --> ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: - Station profile/scenario: - Result: - Supporting evidence: ## Verification - [x] PR description includes a `Signed-off-by:` line and every published commit appears as `Verified` in GitHub; exact head `9f439dfd418d89be4870c4f3378c57af8a530b3c` has a valid SSH signature and DCO trailer, and GitHub reports `verified: true` with reason `valid`. - [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: At exact final head `9f439dfd418d89be4870c4f3378c57af8a530b3c`, 299/299 targeted tests passed: compiled OpenClaw patch regressions 53/53, clone pairing lifecycle 32/32, snapshot helper 17/17, real pinned OpenClaw dist proof 6/6, and adjacent risk/lifecycle/workflow/dependency/provenance suites 191/191. `npm run typecheck:cli`, `git diff --check`, signed commit hooks, and exact committed `npm run check:diff` all passed. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: not applicable to this focused restore-path repair; affected and exact suites plus `check:diff` passed. - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) - [ ] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) Trusted E2E on exact prior head `2193b9ea83e001bcca6b92cb6467eda7d835f037` (child run `30249871943`, snapshot job `89925344542`) failed `snapshot-commands` with fixed classification `scope-upgrade-pending`; that SHA was not retried. Trusted E2E on exact prior head `d2808095c7da86640b29affe911b0600dc5fdb11` (child run `30259361580`, snapshot job `89955535331`) passed seven selected lanes and failed only `snapshot-commands` with the same fixed classification; that SHA was not retried. Trusted E2E on exact prior head `c45892130795ce1e22143af00046b386bb24ee72` (controller `30263636883`, child `30263933229`, snapshot job `89970220974`) again passed seven selected lanes and failed only `snapshot-commands` at restore-to-clone with fixed classification `command-failure`; its captured verifier layer was `scope-upgrade-pending`. Retry/reconciliation steps were skipped and that SHA will not be retried. Trusted E2E on exact prior head `f2fd8676e156bdd31ca29ec51660a8c9a6d04525` (controller `30269186094`, child `30269513049`, snapshot job `89988454045`) passed every companion selected lane and failed only `snapshot-commands` at the first restore-to-clone phase. Artifact `8654481473` (`sha256:74af24bfafbc6fa1fb1cf7abe1233a4c1b202d5d70f086c6a9afd77bad154906`) recorded fixed outer classification `command-failure` and verifier layer `scope-upgrade-pending`, exit 1 without timeout. Evidence verification passed, every retry step was skipped, and that SHA will not be retried. Fresh ordinary gates and automated review must pass on `9f439dfd418d89be4870c4f3378c57af8a530b3c` before authorizing only its exact trusted coverage. --- Signed-off-by: Carlos Villela <cvillela@nvidia.com> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com> Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> Co-authored-by: Apurv Kumaria <akumaria@nvidia.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Summary
A sandbox created by a cross-sandbox snapshot restore (
snapshot restore --to <new>) started without gateway device credentials, so its firstopenclaw agentrun failed withGatewayCredentialsRequiredError. Device identity and pairing tokens are deliberately never captured into snapshots, and — unlike onboard — the restore path never re-established them before handoff. The restore path now runs the same pairing finalisation onboard runs, so a restored destination holds working gateway credentials and its agent runs immediately.Related Issue
Fixes #7431
Changes
src/lib/actions/sandbox/snapshot.ts: after a successful OpenClaw cross-sandbox restore, invoke gateway pairing establishment for the freshly created destination. Hermes and Deep Agents destinations skip the OpenClaw-only step; self-restore remains untouched.src/lib/actions/sandbox/restore-gateway-pairing.ts: orchestrates the onboard warm-up, auto-pair approval, and strict authenticated verification sequence. Failures propagate so restore exits nonzero with repair guidance.src/lib/adapters/openshell/restore-gateway-pairing.ts(new): owns the OpenShell process boundary for the authenticated verification run, with a 30-second timeout and embedded/fallback transport rejection.\n-src/lib/adapters/openshell/restore-gateway-pairing.test.tsandsrc/lib/actions/sandbox/restore-gateway-pairing.test.ts: cover success, nonzero exit, timeout, missing executable, spawn failure, orchestration order, and propagated failures.src/lib/actions/sandbox/snapshot-restore-lifecycle.test.ts: asserts a cross-sandbox restore establishes and verifies pairing, verification failure returns repair guidance, and a self-restore does not touch credentials.Type of Change
Quality Gates
Documentation Writer Review
docs-updateddocs/manage-sandboxes/backup-restore.mdxdocuments authenticated OpenClaw pairing verification after cross-sandbox restore, retained restored state on verification failure, the nonzero result, and the exactconnectrecovery command.DGX Station Hardware Evidence
Verification
Signed-off-by:line and every commit appears asVerifiedin GitHubpre-commit,commit-msg, andpre-pushhooks passed, ornpm run check:diffpassed when hooks were skipped or unavailablenpm run typecheck:cli,npm run checks, andnpm run check:diffpass.npm testfor broad runtime/test-harness changes;npm run checkfor repo-wide validation/coverage changes — command/result: not applicable; the change is a localised sandbox action fix, not a broad runtime/test-harness or repo-wide validation change.npm run docsbuilds without warnings (doc changes only)Signed-off-by: Tinson Lai tinsonl@nvidia.com
Summary by CodeRabbit