Skip to content

fix(onboard): harden managed bootstrap ownership and recovery - #8225

Merged
ericksoa merged 4 commits into
mainfrom
feat/managed-bootstrap-durable-ownership-batch
Aug 4, 2026
Merged

fix(onboard): harden managed bootstrap ownership and recovery#8225
ericksoa merged 4 commits into
mainfrom
feat/managed-bootstrap-durable-ownership-batch

Conversation

@ericksoa

@ericksoa ericksoa commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Summary

Hardens the dormant managed-bootstrap path so create outcomes are explicit, shared-state rollback remains transaction-owned, and recovery receipts replay durably across runtime providers. This consolidates the additive source work from #8077, #8078, #8080, and the already-incorporated behavior from #8083 without registering or activating a managed runtime.

Related Issue

Refs #7744

Changes

  • Return terminal managed-bootstrap outcomes and preserve explicit rollback evidence through Docker sandbox creation.
  • Keep application environment and shared-state rollback authority inside the managed-startup transaction, including environment-neutral status and rollback probes.
  • Move receipt comparison into the provider-neutral adapter, validate pre-journal snapshot identity, and retain exact atomic leftovers for durable replay.
  • Add focused lifecycle, transaction, compatibility, replay, and source-shape coverage while keeping the candidate provider inert.
  • Preserve the donor heads under backup/podman-stack/pr8077-source-83e7fe53, backup/podman-stack/pr8078-source-9d4dc59c, backup/podman-stack/pr8080-source-9096a968, and backup/podman-stack/pr8083-source-a2ae901b.

The adapter contract is currently required by managed-bootstrap journal and runtime construction consumers. A Docker-local change is insufficient because later Podman and MXC-style providers must compare the same durable receipts without central runtime switches. The managed-bootstrap adapter, runtime, journal, shared-state, and source-shape tests protect that 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

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification: No user-visible provider is registered or activated in this additive slice; the internal managed-bootstrap README documents the architecture change.
  • 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-authored implementation scope under [Epic] Support native Podman with buildless managed onboarding #7744; the provider remains inert and repository advisors must still clear the exact head before merge.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: docs-updated
  • Evidence: Updated src/lib/onboard/managed-bootstrap/README.md. The managed-bootstrap provider remains unregistered and unsupported in production, so no user-facing docs/ change is required.
  • 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 — command/result or justification: Targeted Vitest run covering all 12 changed test files passed 175/175 tests at b3973cebb50d.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result: Local npm test was attempted and encountered widespread unrelated five-second timeouts across existing installer, package-contract, rebuild, inference, and policy tests; authoritative sharded CI is pending.
  • 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: Aaron Erickson aerickson@nvidia.com

Summary by CodeRabbit

  • Bug Fixes

    • Commit and rollback failures now surface reliably instead of being silently ignored.
    • Improved recovery when runtime finalization or supervisor reconnection fails.
    • Prevented mismatched container images from advancing through setup.
    • Strengthened rollback protection after a commit becomes durable.
  • Compatibility

    • Added support for valid legacy transaction manifests while rejecting malformed or incomplete data.
  • Reliability

    • Repeated commit or rollback requests now produce consistent results, including after acknowledgement failures.

Reconstruct the net #8077 terminal-outcome slice on current main.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
(cherry picked from commit ce6f313e9f7705aa9374c0184710ca995dafdfa8)
Reconstruct the net #8078 shared-state authority slice on current main.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
(cherry picked from commit 31236f767aa79c9e110be55bc1bf56b5396b227a)
Reconstruct the net #8080 journal-compatibility slice on current main.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
(cherry picked from commit c52370db1119ec1b8f3365a0ce4c22beebdd28e4)
@coderabbitai

coderabbitai Bot commented Aug 4, 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: ccdb2fc4-de0d-446c-9e64-6bcb541fe0fe

📥 Commits

Reviewing files that changed from the base of the PR and between 08c0d3b and b3973ce.

📒 Files selected for processing (4)
  • src/lib/onboard/docker-gpu-sandbox-create-lifecycle.test.ts
  • src/lib/onboard/docker-gpu-sandbox-create.ts
  • src/lib/onboard/managed-bootstrap/docker-shared-state-rollback-authority.test.ts
  • src/lib/onboard/managed-bootstrap/docker-shared-state.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/lib/onboard/managed-bootstrap/docker-shared-state-rollback-authority.test.ts
  • src/lib/onboard/docker-gpu-sandbox-create-lifecycle.test.ts
  • src/lib/onboard/docker-gpu-sandbox-create.ts
  • src/lib/onboard/managed-bootstrap/docker-shared-state.ts

📝 Walkthrough

Walkthrough

Managed bootstrap now coordinates terminal commit and rollback outcomes, validates receipts and legacy manifests, strengthens Docker shared-state rollback authority, validates replacement images, and propagates sandbox commit failures.

Changes

Managed bootstrap lifecycle

Layer / File(s) Summary
Terminal finalization coordination
src/lib/onboard/managed-bootstrap/runtime-create.ts, src/lib/onboard/managed-bootstrap/docker-runtime.ts, src/lib/onboard/managed-bootstrap/*test.ts
The terminal finalizer claims one outcome, shares duplicate calls, rejects conflicting calls, and routes Docker lifecycle finalization through finalizeManagedBootstrapSequence.
Receipt comparison and journal validation
src/lib/onboard/managed-bootstrap/adapter.ts, src/lib/onboard/managed-bootstrap/docker.ts, src/lib/onboard/managed-bootstrap/docker-journal.ts, src/lib/onboard/managed-bootstrap/*test.ts
Shared canonical receipt comparators replace the Docker-specific comparator. Tests cover reordered receipts and malformed atomic journal entries.
Manifest compatibility and replacement validation
src/lib/onboard/managed-startup/shared-state-transaction.ts, src/lib/onboard/managed-startup-shared-state-transaction.test.ts, src/lib/onboard/managed-bootstrap/docker.ts, src/lib/onboard/managed-bootstrap/docker.test.ts
Schema-v1 manifests without bootstrapIdentity are accepted only on the null-identity path. Replacement preparation validates image repository and manifest digest.
Shared-state rollback authority
src/lib/onboard/managed-bootstrap/docker-shared-state.ts, src/lib/onboard/managed-bootstrap/docker-shared-state*.test.ts
Rollback probes transaction status, reuses preserved pending receipts, rejects durable commits, and removes containers only when no receipt authority exists.
Sandbox commit error propagation
src/lib/onboard/docker-gpu-local-inference.ts, src/lib/onboard/docker-gpu-sandbox-create.ts, src/lib/onboard/*test.ts
Commit methods now throw reported failures. Local inference performs rollback only for verification failures, not for commit failures.

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

Sequence Diagram(s)

sequenceDiagram
  participant DockerRuntime
  participant TerminalFinalizer
  participant FinalizeSequence
  participant SharedStateRollback
  DockerRuntime->>TerminalFinalizer: claim commit or rollback
  TerminalFinalizer->>FinalizeSequence: finalize claimed outcome
  FinalizeSequence->>SharedStateRollback: inspect status or restore state
  SharedStateRollback-->>FinalizeSequence: receipt result or failure
  FinalizeSequence-->>DockerRuntime: resolve or reject finalization
Loading

Possibly related PRs

Suggested labels: area: onboarding, area: security, bug-fix, platform: container

Suggested reviewers: cv

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 23.81% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main changes to managed-bootstrap ownership and recovery behavior.
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.
✨ 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 feat/managed-bootstrap-durable-ownership-batch

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

@github-code-quality

github-code-quality Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit b3973ce in the feat/managed-bootstr... branch remains at 96%, unchanged from commit efc3499 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit b3973ce in the feat/managed-bootstr... 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 feat/managed-bootstr... b3973ce +/-
src/lib/policy/...ne-exclusion.ts 96% 92% -4%
src/lib/onboard...trap/adapter.ts 69% 68% -1%
src/lib/onboard...-transaction.ts 80% 81% +1%
src/lib/onboard...shared-state.ts 73% 79% +6%
src/lib/domain/.../connect-env.ts 89% 97% +8%
src/lib/onboard...ndbox-create.ts 78% 87% +9%
src/lib/onboard...-create-plan.ts 75% 88% +13%
src/lib/onboard...ndbox-create.ts 33% 67% +34%
src/lib/onboard...cker-runtime.ts 2% 52% +50%
src/lib/onboard...ntime-create.ts 0% 100% +100%

Updated August 04, 2026 14:22 UTC

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

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

Inline comments:
In `@src/lib/onboard/docker-gpu-sandbox-create.ts`:
- Around line 383-391: Preserve terminal commit failures in commitAfterReady so
duplicate calls remain rejected: update the early-commit failure path in
src/lib/onboard/docker-gpu-sandbox-create.ts lines 383-391 and the
backup-removal failure path in lines 429-446 to retain failed state after
throwing, then extend
src/lib/onboard/docker-gpu-sandbox-create-lifecycle.test.ts lines 162-162 to
call commitAfterReady again after backup removal failure and assert rejection,
and lines 180-205 to do the same after early rollback.

In `@src/lib/onboard/managed-bootstrap/docker-shared-state.ts`:
- Around line 631-641: In
src/lib/onboard/managed-bootstrap/docker-shared-state.ts lines 631-641, capture
the boolean returned by rollbackManagedStartupSharedState() in both failure
branches and call removeFailedUnbackedContainer() only when that result is
false, while preserving the existing patchResult and
retainContainerAfterRollback checks. In
src/lib/onboard/managed-bootstrap/docker-shared-state-rollback-authority.test.ts
lines 159-249, add assertions that dockerRm is not called after pending-receipt
rollback and in the default non-retained failed-commit path.
🪄 Autofix

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: da664ccb-b7a8-4c88-ace1-0cf917ac9e59

📥 Commits

Reviewing files that changed from the base of the PR and between 3835080 and 08c0d3b.

📒 Files selected for processing (26)
  • src/lib/onboard/docker-gpu-local-inference.test.ts
  • src/lib/onboard/docker-gpu-local-inference.ts
  • src/lib/onboard/docker-gpu-sandbox-create-lifecycle.test.ts
  • src/lib/onboard/docker-gpu-sandbox-create.ts
  • src/lib/onboard/docker-startup-command-sandbox-create.test.ts
  • src/lib/onboard/managed-bootstrap/README.md
  • src/lib/onboard/managed-bootstrap/adapter.test.ts
  • src/lib/onboard/managed-bootstrap/adapter.ts
  • src/lib/onboard/managed-bootstrap/docker-journal.test.ts
  • src/lib/onboard/managed-bootstrap/docker-journal.ts
  • src/lib/onboard/managed-bootstrap/docker-runtime.test.ts
  • src/lib/onboard/managed-bootstrap/docker-runtime.ts
  • src/lib/onboard/managed-bootstrap/docker-shared-state-rollback-authority.test.ts
  • src/lib/onboard/managed-bootstrap/docker-shared-state.test.ts
  • src/lib/onboard/managed-bootstrap/docker-shared-state.ts
  • src/lib/onboard/managed-bootstrap/docker-test-fixture.ts
  • src/lib/onboard/managed-bootstrap/docker.test.ts
  • src/lib/onboard/managed-bootstrap/docker.ts
  • src/lib/onboard/managed-bootstrap/index.ts
  • src/lib/onboard/managed-bootstrap/managed-bootstrap-test-fixture.ts
  • src/lib/onboard/managed-bootstrap/runtime-create.test.ts
  • src/lib/onboard/managed-bootstrap/runtime-create.ts
  • src/lib/onboard/managed-startup-shared-state-transaction.test.ts
  • src/lib/onboard/managed-startup/shared-state-transaction.ts
  • src/lib/onboard/sandbox-create-launch.ts
  • test/runtime-provider-source-shape.test.ts
💤 Files with no reviewable changes (1)
  • src/lib/onboard/managed-bootstrap/docker-journal.ts

Comment thread src/lib/onboard/docker-gpu-sandbox-create.ts
Comment thread src/lib/onboard/managed-bootstrap/docker-shared-state.ts Outdated
@github-actions

github-actions Bot commented Aug 4, 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 · medium confidence · 0 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Model comparison: normalized findings match; normalized terminology decisions differ; normalized E2E selections differ; severity counts match.
6 terminology differences from the second opinion

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

  • identity-bound at src/lib/onboard/managed-bootstrap/README.md:111: selected only by the second-opinion lane as established.
  • canonical value at src/lib/onboard/managed-bootstrap/adapter.test.ts:363: selected only by the second-opinion lane as established.
  • legacy manifest at src/lib/onboard/managed-startup-shared-state-transaction.test.ts:306: selected only by the second-opinion lane as established.
  • terminal outcome at src/lib/onboard/managed-bootstrap/runtime-create.ts:101: selected only by the second-opinion lane as established.
  • terminal finalizer at src/lib/onboard/managed-bootstrap/runtime-create.test.ts:8: selected only by the second-opinion lane as define.
  • shared-state rollback authority at src/lib/onboard/managed-bootstrap/docker-shared-state-rollback-authority.test.ts:127: selected only by the second-opinion lane as define.
2 additional E2E selections from the second opinion

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

  • gpu-e2e: The completed second-opinion lane identified E2E coverage that the primary lane omitted.
  • hermes-gpu-startup: The completed second-opinion lane identified E2E coverage that the primary lane omitted.

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

2 semantic terminology decisions

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

  • justified — claimed outcome at src/lib/onboard/managed-bootstrap/README.md:90: Retain the term. The surrounding sentence states the contrasting opposite outcome and its effect.
  • define — legacy null-identity path at src/lib/onboard/managed-bootstrap/README.md:109: Define the term at first use as the schema-v1 compatibility path for a manifest without bootstrapIdentity.

E2E guidance

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

Recommended E2E: device-auth-health, inference-routing, issue-4462-scope-upgrade-approval, network-policy, onboard-repair, onboard-resume, openclaw-inference-switch, cloud-onboard

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: Aaron Erickson <aerickson@nvidia.com>
@wscurran wscurran added area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery bug-fix PR fixes a bug or regression labels Aug 4, 2026
@ericksoa
ericksoa merged commit d5a6248 into main Aug 4, 2026
107 of 111 checks passed
@ericksoa
ericksoa deleted the feat/managed-bootstrap-durable-ownership-batch branch August 4, 2026 15:12
ericksoa added a commit that referenced this pull request Aug 4, 2026
## Summary

Hardens managed-image publication evidence and adds the trusted
protected multi-architecture qualification lane while keeping it
fail-closed and inert. This is the consolidated B3-B batch stacked on
#8225; it does not add the activation marker, select the lane for
candidate changes, or advertise buildless support.

## Related Issue

Refs #7744

Depends on #8225.

## Changes

- Pass bounded reviewed Git pathspec families directly and keep
publication assertions semantic.
- Share the complete OpenClaw, Hermes, and DCode base-image contract
export through one fail-closed helper.
- Define the exact all-agent `linux/amd64` and `linux/arm64` protected
build, platform-digest, cohort, and evidence contracts.
- Add the trusted protected workflow graph and direct-start harness for
both architectures.
- Keep risk selection limited to the absent future
`ci/protected-managed-image-multiarch-activation-v1.json` marker, so
this candidate cannot select or execute its own newly introduced trusted
lane.
- Keep the dormant lane out of the release E2E denominator until its
exact candidate activation path exists, using a generic
workflow-declared activation contract rather than a lane-specific
release switch.
- Preserve source heads under
`backup/podman-stack/pr8065-source-2860766e`,
`backup/podman-stack/pr8065-public-head-eea54e92`,
`backup/podman-stack/pr8068-source-2060e9cc`,
`backup/podman-stack/pr8075-source-5976d9d0`, and
`backup/podman-stack/pr3-14b2a-source-c9a92ae7`.

The shared publication and protected-lane contracts are required by all
three managed-image consumers. Per-agent workflow copies or
candidate-authored dispatch would allow schema drift or weaken the
trusted-main boundary. The managed base-contract, publication workflow,
protected contract, risk-plan, direct-input, workflow-boundary,
release-evidence, and publication-support tests protect the shared seam.

## 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: Maintainer-authored
B3-B scope under #7744; exact-head advisors, CodeRabbit, CI, and
protected workflow review must still clear before merge.
- [ ] 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: Updated
`.agents/skills/nemoclaw-maintainer-cut-release-tag/SKILL.md` and
`.agents/skills/nemoclaw-maintainer-policies/references/release-train.md`.
Both now define that `RELEASE_E2E_ACTIVATION_PATH` admits an
explicit-only job and its matrix executions into the release denominator
only when the exact relative path exists at the candidate SHA. They
consistently direct maintainers not to dispatch or require evidence for
a dormant lane.
- Agent: Codex Desktop
<!-- docs-review-head-sha: b166aeb -->
<!-- docs-review-agents-blob-sha: 3dd7c24 -->

## 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 — command/result or justification:
Focused image, workflow, release, parity, and policy tests passed
172/172; the final release-policy subset passed 30/30 at `b166aebdd`.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — command/result: Authoritative sharded CI
is pending for the exact head.
- [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)
- [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)

---

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>


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

* **New Features**
* Added protected multi-architecture startup validation for managed
images on AMD64 and ARM64.
* Added verified image contracts, digest-pinned base images, and
agent-specific contract publication.
  * Added stricter managed base-image index and workflow validation.

* **Bug Fixes**
* Dormant release E2E jobs are excluded when activation markers are
missing.
* Strengthened release evidence, dispatch validation, and workflow
integrity checks.

* **Tests**
* Added coverage for image contracts, activation gating,
multi-architecture startup, and release preflight behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow area: sandbox OpenShell sandbox lifecycle, runtime, config, or recovery bug-fix PR fixes a bug or regression

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants