Commit 5a3a358
fix(e2e): bind Deep Agents Code onboarding to the published platform reference (#9392)
<!-- markdownlint-disable MD041 -->
The Deep Agents Code amd64 live job now selects the exact published
`linux/amd64` platform reference from the candidate-bound publication
contract instead of using the multi-platform index. After merge, the
producer will emit the same platform reference. Manual PR E2E passes the
contract-selected reference explicitly to initial onboarding and fresh
re-onboarding. Final evidence remains bound to the selected candidate,
the complete publication contract, the official repository, the
platform, and its exact digest.
Fixes #9386
- Root-cause key: `DCode final qualification / publication-to-onboarding
handoff / amd64 runner received the multi-platform index ref instead of
the published linux/amd64 manifest ref`
- Source runs:
- https://github.com/NVIDIA/NemoClaw/actions/runs/32076801912
- https://github.com/NVIDIA/NemoClaw/actions/runs/32081571309
- https://github.com/NVIDIA/NemoClaw/actions/runs/32089878527
- https://github.com/NVIDIA/NemoClaw/actions/runs/32091103413
- Failed jobs:
-
https://github.com/NVIDIA/NemoClaw/actions/runs/32076801912/job/95532157545
-
https://github.com/NVIDIA/NemoClaw/actions/runs/32081571309/job/95545647820
-
https://github.com/NVIDIA/NemoClaw/actions/runs/32089878527/job/95575261210
-
https://github.com/NVIDIA/NemoClaw/actions/runs/32091103413/job/95584858770
- Stable signature: `Deep Agents Code sandbox image is missing base
resolution metadata`
- Scope: one publication-to-onboarding platform-reference mismatch.
The publication validator exported the multi-platform index as
`base_ref`, while final qualification requires the locally recorded
platform manifest. Existing tests accepted the index at the publication
boundary and then supplied fabricated amd64 runtime metadata, so they
did not exercise the handoff that failed live.
The third recurrence, for main commit
`4a179614ac8a07273fce8f1cb679b33c0444f5c4`, first failed published-base
import proof with `ModuleNotFoundError: No module named 'deepagents'`.
Fallback onboarding and all target-specific cloud checks then passed
before final evidence immediately reproduced the same missing-metadata
signature. It is additional evidence for this root cause, not a separate
claim.
The fourth automatic recurrence, for main commit
`fb01aff8ed67596dcdfe38cb6f5dccdcba301a33`, used index digest
`sha256:772546…` with amd64 child `sha256:5331ab…`. Phases 1–7 passed,
including onboarding, lifecycle, every cloud check, and fresh
re-onboarding. Phase 9 alone failed with `Deep Agents Code sandbox image
is missing base resolution metadata` before cleanup passed. The earlier
`ModuleNotFoundError` was the expected negative import gate, whose step
succeeded. This is confirmed pre-fix recurrence evidence, not a separate
claim.
The first exact-candidate manual run,
https://github.com/NVIDIA/NemoClaw/actions/runs/32094360622, checked out
candidate `5c164b9c79cb3b7cb65f7ed1f0b99f026152c097` but used the
trusted workflow from base commit
`fb01aff8ed67596dcdfe38cb6f5dccdcba301a33`. Its Deep Agents Code job,
https://github.com/NVIDIA/NemoClaw/actions/runs/32094360622/job/95582856763,
failed phase 1 before onboarding because the trusted helper emitted the
index while that candidate required the amd64 platform reference. This
was trusted-workflow/candidate selection skew, not the original runtime
metadata failure. The follow-up makes the validated candidate-bound
contract authoritative for platform selection and passes its exact amd64
reference explicitly to both onboarding consumers without mutating
ambient process state. This failed run does not count toward the
two-pass acceptance criterion.
- Validate imports from and export the contract's exact `linux/amd64`
platform reference.
- Select the fixed platform reference from the complete candidate-bound
contract when publication evidence exists.
- Pass that exact reference explicitly to initial onboarding and fresh
re-onboarding; retain the ambient reference only for local runs without
publication evidence.
- Require completed-image evidence to match the same platform reference.
- Reuse one target-platform constant across Docker validation,
publication output, and final evidence checks.
- Keep the complete multi-platform index contract as candidate and
publication authority.
- Cover the emitted reference, trusted-workflow/candidate revision skew,
both onboarding consumers, invalid explicit references, missing
metadata, and opposite-platform evidence.
- [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)
- [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
exact-commit review passed all security-rubric categories for producer
selection, explicit consumer propagation, and final runtime evidence
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:
Not applicable; this PR does not change
`scripts/prepare-dgx-station-host.sh`.
- [ ] Tested on DGX Station
- Tested commit: not applicable
- Station profile/scenario: not applicable
- Result: not applicable
- Supporting evidence: not applicable
- [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 — pre-commit and commit-msg passed; pre-push
passed its applicable checks, but `tsc-cli` was skipped because
unchanged `origin/main` fails at
`src/lib/state/portable-uninstall-retirement.test.ts:299` with TS2365
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — focused E2E-support tests: 4 files,
100 tests; `npm run test:changed`: growth guardrails 22 tests, 621
executed tests passed, and 7 designed skips
- [ ] The live E2E target passes twice for the commit under review — the
`ubuntu-repo-cloud-langchain-deepagents-code` job must pass in two runs
- [ ] Applicable broad gate passed — not applicable; this is a focused
internal E2E publication handoff and targeted coverage exercises both
affected boundaries
- [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)
PASS. Reviewed commit `ce1a03d80d55ee726242f66a72313a5d8eadd31a` and its
complete nine-file diff against base SHA
`fb01aff8ed67596dcdfe38cb6f5dccdcba301a33`. Publication provenance,
candidate SHA, the official repository, immutable digests, fixed
`linux/amd64` selection, explicit consumer propagation, final runtime
evidence, and retention of the complete index contract remain fail
closed. The change does not mutate process-global state or introduce an
injection path. Independent verification passed 100 focused tests, 621
changed tests, and 22 growth tests.
PASS. Reviewed commit `ce1a03d80d55ee726242f66a72313a5d8eadd31a` and its
complete nine-file diff against base SHA
`fb01aff8ed67596dcdfe38cb6f5dccdcba301a33`. No public or owning E2E
documentation update is required because the change is internal
publication-evidence plumbing and does not change a supported command,
artifact schema, dispatch procedure, credential procedure, or operator
action. Changed identifiers, test titles, and error text follow NemoClaw
writing rules. Independent `git diff --check` passed.
---
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
* **Reliability Improvements**
* Improved validation of published base-image references for the target
platform.
* Ensured onboarding and cloud checks consistently use the verified
image reference when one is provided.
* Added safeguards against mutable or mismatched image references and
unsupported platform metadata.
* **Testing**
* Expanded end-to-end coverage for image selection, platform
compatibility, reference precedence, and publication evidence handling.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Signed-off-by: Julie Yaunches <jyaunches@nvidia.com>
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>1 parent 8d00488 commit 5a3a358
9 files changed
Lines changed: 137 additions & 41 deletions
File tree
- test/e2e
- fixtures/phases
- live
- support
- tools/e2e
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
69 | 69 | | |
70 | 70 | | |
71 | 71 | | |
| 72 | + | |
72 | 73 | | |
73 | 74 | | |
74 | 75 | | |
| |||
240 | 241 | | |
241 | 242 | | |
242 | 243 | | |
243 | | - | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
244 | 249 | | |
245 | 250 | | |
246 | 251 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
66 | 66 | | |
67 | 67 | | |
68 | 68 | | |
69 | | - | |
| 69 | + | |
70 | 70 | | |
71 | 71 | | |
72 | | - | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
73 | 77 | | |
74 | 78 | | |
75 | 79 | | |
| |||
135 | 139 | | |
136 | 140 | | |
137 | 141 | | |
138 | | - | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
139 | 145 | | |
140 | 146 | | |
141 | 147 | | |
| |||
150 | 156 | | |
151 | 157 | | |
152 | 158 | | |
| 159 | + | |
153 | 160 | | |
154 | 161 | | |
155 | 162 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
| 9 | + | |
10 | 10 | | |
11 | | - | |
12 | 11 | | |
13 | 12 | | |
14 | 13 | | |
| |||
23 | 22 | | |
24 | 23 | | |
25 | 24 | | |
26 | | - | |
| 25 | + | |
27 | 26 | | |
28 | 27 | | |
29 | 28 | | |
| |||
79 | 78 | | |
80 | 79 | | |
81 | 80 | | |
82 | | - | |
| 81 | + | |
83 | 82 | | |
84 | 83 | | |
85 | | - | |
| 84 | + | |
86 | 85 | | |
87 | 86 | | |
88 | 87 | | |
89 | 88 | | |
90 | 89 | | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
91 | 94 | | |
92 | 95 | | |
93 | 96 | | |
94 | 97 | | |
95 | 98 | | |
96 | 99 | | |
97 | | - | |
98 | 100 | | |
| 101 | + | |
99 | 102 | | |
100 | 103 | | |
101 | 104 | | |
| |||
107 | 110 | | |
108 | 111 | | |
109 | 112 | | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
118 | 113 | | |
119 | 114 | | |
120 | 115 | | |
| |||
126 | 121 | | |
127 | 122 | | |
128 | 123 | | |
129 | | - | |
130 | | - | |
131 | | - | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
132 | 131 | | |
133 | 132 | | |
134 | 133 | | |
| |||
139 | 138 | | |
140 | 139 | | |
141 | 140 | | |
142 | | - | |
| 141 | + | |
143 | 142 | | |
144 | 143 | | |
145 | 144 | | |
146 | 145 | | |
147 | 146 | | |
148 | 147 | | |
149 | 148 | | |
150 | | - | |
| 149 | + | |
151 | 150 | | |
152 | 151 | | |
153 | 152 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
| 21 | + | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
| |||
95 | 96 | | |
96 | 97 | | |
97 | 98 | | |
98 | | - | |
99 | | - | |
100 | | - | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
101 | 103 | | |
102 | 104 | | |
103 | 105 | | |
| |||
137 | 139 | | |
138 | 140 | | |
139 | 141 | | |
| 142 | + | |
140 | 143 | | |
141 | 144 | | |
142 | 145 | | |
| |||
170 | 173 | | |
171 | 174 | | |
172 | 175 | | |
173 | | - | |
174 | | - | |
175 | | - | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
176 | 181 | | |
177 | 182 | | |
178 | 183 | | |
| 184 | + | |
179 | 185 | | |
180 | 186 | | |
181 | 187 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
22 | 25 | | |
23 | 26 | | |
24 | | - | |
25 | | - | |
26 | 27 | | |
27 | 28 | | |
28 | 29 | | |
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
32 | 33 | | |
33 | | - | |
| 34 | + | |
34 | 35 | | |
35 | | - | |
36 | | - | |
| 36 | + | |
| 37 | + | |
37 | 38 | | |
38 | 39 | | |
39 | 40 | | |
| |||
72 | 73 | | |
73 | 74 | | |
74 | 75 | | |
75 | | - | |
| 76 | + | |
76 | 77 | | |
77 | 78 | | |
78 | 79 | | |
| |||
128 | 129 | | |
129 | 130 | | |
130 | 131 | | |
| 132 | + | |
131 | 133 | | |
Lines changed: 25 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
| 10 | + | |
10 | 11 | | |
11 | 12 | | |
12 | 13 | | |
| |||
74 | 75 | | |
75 | 76 | | |
76 | 77 | | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
77 | 91 | | |
78 | 92 | | |
79 | 93 | | |
| |||
218 | 232 | | |
219 | 233 | | |
220 | 234 | | |
221 | | - | |
| 235 | + | |
222 | 236 | | |
223 | 237 | | |
224 | 238 | | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
225 | 248 | | |
226 | 249 | | |
227 | 250 | | |
| |||
240 | 263 | | |
241 | 264 | | |
242 | 265 | | |
243 | | - | |
| 266 | + | |
244 | 267 | | |
245 | 268 | | |
246 | 269 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
33 | 34 | | |
34 | 35 | | |
35 | 36 | | |
| |||
213 | 214 | | |
214 | 215 | | |
215 | 216 | | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
216 | 250 | | |
217 | 251 | | |
218 | 252 | | |
| |||
Lines changed: 20 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
752 | 752 | | |
753 | 753 | | |
754 | 754 | | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
755 | 775 | | |
0 commit comments