Skip to content

fix(sandbox): restore startup before readiness - #8146

Merged
senthilr-nv merged 22 commits into
mainfrom
codex/fix-sandbox-start-runtime-state
Aug 4, 2026
Merged

fix(sandbox): restore startup before readiness#8146
senthilr-nv merged 22 commits into
mainfrom
codex/fix-sandbox-start-runtime-state

Conversation

@senthilr-nv

@senthilr-nv senthilr-nv commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator

Summary

Starting a stopped Shields-protected sandbox could leave the Docker container running while OpenShell remained outside Ready. NemoClaw waited for image-level Docker health before it restored startup state, and non-root OpenClaw startup could not inspect optional credential paths once the state tree was sealed. This change hands a running container to trusted startup recovery, restores the narrow traversal permission needed for an empty credentials directory, and then verifies gateway and host-forward readiness.

Related Issue

Fixes #8112

Changes

  • Add an internal runtime-running recovery boundary for the explicit Docker lifecycle start consumer. Other recovery callers retain the stricter Docker-health boundary.
  • Restore locked startup access before process recovery and final gateway verification, using the existing Shields mutation lock and a descriptor-safe state guard.
  • Give only an empty sealed credentials directory root:sandbox 0710; keep it non-listable and non-writable, and restore root:root 0700 when entries exist.
  • Preserve sealed gateway-token and auth-profile state during non-root startup, failing closed when required state is missing or unsafe.
  • Add CLI, shell, state-guard, documentation, and live E2E regression coverage for OpenClaw and Hermes with Shields enabled and disabled.
  • Document the two-stage start sequence and the sealed credential-access boundary.

Type of Change

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

Quality Gates

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: docs-updated
  • Evidence: docs/manage-sandboxes/run-sandboxes.mdx, docs/security/best-practices.mdx, and generated OpenClaw, Hermes, and Deep Agents guide variants; variant sync, 9 focused documentation tests, and the full docs build passed with 0 errors and 2 existing warnings.
  • Agent: Codex Desktop

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit:
  • Station profile/scenario:
  • Result:
  • Supporting evidence:

Verification

  • PR description includes a Signed-off-by: line and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run validate:pr passed after refreshing origin/main when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — after refreshing from current main, seven focused files passed 208 tests with one skip; state-guard, documentation, shell syntax, Python compilation, type-check, and repository checks passed.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result:
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Live Brev Linux validation on nemoclaw-launchable-433-aug03 for commit b5db426864a19754db7ee737113a82663df24163:

  • Compiled the candidate CLI and matched the installed startup script to the candidate source.
  • Stopped and restarted issue-8112-openclaw; startup restored sandbox state before gateway and host-forward verification and exited successfully.
  • OpenShell reported Ready, Docker reported running and healthy, and the OpenClaw gateway was running.
  • The empty credentials directory was root:sandbox 0710; the sandbox user could traverse a known path but could not list or write the directory.
  • A populated disposable credentials directory was restored to root:root 0700, with sandbox metadata access denied.

Signed-off-by: Senthil Ravichandran senthilr@nvidia.com

Summary by CodeRabbit

  • Bug Fixes

    • Improved sandbox recovery after container restarts, including restoration of managed startup processes.
    • Sandboxes can now become ready as soon as the runtime is running, without waiting for Docker health checks to complete.
    • Improved recovery validation for OpenClaw, Hermes, and Shields configurations.
  • Documentation

    • Updated sandbox startup documentation to describe process recovery and runtime readiness checks.

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv senthilr-nv added area: docs Documentation, examples, guides, or docs build area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery labels Aug 3, 2026
@senthilr-nv senthilr-nv self-assigned this Aug 3, 2026
@coderabbitai

coderabbitai Bot commented Aug 3, 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

Sandbox startup now accepts runtime-running readiness for Docker recovery. Successful starts restore managed startup state before gateway and host-forward checks. Shields startup restores controlled access for empty credentials roots and preserves sealed credentials.

Changes

Sandbox startup recovery

Layer / File(s) Summary
Runtime readiness contract
src/lib/onboard/docker-driver-sandbox-recovery.ts, src/lib/onboard/runtime-provider/docker.ts, src/lib/onboard/docker-driver-sandbox-recovery.test.ts
Recovery supports docker-health and runtime-running modes. Docker sandbox start selects runtime-running.
Startup state restoration
src/lib/actions/sandbox/start.ts, src/lib/actions/sandbox/connect.ts, src/lib/actions/sandbox/start.test.ts
Successful starts restore locked startup access and managed process state before gateway and host-forward checks. Failure paths do not restore state.
Shields startup access repair
scripts/state-dir-guard.py, src/lib/shields/state-dir-lock.ts, src/lib/shields/index.ts, src/lib/shields/*test.ts, test/state-dir-guard.test.ts
The startup guard action validates and updates empty credentials roots to root:sandbox ownership with mode 0710. Non-empty roots remain sealed.
Sealed startup posture
scripts/nemoclaw-start.sh, test/nemoclaw-start-sealed-restart.test.ts, docs/security/credential-storage.mdx, docs/deployment/deploy-to-headless-server.mdx, test/headless-server-docs.test.ts
Non-root startup preserves sealed gateway tokens and auth profiles. Missing or unsafe sealed state fails. Documentation and tests describe conditional token rotation.
Restart posture validation
test/e2e/live/hermes-shields-config.test.ts, test/e2e/live/shields-config.test.ts
End-to-end tests cover recovery with Shields enabled and disabled, including ownership and permission posture.

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

Sequence Diagram(s)

sequenceDiagram
  participant startDockerSandbox
  participant recoverDockerDriverSandbox
  participant startSandbox
  participant restoreLockedStateDirStartupAccess
  participant restoreSandboxStartupState
  participant gatewayChecks
  startDockerSandbox->>recoverDockerDriverSandbox: Request runtime-running readiness
  recoverDockerDriverSandbox-->>startDockerSandbox: Confirm running container
  startDockerSandbox->>startSandbox: Continue sandbox startup
  startSandbox->>restoreLockedStateDirStartupAccess: Restore locked startup access
  startSandbox->>restoreSandboxStartupState: Restore managed process state
  restoreSandboxStartupState-->>startSandbox: Restoration complete
  startSandbox->>gatewayChecks: Verify gateway and host forwards
Loading

Possibly related PRs

  • NVIDIA/NemoClaw#8143: Adds the state-directory guard and Shields locking infrastructure used by startup access restoration.
  • NVIDIA/NemoClaw#7975: Covers managed sandbox startup and recovery behavior after container restarts.
  • NVIDIA/NemoClaw#7848: Covers Docker/OpenClaw sandbox recovery after container or host restarts.

Suggested labels: area: onboarding

Suggested reviewers: prekshivyas, apurvvkumaria, cv

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 12.50% 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
Linked Issues check ✅ Passed The changes address [#8112] by accepting runtime-running containers, restoring startup state, and completing readiness and forwarding checks.
Out of Scope Changes check ✅ Passed The documentation, scripts, recovery logic, and tests support sandbox startup restoration and its sealed-state and agent-readiness requirements.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the primary change: the PR restores startup recovery before readiness checks, which is the core objective across all modified files.
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/fix-sandbox-start-runtime-state

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

@github-code-quality

github-code-quality Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit e9735c3 in the codex/fix-sandbox-st... branch remains at 96%, unchanged from commit efc3499 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit e9735c3 in the codex/fix-sandbox-st... branch remains at 81%, unchanged from commit efc3499 in the main branch.

Show a code coverage summary of the most impacted files.
File main efc3499 codex/fix-sandbox-st... e9735c3 +/-
src/lib/actions...andbox/start.ts 86% 73% -13%
src/lib/policy/...ne-exclusion.ts 96% 92% -4%
src/lib/private-networks.ts 93% 90% -3%
src/lib/shields/index.ts 69% 68% -1%
src/lib/onboard...box-recovery.ts 88% 87% -1%
src/lib/actions...dbox/connect.ts 78% 78% 0%
src/lib/shields...ate-dir-lock.ts 76% 76% 0%
src/lib/credentials/store.ts 55% 56% +1%
src/lib/onboard...vider/docker.ts 90% 91% +1%
src/lib/domain/.../connect-env.ts 89% 97% +8%

Updated August 04, 2026 14:20 UTC

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings reported

Advisor assessment: No blocking advisor findings reported
Next action: No advisor follow-up needed.
Findings: 0 blockers · 0 warnings · 0 suggestions

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 1 blocker · 2 warnings · 0 suggestions
  • Model comparison: normalized findings differ; normalized terminology decisions differ; normalized E2E selections match; Nemotron reported 1 more blocker, 2 more warnings, the same number of suggestions.
4 terminology differences from the second opinion

Advisory only. These are normalized differences from the primary terminology receipt.

  • startup at scripts/state-dir-guard.py:92: selected only by the second-opinion lane as established.
  • sealed startup at scripts/nemoclaw-start.sh:2414: selected only by the second-opinion lane as define.
  • empty sealed credentials at scripts/state-dir-guard.py:928: selected only by the second-opinion lane as define.
  • restore locked startup access at src/lib/shields/index.ts:2120: selected only by the second-opinion lane as define.

Second-opinion terminology and E2E selections are advisory. They do not change the primary assessment or E2E / PR Gate.

Since last review: 0 prior items resolved · 0 still apply · 0 new items found

3 semantic terminology decisions

Terminology decisions are advisory. They affect the assessment only when a separate finding identifies concrete semantic impact.

  • define — sealed gateway token at docs/security/credential-storage.mdx:22: Keep the modifier and its stated mutable-versus-sealed contrast where this token lifecycle is described.
  • justified — startup access at src/lib/shields/index.ts:2120: Keep the modifier for this narrow startup-only operation; do not use it for general lock-state changes.
  • justified — runtime-running at src/lib/onboard/docker-driver-sandbox-recovery.ts:128: Keep this selector with its docker-health contrast in the type and adjacent documentation.

E2E guidance

Advisory only. E2E / PR Gate selects and runs jobs independently.

Recommended E2E: cloud-inference, security-posture, hermes-shields-config, onboard-repair, onboard-resume, shields-config, ubuntu-repo-docker-post-reboot-recovery, cloud-onboard

Workflow run details

This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge.

@senthilr-nv
senthilr-nv requested a review from prekshivyas August 3, 2026 17:17
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv senthilr-nv changed the title fix(sandbox): verify readiness after container start fix(sandbox): restore startup before readiness Aug 3, 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.

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/start.test.ts (1)

48-66: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Cover the production restoration wiring.

The harness always injects restoreStartupState at Line 48 and passes it to startSandbox at Line 66. The tests therefore verify only the injected callback contract. They do not execute the default helper in src/lib/actions/sandbox/start.ts Lines 21-24 or restoreSandboxStartupState in src/lib/actions/sandbox/connect.ts Lines 894-897. A broken dynamic import or export wiring can pass this suite. Add one test without the override and stub the connect module, or add a focused test for restoreSandboxStartupState. (raw.githubusercontent.com)

As per path instructions, tests must prove that public entrypoints reach the new path and that the old path is deleted or cannot execute.

🤖 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/start.test.ts` around lines 48 - 66, Add a test in
the startSandbox suite that omits the restoreStartupState dependency override
and stubs the connect module to verify the production default reaches
restoreSandboxStartupState. Assert the public startSandbox entrypoint invokes
the restored startup-state path, and ensure the legacy injected-only path is
removed or cannot execute when the override is absent.

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.

Outside diff comments:
In `@src/lib/actions/sandbox/start.test.ts`:
- Around line 48-66: Add a test in the startSandbox suite that omits the
restoreStartupState dependency override and stubs the connect module to verify
the production default reaches restoreSandboxStartupState. Assert the public
startSandbox entrypoint invokes the restored startup-state path, and ensure the
legacy injected-only path is removed or cannot execute when the override is
absent.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 645175c9-0277-4d5c-b65b-aa6a017d0c66

📥 Commits

Reviewing files that changed from the base of the PR and between 25bb9d2 and 55de826.

📒 Files selected for processing (4)
  • docs/manage-sandboxes/run-sandboxes.mdx
  • src/lib/actions/sandbox/connect.ts
  • src/lib/actions/sandbox/start.test.ts
  • src/lib/actions/sandbox/start.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/manage-sandboxes/run-sandboxes.mdx

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv

Copy link
Copy Markdown
Collaborator Author

Maintainer CI exception: reviewed-npm-audit is failing on the known OpenClaw 2026.7.1 high-severity dependency finding. The peer-owned remediation is #8156, associated with #8116, and is outside this sandbox lifecycle PR's scope.

The checks rollup failed only because it includes reviewed-npm-audit. E2E / PR Gate Coordination did not dispatch its child run because prerequisite CI was red; it did not report an E2E test failure. Per maintainer direction, dependency remediation remains with the peer PR.

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

Reviewed exact head 96991b3. Recovery is correctly placed after Docker runtime availability and before OpenShell readiness verification, and I found no demonstrated blocking defect. Non-blocking fast follow: add the accepted OpenClaw and Hermes by shields-up and shields-down real-startup matrix as a narrowly scoped test PR. Functional CI passes; E2E remains pending.

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>

@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/e2e/live/hermes-shields-config.test.ts`:
- Around line 110-130: Update the stop, start, and status invocations in the
Hermes shields test to use HostCliClient.nemoclaw() instead of
host.command("nemoclaw", ...), while preserving their existing arguments and
assertions so the configured NEMOCLAW_CLI_BIN is used.
🪄 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: 1978b72d-1eb9-43a9-b8c8-6ff9461905ca

📥 Commits

Reviewing files that changed from the base of the PR and between 96991b3 and 59e7238.

📒 Files selected for processing (2)
  • test/e2e/live/hermes-shields-config.test.ts
  • test/e2e/live/shields-config.test.ts

Comment thread test/e2e/live/hermes-shields-config.test.ts Outdated
@senthilr-nv senthilr-nv added bug-fix PR fixes a bug or regression platform: container Affects Docker, containerd, Podman, or images v0.0.102 Release target labels Aug 4, 2026
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>

@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/state-dir-guard.test.ts (1)

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

Cover the populated startup-traversable recovery state.

Line 951 resets credentialsDir to 0700 before adding token.json.
The test therefore skips the branch that must reseal a non-empty root:sandbox 0710 directory.
Keep the directory at 0710 when adding the token, then verify that startup returns it to 0700.

Proposed test change
-    fs.chmodSync(credentialsDir, 0o700);
     fs.writeFileSync(path.join(credentialsDir, "token.json"), "secret\n", { mode: 0o600 });

As per path instructions, security-boundary tests must cover negative paths that prevent bypasses.

🤖 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/state-dir-guard.test.ts` around lines 951 - 958, Update the test around
runGuard("startup", configDir) to keep credentialsDir at 0710 while adding
token.json, rather than resetting it to 0700. Preserve the token file’s 0600
mode, then assert startup succeeds and reseals the populated credentialsDir to
0700.

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/nemoclaw-start-sealed-restart.test.ts`:
- Around line 12-33: Remove all if statements from the test file by moving
extractShellFunction’s conditional parsing logic into a non-test helper or
reusing an existing helper. Update the test to call that helper while preserving
shell-function and heredoc extraction behavior.

---

Nitpick comments:
In `@test/state-dir-guard.test.ts`:
- Around line 951-958: Update the test around runGuard("startup", configDir) to
keep credentialsDir at 0710 while adding token.json, rather than resetting it to
0700. Preserve the token file’s 0600 mode, then assert startup succeeds and
reseals the populated credentialsDir to 0700.
🪄 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: 094bd81f-8736-4325-bdfe-537d2224c726

📥 Commits

Reviewing files that changed from the base of the PR and between 59e7238 and b5db426.

📒 Files selected for processing (13)
  • docs/deployment/deploy-to-headless-server.mdx
  • docs/security/credential-storage.mdx
  • scripts/nemoclaw-start.sh
  • scripts/state-dir-guard.py
  • src/lib/actions/sandbox/start.test.ts
  • src/lib/actions/sandbox/start.ts
  • src/lib/shields/index.ts
  • src/lib/shields/state-dir-lock.test.ts
  • src/lib/shields/state-dir-lock.ts
  • test/headless-server-docs.test.ts
  • test/nemoclaw-start-sealed-restart.test.ts
  • test/nemoclaw-start.test.ts
  • test/state-dir-guard.test.ts

Comment thread test/nemoclaw-start-sealed-restart.test.ts Outdated
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Comment thread test/nemoclaw-start-sealed-restart.test.ts Fixed
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Comment thread test/nemoclaw-start-sealed-restart.test.ts Fixed
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv
senthilr-nv enabled auto-merge (squash) August 4, 2026 07:30
@cjagwani

cjagwani commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

Queue follow-up: the dependency blocker cited in the earlier CI exception is now remediated on main#8156 merged at 00:32 UTC and the additional managed Python dependency update #8203 merged at 08:24 UTC. This head (e58c09a191) is still based on e31a23aba7, before #8203, and its aggregate/CLI red is the exact-head audit prerequisite that prevented a protected E2E dispatch.

Please refresh from current main so the ordinary required checks and direct E2E gate can run against the landed remediation. I have not edited the author branch or waived the required checks.

Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
auto-merge was automatically disabled August 4, 2026 12:38

Head branch was modified

@senthilr-nv
senthilr-nv enabled auto-merge (squash) August 4, 2026 14:07
@senthilr-nv
senthilr-nv merged commit 8295d20 into main Aug 4, 2026
120 of 122 checks passed
@senthilr-nv
senthilr-nv deleted the codex/fix-sandbox-start-runtime-state branch August 4, 2026 14:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: docs Documentation, examples, guides, or docs build area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery bug-fix PR fixes a bug or regression platform: container Affects Docker, containerd, Podman, or images v0.0.102 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Ubuntu 26.04][Sandbox] nemoclaw start after stop leaves sandbox Unhealthy in Error phase; only rebuild recovers

6 participants