Skip to content

fix(onboard): sync Homebrew formula pin - #9882

Merged
jyaunches merged 2 commits into
mainfrom
fix/homebrew-formula-pin-sync
Aug 21, 2026
Merged

fix(onboard): sync Homebrew formula pin#9882
jyaunches merged 2 commits into
mainfrom
fix/homebrew-formula-pin-sync

Conversation

@laitingsheng

@laitingsheng laitingsheng commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary

NemoClaw previously passed the OpenShell v0.0.101 formula digest to the macOS gateway lifecycle after the runtime moved to v0.0.106, so onboarding rejected the valid staged formula. This layer supplies the v0.0.106 digest, prevents future consumer drift, and establishes the reviewed trust prerequisite for the next stack layer.

Changes

  • Align the gateway lifecycle formula digest with the selected OpenShell release.
  • Bind the lifecycle digest to the base-trusted formula record in the dependency-pin check.
  • Pre-authorize the exact normalized installer repair template consumed by the next stack layer. The installer checker intentionally rejects same-layer self-authorization; test/installer-homebrew-formula-reuse-trust.test.ts protects this prerequisite.

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

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests 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: Maintainer dependency and security review passed: fix(onboard): sync Homebrew formula pin #9882 (comment)
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

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 — command/result or justification: 9 Homebrew lifecycle tests and 12 dependency-pin/trust-template tests passed; npm run check:installer-hash and npm run checks:repository 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)

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

Summary by CodeRabbit

  • Bug Fixes

    • Improved release validation by verifying the Homebrew formula checksum against trusted release data.
    • Updated the bundled OpenShell Homebrew formula checksum.
    • Added support for validating repair-related Homebrew formula reuse.
  • Tests

    • Added coverage for detecting outdated formula checksums.
    • Added regression coverage for installer formula reuse validation.

Keep lifecycle trust aligned with the selected OpenShell release.
Reject future formula-pin drift and trust the exact repair template for
the next stack layer.

Refs #9848

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

coderabbitai Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 90226e5d-31ab-4173-b897-f628f412a223

📥 Commits

Reviewing files that changed from the base of the PR and between fac4e6d and fde1178.

📒 Files selected for processing (6)
  • scripts/checks/dependency-pins.mts
  • scripts/checks/extract-installer-pins.mts
  • src/lib/onboard/docker-driver-gateway-service-homebrew.test.ts
  • src/lib/onboard/docker-driver-gateway-service.ts
  • test/dependency-pins-check.test.ts
  • test/installer-homebrew-formula-reuse-trust.test.ts

Included review availability: Your plan provides up to 12 included reviews per hour; 11 remain after this review.


📝 Walkthrough

Walkthrough

OpenShell dependency validation now compares the trusted release formula checksum with the gateway service pin. The v0.0.106 installer trust record accepts an additional template digest. Tests cover stale formula pins and trusted formula reuse.

Changes

OpenShell trust validation

Layer / File(s) Summary
Formula checksum validation
scripts/checks/dependency-pins.mts, test/dependency-pins-check.test.ts
The verifier extracts the trusted formula SHA-256, reads the gateway service source, compares both values, and reports stale pins. Fixtures and regression tests cover the comparison.
Installer template trust allowlist
scripts/checks/extract-installer-pins.mts, test/installer-homebrew-formula-reuse-trust.test.ts
The v0.0.106 trust record accepts two installer template hashes. A regression test validates trusted Homebrew formula reuse.
Gateway formula pin update
src/lib/onboard/docker-driver-gateway-service.ts, src/lib/onboard/docker-driver-gateway-service-homebrew.test.ts
The gateway service uses the updated formula checksum. The Homebrew test verifies that checksum is passed to the operation.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to fde11

This localized change updates the Homebrew formula pin and its trust validation with targeted tests and repository checks reported as passing; no actionable merge-blocking risk remains beyond normal review.

Sequence Diagram(s)

sequenceDiagram
  participant DependencyChecks
  participant OpenShellValidation
  participant ReleaseTrust
  participant GatewayService
  DependencyChecks->>GatewayService: Read source
  DependencyChecks->>OpenShellValidation: Pass gateway service source
  OpenShellValidation->>ReleaseTrust: Extract trusted formula checksum
  OpenShellValidation->>GatewayService: Read pinned formula checksum
  OpenShellValidation-->>DependencyChecks: Return validation result
Loading

Suggested reviewers: brandonpelfrey

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 5 functions across 6 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the primary change: synchronizing the onboard Homebrew formula pin.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/homebrew-formula-pin-sync

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

@github-code-quality

github-code-quality Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall line coverage in commit db84240 in the fix/homebrew-formula... branch remains at 96%, unchanged from commit 22ebd8d in the main branch.

TypeScript / code-coverage/cli

The overall line coverage in commit db84240 in the fix/homebrew-formula... branch remains at 83%, unchanged from commit 22ebd8d in the main branch.

Show a line coverage summary of the most impacted files.
File main 22ebd8d fix/homebrew-formula... db84240 +/-
src/lib/onboard...ne-authority.ts 96% 85% -11%
src/lib/inferen...al-lifecycle.ts 97% 88% -9%
src/lib/state/g...way-registry.ts 96% 87% -9%
src/lib/onboard...rtup/profile.ts 94% 89% -5%
src/lib/state/registry/lock.ts 98% 93% -5%
src/lib/sandbox...rce-identity.ts 86% 81% -5%
src/lib/state/o...oard-session.ts 87% 84% -3%
src/lib/onboard...mo-lifecycle.ts 83% 80% -3%
src/lib/state/p...l-retirement.ts 81% 80% -1%
src/lib/onboard...file-builder.ts 91% 95% +4%

Updated August 21, 2026 14:04 UTC

@laitingsheng laitingsheng added area: install Install, setup, prerequisites, or uninstall flow area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow bug-fix PR fixes a bug or regression labels Aug 21, 2026
@github-actions

github-actions Bot commented Aug 21, 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 · medium confidence · 0 blockers · 2 warnings · 0 suggestions
  • Model comparison: normalized findings differ; normalized terminology decisions differ; normalized E2E selections differ; Nemotron reported the same number of blockers, 2 more warnings, the same number of suggestions.
2 additional E2E selections from the second opinion

Advisory only. The primary lane did not select these E2E jobs or targets.

  • openshell-gateway-auth-contract: The completed second-opinion lane identified E2E coverage that the primary lane omitted.
  • bootstrap-install-smoke: The completed second-opinion lane identified E2E coverage that the primary lane omitted.

Second-opinion terminology and E2E selections are advisory. Live E2E does not run automatically for pull requests.

2 semantic terminology decisions

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

  • justified — pre-authorizes at scripts/checks/extract-installer-pins.mts:320: Keep the term in this local trust-record comment; the adjacent test identifies the accepted template behavior.
  • define — repair-aware formula reuse at scripts/checks/extract-installer-pins.mts:320: Keep the local phrase with its adjacent implementation test; no repository-wide term is necessary.

E2E guidance

Advisory only. A maintainer can dispatch the default E2E suite for the commit under review.

Recommended E2E: None

Manual-only E2E: managed-image-multiarch-startup, onboard-repair, onboard-resume, cloud-onboard
The manual PR workflow does not run these selectors for the commit under review. Run them from reviewed code on main.

Workflow run details

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

Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@apurvvkumaria

Copy link
Copy Markdown
Collaborator

Maintainer Dependency, Security, and Documentation Review

Verdict

PASS for the current branch revision. I found no technical, security, or documentation change request. The pull request is not merge-ready until fresh required checks pass and repository-routed independent review covers the current revision.

Dependency Evidence

  • OpenShell v0.0.106 is already the selected supported release on main. Merged pull request #9224 audited the five adjacent release ranges from v0.0.101 through v0.0.106.
  • The published v0.0.106 release is neither a draft nor a prerelease. Its source revision is c4b500a7.
  • The downloaded openshell.rb artifact has SHA-256 f0f86519e227b3b326431410058ba690b1a7b83e5af7384014e4b96283d3a642, matching the GitHub release metadata, release trust record, and gateway service value in this pull request.
  • The new dependency check rejects a gateway formula value that differs from the reviewed release record.
  • The additional installer-template trust entry matches the repair in stacked pull request #9883. That repair remains a separate review and does not become selected behavior in this pull request.

Security Review

  1. Secrets and credentials: PASS. No credential input, storage, output, or access changes.
  2. Input validation and data sanitization: PASS. The release record requires one complete record and a lowercase 64-character SHA-256 value. Consumer drift becomes a repository-check failure.
  3. Authentication and authorization: PASS. No principal, permission, or resource-authorization behavior changes. The existing temporary Homebrew trust boundary continues to own formula operations.
  4. Dependencies and third-party libraries: PASS. No library is added. The formula comes from the published NVIDIA/OpenShell v0.0.106 release and its downloaded digest matches the reviewed value.
  5. Error handling and logging: PASS. A missing or different release record fails validation. No sensitive value is added to diagnostics.
  6. Cryptography and data protection: PASS. The change uses the existing SHA-256 artifact-integrity contract and does not add custom cryptography or protected-data handling.
  7. Configuration and security headers: PASS. The gateway service now uses the digest for the already selected release. No network, container, browser, or privilege default changes.
  8. Security testing: PASS. Focused tests cover the accepted digest, stale-digest rejection, gateway argument propagation, and acceptance of the reviewed next-layer template.
  9. System security: PASS. Base-trusted parsing still prevents a selector change from authorizing its own operational template. The stacked repair must match the value reviewed here and pass its own gates.

Documentation Review

No documentation change is needed. This pull request aligns an internal artifact-integrity value and adds repository enforcement for existing supported behavior. It does not change a public command, operator procedure, or supported product surface.

Validation

  • 21 focused tests passed across the Homebrew gateway, dependency-check, and installer-template suites.
  • Live installer artifact verification passed for the v0.0.106 formula and all selected release assets.
  • Repository checks passed.
  • Repository pull-request validation passed after normal generated build artifacts were produced.
  • GitHub reports revision db8424091 as Verified.
  • Change size is recorded as 149 additions and 7 deletions. No large-increase flag is needed.

E2E Classification

The earlier OpenClaw trusted-private MCP discovery jobs failed twice in the concurrent-add phase. Both operations were rejected because OpenShell did not synchronize the expected credential revision. The pull request does not change MCP, credential synchronization, Linux runtime selection, or the managed image used by those jobs. Cleanup passed, and both artifact secret scans passed.

This matches open issue #9764. The repeated result is an external technical blocker, not a confirmed transient failure, so I did not rerun it. Fresh checks are running after the branch update.

@jyaunches
jyaunches merged commit a10b7de into main Aug 21, 2026
82 of 84 checks passed
@jyaunches
jyaunches deleted the fix/homebrew-formula-pin-sync branch August 21, 2026 20:11
jyaunches added a commit that referenced this pull request Aug 22, 2026
<!-- markdownlint-disable MD041 -->
## Summary

The rebuild handoff could restart a healthy replacement container while
OpenShell still processed the rollback backup deletion. NemoClaw now
requires a successful OpenShell sandbox list that omits the selected
sandbox name before it restarts the replacement. During onboarding,
lifecycle polling and final readiness use the same handoff deadline.
Legacy recovery also requires lifecycle release and final readiness
before success.

## Related Issue

Related to #9531.

## Changes

- Add a bounded, fail-closed lifecycle-release check that accepts only
an explicit empty sandbox list or a parsed list that omits the exact
sandbox name.
- Require affirmative lifecycle-release evidence before either
onboarding or legacy recovery restarts the replacement; missing or
failed evidence remains fail-closed.
- Preserve the existing replacement stop and rollback backup removal
before the release check. After release evidence is established,
preserve replacement restart and final supervisor readiness as separate
authorities.
- Share the existing onboarding final-handoff deadline between lifecycle
release and final readiness, and keep polling sleep on the host after
the previous container is retired.
- Add behavior tests for every accepted lifecycle-release receipt,
neighboring malformed and phase-free outputs, failed and missing probe
statuses, `Deleting` to `Error` to name-absence ordering, exact injected
runner identity, and composed-flow success suppression.
- Update eight embedded messaging create/recreate runner fixtures to
return the canonical successful empty sandbox-list receipt required by
lifecycle release.
- Record the workaround contract, its regression tests, and the upstream
condition that permits removal.
- Document the final lifecycle-release step in the existing command
reference.

## 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] 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
nine-category security review passed for commit under review
`0e1cf95d699bd81fd29e747c9f51d9536fd11493` against current base
`465d7112f321d9946c5b130d87ce543de3adf38e`. The follow-up changes only
embedded test fixtures and adds no production authority. The PR net adds
no credential, authorization, dependency, cryptography, configuration,
or privilege boundary. Both onboarding and legacy recovery require the
same successful name-absence receipt before restart, failed probes
remain fail-closed, polling uses a host-bound sleep, and final readiness
is still required before success publication. Onboarding bounds
lifecycle polling and final readiness with one handoff deadline.
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## DGX Station Hardware Evidence

- [ ] Tested on DGX Station
- Tested commit: Not applicable; no
`scripts/prepare-dgx-station-host.sh` change.
- 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:
- Commit under review `0e1cf95d699bd81fd29e747c9f51d9536fd11493` is a
signed/DCO follow-up to reconciliation
`053d704d46ba2d0ea4b7159a80b6cbaa802d7ff3`, whose ordered parents are
[`aa533f9923bec620b49a9cebe51b81297e533910`,
`465d7112f321d9946c5b130d87ce543de3adf38e`]. The original 11 lifecycle,
recovery, and documentation blobs are byte-identical to the reviewed
first-parent candidate. The exact net against current base is 12 files,
+489/-43; the twelfth file is the fixture-only eight-for-eight
replacement in `test/onboard-messaging.test.ts`.
- On exact reconciliation `053d704d46ba2d0ea4b7159a80b6cbaa802d7ff3`,
the focused #9770 messaging recreate case reached the new fail-closed
boundary but could not proceed because its embedded runner returned a
blank successful sandbox list. The same focused case passed 1/1 on exact
current main `465d7112f321d9946c5b130d87ce543de3adf38e`, which
established that this was candidate-composition fixture debt. After the
fixture correction, `npm exec -- vitest run --project integration
test/onboard-messaging.test.ts -t "publishes attached OpenShell provider
state before a messaging recreate starts"` passed 1/1, and `npm exec --
vitest run --project integration test/onboard-messaging.test.ts` passed
15/15 on commit under review `0e1cf95d699bd81fd29e747c9f51d9536fd11493`.
- The exact lifecycle helper/finalizer suites passed 43/43 and the
current-main created-sandbox finalization suite passed 14/14 on commit
under review `0e1cf95d699bd81fd29e747c9f51d9536fd11493`.
- Fail-first commit `e9f35928c9fb0f6058525d9190247f9f31ea92d5` added the
ordering regression. The existing implementation passed 15 tests and
failed the new test because it restarted the replacement without a
lifecycle-release receipt.
- `npm exec -- vitest run --project cli` with the 17 Docker GPU patch,
lifecycle, and supervisor test files passed 202/202 on behavior commit
`66436ff58990cc47fdbf44aa876b1629b9b4d692`.
- Managed-image run `32460178030` at prior commit
`7717276800f12e779b943151ed26fb689595c2ae` exposed the next state in the
same lifecycle: both OpenClaw discovery passes reached a running
replacement but OpenShell reported the exact sandbox in `Error`. The
revised test failed 1/17 because the waiter did not accept that
controlled stopped-replacement phase; commit
`61af3e0a668ae66183b3ecd2b9c6a55d0e918c69` passed 18/18 after the
correction and negative coverage for `Failed`.
- The exact-`cd5ba235` implementation passed 41 prior tests and failed
both new lifecycle assertions: it accepted the selected sandbox's
`Error` row and restarted before the successful name-absence receipt.
The initial corrected commit then failed the composed recovery
diagnostic test because it reported a Docker start failure when restart
was not attempted. First parent
`1f7958ba87b6852d9b6dd910221e15d3699e5fe6` passed the corrected focused
helper and finalizer suite, 43/43, plus the eight-case no-forward
recovery table; those exact tested blobs are unchanged in the commit
under review.
- `npm exec -- vitest run --project cli
src/lib/onboard/docker-gpu-*.test.ts
src/lib/actions/sandbox/supervisor-relaunch.test.ts` passed 354/354 on
first parent `1f7958ba87b6852d9b6dd910221e15d3699e5fe6`; those exact
tested blobs are unchanged in the commit under review.
- `npm exec -- vitest run --project integration
test/process-recovery-supervisor-relaunch.test.ts
test/brev-launchable-e2e.test.ts test/vitest-watch-triggers.test.ts`
passed 132/132 on first parent
`1f7958ba87b6852d9b6dd910221e15d3699e5fe6`; 29 tests cover recovery and
103 cover exact-base Launchable diagnostics composition, and those
tested blobs are unchanged in the commit under review.
- Composition with merged #9792 passed 19/19 isolated rebuild-lifecycle
tests, 81/81 policy/create-intent tests, and 45/45 MCP E2E-support tests
on reconciliation commit `5b1af40cf76446073be5a9d8b8ff8eb9f92908b8`.
- Exact-candidate [managed-image run
`32501429492`](https://github.com/NVIDIA/NemoClaw/actions/runs/32501429492)
passed at `4d45294b47342cab74ed862296928065363803a5`, including
all-agent activation and both OpenClaw trusted-private MCP discovery
passes after #9792 merged.
- Focused [manual PR E2E run
`32504364196`](https://github.com/NVIDIA/NemoClaw/actions/runs/32504364196),
attempt 1, passed the exact [`rebuild-openclaw` job
`96841526032`](https://github.com/NVIDIA/NemoClaw/actions/runs/32504364196/job/96841526032).
Immutable receipt `e2e-dispatch-32504364196-1` binds PR #9877, candidate
`4d45294b47342cab74ed862296928065363803a5`, base and trusted workflow
`c6dbeae8fc44ef8b0fca9813571bc4240c3a682a`, and selector
`jobs=rebuild-openclaw`; unrelated targets and staging, Jetson, and DGX
selectors were disabled.
- Composition against base `f7ed928a8d94b9854ce243b7d94928a4969883c1` on
prior PR commit `cd5ba23570a623d538b1ca0065e3278f7f592fe2` passed
211/211 inference, Hermes Portable, and Podman probe tests plus 38/38
Portable E2E-support tests. The exact-main `post-merge-docs`
safe-integer case exceeded its fixed 15-second limit both in the 61-test
composition run and alone on this macOS host; that test and its
implementation are inherited unchanged from the base and do not enter
the lifecycle path.
- `npm exec -- vitest run --project cli
src/lib/onboard/docker-driver-gateway-service-homebrew.test.ts` passed
9/9 on prior exact reconciliation
`1f7958ba87b6852d9b6dd910221e15d3699e5fe6`. `npm exec -- vitest run
--project integration test/dependency-pins-check.test.ts
test/installer-homebrew-formula-reuse-trust.test.ts` passed 12/12. These
tests cover #9882's separate Homebrew formula pin and trust checks.
- `npm exec -- vitest run --project integration
test/installer-hash-check.test.ts` passed 84/84 on retained
reconciliation `aa533f9923bec620b49a9cebe51b81297e533910`, and
host-bound `npm run check:installer-hash` accepted every pinned
OpenShell v0.0.106 release asset. These tests cover #9777's separate
installer-template trust digest.
- `npm run validate:pr` passed for commit under review
`0e1cf95d699bd81fd29e747c9f51d9536fd11493`, including the CLI typecheck,
source-shape check, repository checks, 32-test growth guardrail, and
`git diff --check`. `npm run docs` passed on retained first parent
`1f7958ba87b6852d9b6dd910221e15d3699e5fe6`; Fern reported zero errors
and two warnings, and the candidate documentation blob is unchanged in
the commit under review. Earlier behavior commit
`66436ff58990cc47fdbf44aa876b1629b9b4d692` also passed `npm run
build:cli` and `npm run docs`.
- Commit `9565fd2ace214ef16b428478925e8416f31787f2` addresses the
affirmative-release and shared-deadline findings. Commit
`5e700a8ec0dda79f1c29302cd9f1e1b4f33e8fbb` addresses the exact-9565
host-bound sleep finding and its PR Review Advisor finding PRA-1. Commit
`5b1af40cf76446073be5a9d8b8ff8eb9f92908b8` addresses the two exact-5e
CodeRabbit test-evidence findings. Commit
`7254137464264c114b3928e7c164d98ffe295de1`, preserved byte-for-byte in
the commit under review, addresses exact-`cd5ba235` Advisor finding
PRA-1 by rejecting every row that still carries the selected sandbox
name and reporting that denial without claiming Docker start failed.
- [ ] 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. This
change updates one onboarding lifecycle boundary and its focused tests;
it does not change a broad runtime or test harness.
- [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) — `npm
run docs` passed with zero errors; Fern reported two 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)

### Source regression

- Automatic Main run:
https://github.com/NVIDIA/NemoClaw/actions/runs/32450387278
- Failed target job:
https://github.com/NVIDIA/NemoClaw/actions/runs/32450387278/job/96679136735
- Tested main commit: `b29e37613301c26cdb401b93feecc9192e430355`
- The replacement container was running and healthy, but OpenShell kept
`e2e-rebuild-oc` in `Deleting` until the 18-minute final-handoff wait
failed. Cleanup passed.
- Automatic Main run
https://github.com/NVIDIA/NemoClaw/actions/runs/32460591192 at exact
base commit `fac4e6d6783e8909aabf4a9d94f5fa809fea3ec1` reproduced the
same onboarding finalizer before Discord pairing: job
https://github.com/NVIDIA/NemoClaw/actions/runs/32460591192/job/96713099795
reported a healthy replacement with the exact sandbox still in
`Deleting`, then the same final-handoff failure.
- Exact-candidate managed-image run
https://github.com/NVIDIA/NemoClaw/actions/runs/32460178030 at prior
commit `7717276800f12e779b943151ed26fb689595c2ae` reached the controlled
stopped-replacement state in both OpenClaw discovery passes: OpenShell
reported the exact sandbox in `Error` while the replacement container
remained running. That evidence established the bounded lifecycle wait,
but the exact-`cd5ba235` Advisor review found that a name-and-phase row
cannot identify which container owns that lifecycle. Commit under review
`0e1cf95d699bd81fd29e747c9f51d9536fd11493` now requires the selected
name to be absent. #9792 merged as
`ebc600164bc08f4fb62c8078b2e0139a582b5486`; exact local rebuild,
policy/create-intent, and MCP-support composition is green.

The exact `rebuild-openclaw` target passed on reviewed commit
`4d45294b47342cab74ed862296928065363803a5` in focused run `32504364196`.
Commit under review `0e1cf95d699bd81fd29e747c9f51d9536fd11493` retains
the lifecycle-release correction and adds current-main fixture
compatibility, so exact-target E2E remains pending for that commit.

---
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 GPU sandbox handoff reliability by confirming release of the
previous lifecycle record before restarting its replacement.
* Added bounded lifecycle checks that handle command failures,
incomplete results, and unrelated lifecycle states.
* Prevented replacement restarts and final handoff when lifecycle
release cannot be confirmed.
* Preserved the overall handoff deadline during lifecycle and supervisor
reconnection checks.

* **Documentation**
* Clarified GPU compatibility-recreation behavior during sandbox
replacement.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

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

Labels

area: install Install, setup, prerequisites, or uninstall flow area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow bug-fix PR fixes a bug or regression

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants