fix(onboard): persist managed OpenClaw agent identity - #9370
Conversation
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
|
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 (1)
Included review availability: Your plan includes up to 12 reviews per rolling hour; 5 remain after this review. 📝 WalkthroughWalkthroughManaged-image sandbox registration now validates receipt agent identity and repository digest before registry mutation. Validated managed agents are persisted in registry entries. Legacy custom-image entries retain ChangesManaged sandbox identity
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: 🟡 Moderate · up to The change persists the managed OpenClaw agent identity and rejects receipt mismatches before registry writes. Targeted tests pass, but the required review or waiver for the sensitive onboarding path is not recorded, so the PR should not merge until that gate is completed or explicitly accepted. Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
PR Review Advisor — No blocking findings reportedAdvisor assessment: No blocking advisor findings reported Model lanes
3 terminology differences from the second opinionAdvisory only. These are normalized differences from the primary terminology receipt.
2 additional E2E selections from the second opinionAdvisory only. The primary lane did not select these E2E jobs or targets.
Second-opinion terminology and E2E selections are advisory. Live E2E does not run automatically for pull requests. 2 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 for the commit under review. Recommended E2E: Manual-only E2E: 1 optional E2E recommendation
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>
<!-- markdownlint-disable MD041 --> ## Summary The managed startup profile validator rejected hydrated messaging package pins and credential placeholder lines before sandbox startup. This change accepts only the two schema-owned forms while continuing to reject raw credentials, malformed assignments, mismatched keys, wrong paths, and wrong types. ## Related Issue Fixes #9355 ## Changes - Accept a boolean `pin` only at `messaging.plan.buildSteps[*].value.pin`. - Accept a single canonical environment assignment only at `messaging.plan.agentRender[*].lines[*]` when its approved credential placeholder key matches the left-hand environment key. - Add focused positive and negative regression coverage for both accepted forms and the nearby rejection cases. - Close the detection gap where the generic credential-shape scanner had tests for standalone placeholders and raw secrets, but not for the hydrated messaging plan shapes that own these values. ## Type of Change - [x] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates <!-- Check one tests line. Check other lines when applicable. Add every requested justification or approval reference. --> - [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: Maintainer Aaron Erickson authorized admin merge on 2026-08-17 after exact-head CI, CodeRabbit, all feedback, and regression evidence were reviewed. CodeRabbit reports minimal merge risk and no actionable comments; the exact-head advisor recommends `merge_as_is` with no canonical findings. - [x] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: Maintainer Aaron Erickson accepted `CI / Pull Request / cli-test-shards (6)` and its `cli-tests`/`checks` aggregates. The unchanged current-main test references the renamed `Authorize Launchable image publication` step; PR #9369 corrects that one-line contract, and merged PR #9370 records the same accepted non-success. The failure does not overlap this PR's files or behavior. ## DGX Station Hardware Evidence <!-- Required only when scripts/prepare-dgx-station-host.sh changes. Maintainers must review the linked evidence before approving or merging. This is human-reviewed evidence, not authenticated hardware provenance. Exceptional bypasses use existing repository governance and must be documented on the PR. --> - [ ] Tested on DGX Station - Tested commit: - Station profile/scenario: - Result: - Supporting evidence: ## Verification <!-- Check each applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [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 — `npx vitest run --project cli src/lib/onboard/managed-startup-profile.test.ts` (120 passed) - [ ] 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) Exact-head qualification: [unfiltered PR E2E run 32080556047](https://github.com/NVIDIA/NemoClaw/actions/runs/32080556047) tested `512a2fc0942516fb2533252fe2bedc931992444c`. The current-main `messaging-providers` issue gate passed with every phase green, and protected all-agent GPU/local-inference/rollback/cleanup qualification passed. Eight unrelated non-successes were classified: six old-head OpenClaw ownership-handoff/cascade failures fixed on current `main` by #9370, one GPU runner driver/library mismatch that failed closed, and one Deep Agents evidence-publication failure after its behavior phases passed. The four additional #9355 targets live only in the still-unmerged #9323 matrix and must rerun there after #9323 consumes this prerequisite. --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> 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 support for credential placeholders in messaging startup configurations. * Added support for boolean package-install pins. * Valid credential references and correctly placed package pins are now accepted. * **Bug Fixes** * Improved validation of credential placeholders and package pins. * Continued rejecting raw credentials, malformed or mismatched assignments, misplaced pins, invalid pin types, and unsupported placeholder locations. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
<!-- markdownlint-disable MD041 --> ## Summary Add the canonical dated changelog entry required before planning the v0.0.110 release. The entry summarizes user-facing changes merged since v0.0.109 and links each change to its published documentation route and source PR. ## Changes - Add `docs/changelog/2026-08-17.mdx` with the exact `## v0.0.110` release heading. - Cover managed local inference, endpoint validation, onboarding and recovery, explicit experimental Portable OpenClaw, messaging and policy cleanup, backup and security hardening, and release qualification. - Preserve the documentation skip list and the current supported-agent matrix; test-only refactors, dormant activation work, and Pi-only changes are intentionally excluded. ### Source-to-doc mapping - #8711 -> `docs/changelog/2026-08-17.mdx`: Add the Muse Glimmer llama.cpp profile. - #9099 -> `docs/changelog/2026-08-17.mdx`: Update the Muse Glimmer vLLM runtime. - #9319 -> `docs/changelog/2026-08-17.mdx`: Select the provider required by an explicit serving profile. - #9311 -> `docs/changelog/2026-08-17.mdx`: Report probe-image pull failures separately. - #9345 -> `docs/changelog/2026-08-17.mdx`: Reuse mirrored Windows Ollama. - #9284 -> `docs/changelog/2026-08-17.mdx`: Complete the required Ollama upgrade. - #9320 -> `docs/changelog/2026-08-17.mdx`: Reject unsafe custom endpoint URLs before mutation. - #9119 -> `docs/changelog/2026-08-17.mdx`: Reject unsupported custom endpoint URL components. - #9236 -> `docs/changelog/2026-08-17.mdx`: Require native Anthropic tool-use evidence. - #9347 -> `docs/changelog/2026-08-17.mdx`: Distinguish Gemini runtime 404 diagnostics. - #9307 -> `docs/changelog/2026-08-17.mdx`: Preserve the recorded API family when only the model drifts. - #9233 -> `docs/changelog/2026-08-17.mdx`: Fail incomplete Hermes route synchronization. - #9185 -> `docs/changelog/2026-08-17.mdx`: Serialize Model Router lifecycle work across gateways. - #9112 -> `docs/changelog/2026-08-17.mdx`: Stop Model Router after the last routed sandbox is destroyed. - #9229 -> `docs/changelog/2026-08-17.mdx`: Verify fresh sandbox execution readiness. - #9299 -> `docs/changelog/2026-08-17.mdx`: Verify a separate agent API host forward before reporting ready. - #9318 -> `docs/changelog/2026-08-17.mdx`: Honor explicit sandbox recreation. - #9325 -> `docs/changelog/2026-08-17.mdx`: Measure readiness reuse windows from collection completion. - #9352 -> `docs/changelog/2026-08-17.mdx`: Guide users away from the deprecated global start command. - #9370 -> `docs/changelog/2026-08-17.mdx`: Persist managed OpenClaw agent identity. - #9366 -> `docs/changelog/2026-08-17.mdx`: Pass messaging dependencies during reused onboarding. - #9321 -> `docs/changelog/2026-08-17.mdx`: Detect proxied connect sessions. - #9285 -> `docs/changelog/2026-08-17.mdx`: Run probe-only recovery when absent authority cannot be created. - #9282 -> `docs/changelog/2026-08-17.mdx`: Complete probe-only recovery without platform evidence. - #8920 -> `docs/changelog/2026-08-17.mdx`: Preserve legacy gateway identity. - #9198 -> `docs/changelog/2026-08-17.mdx`: Report sandbox config-read failures. - #9201 -> `docs/changelog/2026-08-17.mdx`: Remove only the exact Docker orphan on destroy. - #9176 -> `docs/changelog/2026-08-17.mdx`: Use rootless Podman for Portable lifecycle operations. - #9197 -> `docs/changelog/2026-08-17.mdx`: Preflight Portable CPU delegation. - #9289 -> `docs/changelog/2026-08-17.mdx`: Narrow Portable policy defaults. - #9270 -> `docs/changelog/2026-08-17.mdx`: Preserve Portable model intent. - #9339 -> `docs/changelog/2026-08-17.mdx`: Reconcile timed-out Portable stop state. - #9209 -> `docs/changelog/2026-08-17.mdx`: Clean receipt-owned Portable Podman resources. - #9186 -> `docs/changelog/2026-08-17.mdx`: Separate Podman activation readiness. - #9376 -> `docs/changelog/2026-08-17.mdx`: Settle Portable OpenClaw pairing before readiness. - #9296 -> `docs/changelog/2026-08-17.mdx`: Retire messaging channel presets the host no longer configures. - #9327 -> `docs/changelog/2026-08-17.mdx`: Drop retired channels from reused messaging selections. - #9306 -> `docs/changelog/2026-08-17.mdx`: Remove gateway-enforced presets without a local record. - #9248 -> `docs/changelog/2026-08-17.mdx`: Activate Google Chat pairing approval. - #9374 -> `docs/changelog/2026-08-17.mdx`: Accept schema-owned messaging plan fields. - #9317 -> `docs/changelog/2026-08-17.mdx`: Accept safe hard-linked package files during backup. - #9288 -> `docs/changelog/2026-08-17.mdx`: Remove managed CLI shims with destroyed user data. - #9239 -> `docs/changelog/2026-08-17.mdx`: Read voice credentials from fixed descriptors. - #9269 -> `docs/changelog/2026-08-17.mdx`: Accept bounded native OpenClaw device modes. - #9371 -> `docs/changelog/2026-08-17.mdx`: Isolate OpenClaw startup-guard output. - #9351 -> `docs/changelog/2026-08-17.mdx`: Restore staging Launchable validation. - #9350 -> `docs/changelog/2026-08-17.mdx`: Retry transient collaborator-permission reads. - #9353 -> `docs/changelog/2026-08-17.mdx`: Retry transient exact-artifact downloads. - #9226 -> `docs/changelog/2026-08-17.mdx`: Add bounded Brev readiness diagnostics. - #9237 -> `docs/changelog/2026-08-17.mdx`: Report same-commit E2E reliability. - #9232 -> `docs/changelog/2026-08-17.mdx`: Execute native-runtime qualification. - #9275 -> `docs/changelog/2026-08-17.mdx`: Define E2E selection and retry guidance. - #9234 -> `docs/changelog/2026-08-17.mdx`: Move documentation review after merge. - #9365 -> `docs/changelog/2026-08-17.mdx`: Mount documentation reviewer inputs before startup. ## 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 the dated release-entry contract. - [ ] 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: - [ ] 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; documentation-only 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 — `npx vitest run test/changelog-docs.test.ts` (7 passed) - [x] 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 one prose-only changelog page; `npm run docs` passed the repository's strict documentation gate. - [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) — passed with 0 errors and the 2 existing Fern warnings. - [x] Doc pages follow the [style guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md) (doc changes only) - [ ] New doc pages include SPDX header and frontmatter (new pages only) — the SPDX header is present; dated changelog pages intentionally do not use frontmatter. --- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added release notes for v0.0.110. * Documented experimental managed llama.cpp and Portable OpenClaw profiles. * Covered inference validation, onboarding and recovery improvements, rootless lifecycle handling, messaging and policy updates, backups, credential handling, filesystem protections, and release qualification updates. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
<!-- markdownlint-disable MD041 --> ## Summary <!-- 1-3 plain sentences: what changes and why. Describe before-and-after behavior when it applies. Follow the NemoClaw Writing Guide: https://github.com/NVIDIA/NemoClaw/blob/main/WRITING.md. Do not add unrelated prose cleanup. --> Managed OpenClaw sandbox registration now stores `agent: "openclaw"` when a validated managed-image receipt owns the sandbox. Legacy and custom-image registrations keep `agent: null`. A mismatch between the receipt and selected agent fails before the registry write. ## Related Issue <!-- Fixes #NNN or Closes #NNN. Remove this section if none. --> Fixes #9356 ## Changes <!-- List concrete changes. If this adds an abstraction, configuration, fallback, migration, or compatibility path, name its current requirement and consumer, explain why a direct change is insufficient, and identify the test that protects it. --> - `buildCreatedSandboxRegistryEntry()` now checks the selected agent against the validated managed-image receipt and persists the explicit agent identity. `readManagedWorkloadAuthority()` consumes this field during rebuild and restore operations. - `sandbox-registration.test.ts` covers managed OpenClaw authority, the legacy custom-image convention, and rejection before the registry writer runs. ## Type of Change - [x] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates <!-- Check one tests line. Check other lines when applicable. Add every requested justification or approval reference. --> - [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: Maintainer Aaron Erickson explicitly accepted the reviewed sensitive-path change for admin merge on 2026-08-17 after CodeRabbit and all other feedback were clear; CodeRabbit reported no actionable comments and the exact-head PR Review Advisor reported zero findings. - [x] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: Maintainer Aaron Erickson accepted the `CI / Pull Request / checks` non-success on 2026-08-17 because shard 6 is the unchanged Launchable authorization-step contract on `main` (follow-up #9368/#9369), and accepted `Images / Managed Images / PR exact all-agent managed runtime activation` because its exact-head-only build hits the unchanged two-argument `sandbox-messaging.ts` call already fixed on current `main` by #9366. Neither failure overlaps this PR’s changed files or behavior. ## DGX Station Hardware Evidence <!-- Required only when scripts/prepare-dgx-station-host.sh changes. Maintainers must review the linked evidence before approving or merging. This is human-reviewed evidence, not authenticated hardware provenance. Exceptional bypasses use existing repository governance and must be documented on the PR. --> - [ ] Tested on DGX Station - Tested commit: - Station profile/scenario: - Result: - Supporting evidence: ## Verification <!-- Check each applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [x] 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 - [x] Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: `vitest run --project cli src/lib/onboard/sandbox-registration.test.ts --testTimeout 30000` — 18 tests passed; `vitest run --project integration test/onboard-managed-image-buildless-e2e.test.ts --testTimeout 30000` — 1 test passed. - [ ] 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) The `pre-commit` and `commit-msg` hooks passed for both commits. At base SHA `cb018f0224`, the `pre-push` CLI type check was blocked by unchanged errors in `sandbox-messaging.ts`, `sandbox-messaging.test.ts`, and `portable-uninstall-retirement.test.ts`. PR #9366 fixed the shared `sandbox-messaging.ts` root cause on `main`; current-base CI at `54cb2a414f` passed `build-typecheck` and `installer-integration`. CLI shard 6 remains blocked by an unchanged E2E test that references the removed `Authorize Launchable image publication` workflow step; PRs #9368 and #9369 update that contract, so this branch does not absorb the unrelated E2E change. --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: Aaron Erickson <aerickson@nvidia.com> --------- Signed-off-by: Aaron Erickson <aerickson@nvidia.com> (cherry picked from commit 9f2a0f5)
<!-- markdownlint-disable MD041 --> ## Summary The managed startup profile validator rejected hydrated messaging package pins and credential placeholder lines before sandbox startup. This change accepts only the two schema-owned forms while continuing to reject raw credentials, malformed assignments, mismatched keys, wrong paths, and wrong types. ## Related Issue Fixes #9355 ## Changes - Accept a boolean `pin` only at `messaging.plan.buildSteps[*].value.pin`. - Accept a single canonical environment assignment only at `messaging.plan.agentRender[*].lines[*]` when its approved credential placeholder key matches the left-hand environment key. - Add focused positive and negative regression coverage for both accepted forms and the nearby rejection cases. - Close the detection gap where the generic credential-shape scanner had tests for standalone placeholders and raw secrets, but not for the hydrated messaging plan shapes that own these values. ## Type of Change - [x] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [ ] Doc only (includes code sample changes) ## Quality Gates <!-- Check one tests line. Check other lines when applicable. Add every requested justification or approval reference. --> - [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: Maintainer Aaron Erickson authorized admin merge on 2026-08-17 after exact-head CI, CodeRabbit, all feedback, and regression evidence were reviewed. CodeRabbit reports minimal merge risk and no actionable comments; the exact-head advisor recommends `merge_as_is` with no canonical findings. - [x] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: Maintainer Aaron Erickson accepted `CI / Pull Request / cli-test-shards (6)` and its `cli-tests`/`checks` aggregates. The unchanged current-main test references the renamed `Authorize Launchable image publication` step; PR #9369 corrects that one-line contract, and merged PR #9370 records the same accepted non-success. The failure does not overlap this PR's files or behavior. ## DGX Station Hardware Evidence <!-- Required only when scripts/prepare-dgx-station-host.sh changes. Maintainers must review the linked evidence before approving or merging. This is human-reviewed evidence, not authenticated hardware provenance. Exceptional bypasses use existing repository governance and must be documented on the PR. --> - [ ] Tested on DGX Station - Tested commit: - Station profile/scenario: - Result: - Supporting evidence: ## Verification <!-- Check each applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [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 — `npx vitest run --project cli src/lib/onboard/managed-startup-profile.test.ts` (120 passed) - [ ] 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) Exact-head qualification: [unfiltered PR E2E run 32080556047](https://github.com/NVIDIA/NemoClaw/actions/runs/32080556047) tested `512a2fc0942516fb2533252fe2bedc931992444c`. The current-main `messaging-providers` issue gate passed with every phase green, and protected all-agent GPU/local-inference/rollback/cleanup qualification passed. Eight unrelated non-successes were classified: six old-head OpenClaw ownership-handoff/cascade failures fixed on current `main` by #9370, one GPU runner driver/library mismatch that failed closed, and one Deep Agents evidence-publication failure after its behavior phases passed. The four additional #9355 targets live only in the still-unmerged #9323 matrix and must rerun there after #9323 consumes this prerequisite. --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> 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 support for credential placeholders in messaging startup configurations. * Added support for boolean package-install pins. * Valid credential references and correctly placed package pins are now accepted. * **Bug Fixes** * Improved validation of credential placeholders and package pins. * Continued rejecting raw credentials, malformed or mismatched assignments, misplaced pins, invalid pin types, and unsupported placeholder locations. <!-- end of auto-generated comment: release notes by coderabbit.ai --> (cherry picked from commit 14cde08)
Summary
Managed OpenClaw sandbox registration now stores
agent: "openclaw"when a validated managed-image receipt owns the sandbox. Legacy and custom-image registrations keepagent: null. A mismatch between the receipt and selected agent fails before the registry write.Related Issue
Fixes #9356
Changes
buildCreatedSandboxRegistryEntry()now checks the selected agent against the validated managed-image receipt and persists the explicit agent identity.readManagedWorkloadAuthority()consumes this field during rebuild and restore operations.sandbox-registration.test.tscovers managed OpenClaw authority, the legacy custom-image convention, and rejection before the registry writer runs.Type of Change
Quality Gates
CI / Pull Request / checksnon-success on 2026-08-17 because shard 6 is the unchanged Launchable authorization-step contract onmain(follow-up ci(e2e): add one-off launchable validation #9368/ci(e2e): authorize NVIDIA-owned PR revisions #9369), and acceptedImages / Managed Images / PR exact all-agent managed runtime activationbecause its exact-head-only build hits the unchanged two-argumentsandbox-messaging.tscall already fixed on currentmainby fix(onboard): pass messaging dependencies during reuse #9366. Neither failure overlaps this PR’s changed files or behavior.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 unavailablevitest run --project cli src/lib/onboard/sandbox-registration.test.ts --testTimeout 30000— 18 tests passed;vitest run --project integration test/onboard-managed-image-buildless-e2e.test.ts --testTimeout 30000— 1 test passed.npm testfor broad runtime/test-harness changes;npm run checkfor repo-wide validation/coverage changes — command/result:npm run docsbuilds without warnings (doc changes only)The
pre-commitandcommit-msghooks passed for both commits. At base SHAcb018f0224, thepre-pushCLI type check was blocked by unchanged errors insandbox-messaging.ts,sandbox-messaging.test.ts, andportable-uninstall-retirement.test.ts. PR #9366 fixed the sharedsandbox-messaging.tsroot cause onmain; current-base CI at54cb2a414fpassedbuild-typecheckandinstaller-integration. CLI shard 6 remains blocked by an unchanged E2E test that references the removedAuthorize Launchable image publicationworkflow step; PRs #9368 and #9369 update that contract, so this branch does not absorb the unrelated E2E change.Signed-off-by: Aaron Erickson aerickson@nvidia.com