Commit d0fee06
committed
fix(onboard): accept schema-owned messaging plan fields (#9374)
<!-- 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)1 parent f0326fc commit d0fee06
2 files changed
Lines changed: 184 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
725 | 725 | | |
726 | 726 | | |
727 | 727 | | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
| 731 | + | |
| 732 | + | |
| 733 | + | |
| 734 | + | |
| 735 | + | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
| 744 | + | |
| 745 | + | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
| 778 | + | |
| 779 | + | |
| 780 | + | |
| 781 | + | |
| 782 | + | |
| 783 | + | |
| 784 | + | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
| 798 | + | |
| 799 | + | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
| 829 | + | |
| 830 | + | |
| 831 | + | |
| 832 | + | |
| 833 | + | |
| 834 | + | |
| 835 | + | |
| 836 | + | |
| 837 | + | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
728 | 841 | | |
729 | 842 | | |
730 | 843 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
| 62 | + | |
62 | 63 | | |
63 | 64 | | |
64 | 65 | | |
| |||
993 | 994 | | |
994 | 995 | | |
995 | 996 | | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
| 1016 | + | |
| 1017 | + | |
| 1018 | + | |
| 1019 | + | |
| 1020 | + | |
| 1021 | + | |
| 1022 | + | |
| 1023 | + | |
| 1024 | + | |
| 1025 | + | |
| 1026 | + | |
| 1027 | + | |
| 1028 | + | |
| 1029 | + | |
| 1030 | + | |
| 1031 | + | |
| 1032 | + | |
| 1033 | + | |
| 1034 | + | |
| 1035 | + | |
| 1036 | + | |
| 1037 | + | |
| 1038 | + | |
| 1039 | + | |
| 1040 | + | |
| 1041 | + | |
| 1042 | + | |
| 1043 | + | |
| 1044 | + | |
| 1045 | + | |
| 1046 | + | |
| 1047 | + | |
| 1048 | + | |
| 1049 | + | |
| 1050 | + | |
| 1051 | + | |
| 1052 | + | |
996 | 1053 | | |
997 | | - | |
| 1054 | + | |
998 | 1055 | | |
999 | 1056 | | |
1000 | | - | |
1001 | | - | |
| 1057 | + | |
| 1058 | + | |
| 1059 | + | |
| 1060 | + | |
| 1061 | + | |
1002 | 1062 | | |
1003 | 1063 | | |
1004 | 1064 | | |
| |||
1367 | 1427 | | |
1368 | 1428 | | |
1369 | 1429 | | |
1370 | | - | |
| 1430 | + | |
| 1431 | + | |
| 1432 | + | |
1371 | 1433 | | |
1372 | 1434 | | |
1373 | 1435 | | |
| |||
1450 | 1512 | | |
1451 | 1513 | | |
1452 | 1514 | | |
1453 | | - | |
| 1515 | + | |
| 1516 | + | |
| 1517 | + | |
| 1518 | + | |
| 1519 | + | |
1454 | 1520 | | |
1455 | 1521 | | |
1456 | 1522 | | |
| |||
0 commit comments