fix(sandbox): wait through managed container restart transitions - #8765
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (2)
📝 WalkthroughWalkthroughChangesManaged supervisor recovery
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant ManagedRecovery
participant SupervisorAction
participant DockerContainer
ManagedRecovery->>SupervisorAction: execute managed supervisor action
SupervisorAction->>DockerContainer: probe or start controller
DockerContainer-->>SupervisorAction: status 137 or container-restarting error
SupervisorAction-->>ManagedRecovery: classified transient result
ManagedRecovery->>SupervisorAction: retry within bounded attempts
SupervisorAction-->>ManagedRecovery: completion marker or terminal failure
Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (2)
test/process-recovery-supervisor-relaunch.test.ts (2)
173-190: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winAssert both bounded probe attempts.
The test verifies one sleep, but it does not prove that the waiter made the second probe before returning
false. Store the request mock and asserttoHaveBeenCalledTimes(2)for the configured two-attempt bound.Proposed assertion
it("fails after the bounded wait when empty exit 137 persists (`#8726`)", () => { const sleepImpl = vi.fn(); + const requestGatewaySupervisorActionImpl = vi.fn(() => ({ + status: 137, + stdout: "", + stderr: "", + })); expect( waitForManagedGatewaySupervisor("new-clone", { intervalSeconds: 3, maxAttempts: 2, - requestGatewaySupervisorActionImpl: vi.fn(() => ({ - status: 137, - stdout: "", - stderr: "", - })), + requestGatewaySupervisorActionImpl, sleepImpl, }), ).toBe(false); + expect(requestGatewaySupervisorActionImpl).toHaveBeenCalledTimes(2);🤖 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/process-recovery-supervisor-relaunch.test.ts` around lines 173 - 190, Update the test around waitForManagedGatewaySupervisor to store the requestGatewaySupervisorActionImpl mock and assert it was called twice, confirming both configured probe attempts occur before returning false; retain the existing sleep assertions.
150-159: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winAdd a whitespace-only probe case.
The predicate accepts whitespace when both streams become empty after
trim(), but this test covers only literal empty strings. Add a whitespace-only input case to protect the startup contract.Proposed test extension
- it("waits through an exact empty exit 137 from a settling controller probe (`#8726`)", () => { + it.each([ + { stdout: "", stderr: "" }, + { stdout: " \t", stderr: "\r\n" }, + ])( + "waits through an empty or whitespace-only exit 137 from a settling controller probe (`#8726`)", + ({ stdout, stderr }) => { const sleepImpl = vi.fn(); const requestGatewaySupervisorActionImpl = vi .fn() - .mockReturnValueOnce({ status: 137, stdout: "", stderr: "" }) + .mockReturnValueOnce({ status: 137, stdout, stderr }) .mockReturnValueOnce({ status: 0, stdout: "GATEWAY_PID=4242", stderr: "", });🤖 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/process-recovery-supervisor-relaunch.test.ts` around lines 150 - 159, Add a test case alongside the exact-empty exit 137 scenario for the controller probe, using whitespace-only stdout and stderr on the first requestGatewaySupervisorActionImpl response. Keep the expected behavior and subsequent successful probe response unchanged, verifying the startup flow waits and retries when both streams become empty after trimming.
🤖 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 `@test/process-recovery-supervisor-relaunch.test.ts`:
- Around line 173-190: Update the test around waitForManagedGatewaySupervisor to
store the requestGatewaySupervisorActionImpl mock and assert it was called
twice, confirming both configured probe attempts occur before returning false;
retain the existing sleep assertions.
- Around line 150-159: Add a test case alongside the exact-empty exit 137
scenario for the controller probe, using whitespace-only stdout and stderr on
the first requestGatewaySupervisorActionImpl response. Keep the expected
behavior and subsequent successful probe response unchanged, verifying the
startup flow waits and retries when both streams become empty after trimming.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 00bbe2c0-bd98-4149-bcf5-8d0a1cf917af
📒 Files selected for processing (6)
src/lib/actions/sandbox/gateway-restart.test.tssrc/lib/actions/sandbox/gateway-restart.tssrc/lib/actions/sandbox/process-recovery.tssrc/lib/actions/sandbox/start.test.tssrc/lib/actions/sandbox/start.tstest/process-recovery-supervisor-relaunch.test.ts
PR Review Advisor — No blocking findings reportedAdvisor assessment: No blocking advisor findings reported Model lanes
Second-opinion terminology and E2E selections are advisory. Live E2E does not run automatically for pull requests. 3 semantic terminology decisionsTerminology decisions are advisory. They affect the assessment only when a separate finding identifies concrete semantic impact.
E2E guidanceAdvisory only. A maintainer can dispatch the default E2E suite against this exact revision. Recommended E2E: This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge. |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
test/process-recovery-managed-controller.test.ts (1)
187-221: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winCover whitespace-only output, not only empty output.
These recovery cases use
stdout: ""andstderr: "". They do not prove the.trim() === ""contract for non-empty whitespace. Add whitespace-only output to both a transient-success case and a persistent-failure case. Otherwise, a regression that retries only zero-length output can pass the tests.As per path instructions, the test should prove the observable recovery behavior.
🤖 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/process-recovery-managed-controller.test.ts` around lines 187 - 221, Update the recovery test cases around the “status 137 with no output followed by authenticated recovery” and “persistent status 137 with no output” scenarios to use non-empty whitespace in stdout and stderr. Preserve their existing expectedResult and expectedActions so the tests verify whitespace-only output follows the same transient-recovery and persistent-failure behavior as empty output.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.
Nitpick comments:
In `@test/process-recovery-managed-controller.test.ts`:
- Around line 187-221: Update the recovery test cases around the “status 137
with no output followed by authenticated recovery” and “persistent status 137
with no output” scenarios to use non-empty whitespace in stdout and stderr.
Preserve their existing expectedResult and expectedActions so the tests verify
whitespace-only output follows the same transient-recovery and
persistent-failure behavior as empty output.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: b21e9201-cf6e-4034-a993-22c8a10543d8
📒 Files selected for processing (4)
src/lib/actions/sandbox/process-recovery.tssrc/lib/actions/sandbox/start.test.tstest/process-recovery-managed-controller.test.tstest/process-recovery-supervisor-relaunch.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- test/process-recovery-supervisor-relaunch.test.ts
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
|
🌿 Preview your docs: https://nvidia-preview-pr-8765.docs.buildwithfern.com/nemoclaw |
## Summary OpenShell 0.0.99 began preparing its default `/sandbox` workspace when Docker supplies `OPENSHELL_OCI_IMAGE_USER`; after a Shields up restart, that preparation changes the protected parent from `root:sandbox` to `sandbox:sandbox` before the workload starts and leaves the container restarting. This change preserves the protected parent by omitting only that marker at NemoClaw's exact reviewed Docker recreation boundary while keeping the explicit `sandbox:sandbox` workload policy and `/sandbox` runtime contract. ## Related Issue Follow-up to #8662. Complementary to #8765, which covers supervisor recovery after transient process exits rather than the pre-workload workspace ownership change. ## Changes - Add the Docker recreation compatibility correction required by the OpenClaw and Hermes Shields lifecycle consumers. OpenShell 0.0.101 has no supported switch for preserving the existing default-workspace owner, so the exact root-supervisor, Docker working-directory, supervisor-argument, label, startup-command, and identity-metadata contract is validated before omitting `OPENSHELL_OCI_IMAGE_USER`; malformed or partial metadata fails before cutover. Focused clone and managed-bootstrap environment-delta tests protect this boundary. - Require every shipped managed policy to retain explicit `sandbox:sandbox` process identity, and verify the replacement still preserves empty driver UID/GID markers plus every unrelated environment entry. - Extend the OpenClaw and Hermes Shields live targets with redacted Docker logs on startup failure and post-restart assertions for workload user, group, home, and working directory. The OpenClaw lane also proves `/sandbox` remains `1775 root:sandbox` after a Shields up restart. - Correct the later failed-startup E2E proof to stop and continue PID 1 through the Docker daemon, verify the stopped state before terminating the startup child, and retain exit 137 as a hard failure. - Record the escaped workspace-ownership finding and correction in the OpenShell 0.0.99 and 0.0.101 migration reviews. - Scope: this repairs fresh Docker recreation used by the failing lanes. Existing affected containers still require recreation, and native-GPU composition remains a separate live-evidence gap. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] 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: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [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 Codex Desktop nine-category security review found no blocking findings after verifying the exact OpenShell producer contract, fail-closed metadata validation, replacement delta, and diagnostic redaction. - [ ] 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/security/openshell-0.0.99-migration-review.md`; `docs/security/openshell-0.0.101-migration-review.md` - Agent: Codex Desktop <!-- docs-review-head-sha: 618d243 --> <!-- docs-review-agents-blob-sha: 0249778 --> ## 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 commit appears as `Verified` in GitHub - [x] 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 - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — `npm exec -- vitest run src/lib/onboard/docker-gpu-patch-clone.test.ts src/lib/onboard/managed-bootstrap/docker.test.ts test/openshell-0.0.99-migration-review.test.ts test/openshell-0.0.101-migration-review.test.ts --maxWorkers=2` (67 passed); source-shape review tests (35 passed); `npm run typecheck:cli`; `npm run checks:repository`; and `npm run test:e2e-phases:check` passed; `npm exec -- vitest run --project e2e-support test/e2e/support/shields-failed-startup.test.ts` passed 10 focused tests. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — command/result: - [x] Quality Gates section completed with required justifications or waivers - [x] No secrets, API keys, or credentials committed - [ ] `npm run docs` builds without warnings (doc changes only) - [ ] 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) `npm run docs` completed with zero errors and two existing Fern warnings. --- Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Bug Fixes** - Improved Docker workspace migration compatibility for managed environments. - Preserved `/sandbox` ownership, permissions, and runtime identity during container replacement. - Rejected malformed or unauthorized identity metadata. - Prevented failed replacements from stopping the existing workload. - **Diagnostics** - Enhanced startup recovery with Docker logs and clearer failure details. - Added checks for runtime identity, working directory, home directory, and workspace permissions. - **Documentation** - Updated migration and security reviews with compatibility requirements and acceptance criteria. - Documented managed policy identity requirements. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary This PR updates the August 10, 2026 v0.0.106 release entry with gateway readiness fixes that merged after PR #8756. PRs #8765, #8767, and #8768 remain outside this entry because they are open and do not carry the `v0.0.106` release label. ## Changes - Document acceptance of OpenShell v0.0.101 `Server:` endpoint output and target-bound process tags when trusted listener evidence matches the configured gateway. - Document preservation of selected-gateway stale state so onboarding can reconcile a registered gateway when a gateway-scoped OpenShell status check cannot connect. - Record evidence-backed exclusions for internal image, startup, qualification, proxy-environment, CI, and test-harness changes in PRs #8754, #8609, #8762, #8432, #8766, and #8581. - Exclude PRs #8765, #8767, and #8768 because their changes are absent from `main` and the PRs do not carry the `v0.0.106` release label. The release entry must be updated after any of those PRs merges for v0.0.106. ## 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: `test/changelog-docs.test.ts` validates dated changelog SPDX placement, version headings, forbidden terms, and link form. - [ ] 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-08-10.mdx`; an independent Codex Desktop subagent reviewed the writing rules and documentation style, terminology, structure, voice, code-sample presentation, links, source and test accuracy, release meaning, product scope, and evidence-backed exclusions at commit `190bf882c`. - Agent: Codex Desktop <!-- docs-review-head-sha: 190bf88 --> <!-- docs-review-agents-blob-sha: c4923a3 --> ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: Not applicable; `scripts/prepare-dgx-station-host.sh` is unchanged. - Station profile/scenario: Not applicable. - Result: Not applicable. - Supporting evidence: Not applicable. ## 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 validate:pr` passed after refreshing `origin/main` 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: `npx vitest run test/changelog-docs.test.ts` passed 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 a documentation-only release-entry update. - [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) — result: passed with 0 errors and 2 existing 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) — no page was added. --- Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved gateway readiness detection for OpenShell v0.0.101 endpoint output. * Process tags are now accepted only when they match trusted listener information for the configured gateway. * Preserved stale gateway status during connection failures to support accurate onboarding reconciliation. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Completes the v0.0.106 changelog for four user-visible changes that merged before the tag but were omitted from the pre-tag entry. Keeps public security pages focused on operator guidance by relocating maintenance contracts to contributor guidance and the owning OpenClaw dependency review. Records PR #8753's portable inference descriptor as Experimental while leaving its existing workflow documentation unchanged. ## Changes - Add managed-container restart-transition recovery from PR #8765, Shields parent-owner preservation from PR #8767, and managed storage remediation plus NVIDIA driver parsing from PR #8768 to the canonical v0.0.106 entry. - Add the Experimental portable inference descriptor from PR #8753 to the v0.0.106 entry, including its short-lived credential boundary, manual standby behavior, and owning setup page. - Keep Process Controls focused on the operator-facing immutable-image boundary and move the blueprint image-pin maintenance contract to `CONTRIBUTING.md`. - Keep Gateway and Secret Controls focused on operator actions and move the OpenClaw audit-suppression tests and distinct removal conditions to the owning OpenClaw 2026.7.1 dependency review. ## 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: the dated-changelog, published-route, and documentation-link tests cover the changed release entry and links. - [ ] Tests not applicable — justification: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [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: an independent Codex Desktop documentation writer reviewed exact head `bbfed36ca`; the review verified the operator-facing security claims, the distinct `allowInsecureAuth` and device-auth suppression removal conditions against their generator branches, and the confirmed Experimental #8753 release claim. No runtime or policy behavior changes. - [ ] 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: `CONTRIBUTING.md`, `docs/changelog/2026-08-10.mdx`, `docs/security/gateway-authentication-controls.mdx`, `docs/security/openclaw-2026.7.1-dependency-review.md`, and `docs/security/process-controls.mdx`; the subagent reviewed `docs/CONTRIBUTING.md`, `WRITING.md`, terminology, structure, voice, code-sample presentation, canonical ownership, factual accuracy, and product scope. - Agent: Codex Desktop <!-- docs-review-head-sha: bbfed36 --> <!-- docs-review-agents-blob-sha: c4923a3 --> ## DGX Station Hardware Evidence - [ ] Tested on DGX Station - Tested commit: Not applicable; `scripts/prepare-dgx-station-host.sh` is unchanged. - Station profile/scenario: Not applicable. - Result: Not applicable. - Supporting evidence: Not applicable. ## 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 validate:pr` passed after refreshing `origin/main` 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: `npx vitest run test/changelog-docs.test.ts test/check-docs-published-routes.test.ts test/check-docs-links.test.ts` passed; `npm run docs` and `git diff --check` passed again after the review correction. - [ ] 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 bounded 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) — result: passed with zero errors and the existing light-mode accent contrast warning. - [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: Miyoung Choi <miyoungc@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Documentation** - Documented requirements for keeping managed sandbox image digest pins synchronized and immutable. - Added guidance for validating custom images and using reviewed image sources during onboarding. - Expanded release notes with portable inference profiles, endpoint references, cleanup behavior, startup handling, and installer details. - Updated security documentation with current dependency-review information and authentication-control boundaries. - Clarified sandbox ownership, permissions, workload identity, and managed-container restart behavior. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Miyoung Choi <miyoungc@nvidia.com>
Summary
Stopped OpenClaw and Hermes sandbox recovery now waits through exact managed-container restart transitions before declaring failure. A transition still cannot count as success: NemoClaw requires a later authenticated controller completion and the existing health, readiness, and forward checks, while persistent or diagnostic failures remain terminal.
Related Issue
Follow-up to #8726
Changes
137only when both output streams are blank, and after Docker's canonical container-restarting result only when its 64-character lowercase container ID matches the selected registry-owned container.SUPERVISOR_BUSYresults, and use the existing 11-attempt read-only supervisor waiter for the two container transitions.SUPERVISOR_NOT_RUNNING. Status137, Docker restart results, mismatched IDs, altered text, and diagnostic output remain terminal outside their two bounded managed-control loops.Type of Change
Quality Gates
4f7614af6and returned PASS with no findings. It verified the root-only controller boundary, exact container-ID binding, bounded retries, terminal diagnostics, and required post-transition health gates.Documentation Writer Review
docs-updateddocs/reference/commands.mdxanddocs/reference/troubleshooting.mdx.DGX Station Hardware Evidence
Verification
Signed-off-by:line and every commit appears asVerifiedin GitHubpre-commit,commit-msg, andpre-pushhooks passed, ornpm run validate:prpassed after refreshingorigin/mainwhen hooks were skipped or unavailablenpm run typecheck:cliandnpm run checks:repositorypassed.npm testfor broad runtime/test-harness changes;npm run checkfor repo-wide validation/coverage changes — command/result: Not applicable; this is a narrow sandbox lifecycle result-classification change protected by focused tests.npm run docsbuilds without warnings (doc changes only) —npm run docspassed with 0 errors and 2 pre-existing Fern warnings.E2E Evidence
f917c46c5reached the stopped-Hermes restart phase in run 31440989310 and exposed Docker's exactContainer <id> is restartingtransition. Setup and registered-resource cleanup passed.4f7614af6is pending.Signed-off-by: Julie Yaunches jyaunches@nvidia.com
Summary by CodeRabbit
Bug Fixes
Documentation