fix(onboard): avoid forcing plain BuildKit progress - #6536
Conversation
📝 WalkthroughWalkthroughThe sandbox prebuild test now asserts Docker helper arguments using resolved filesystem paths, and the BuildKit build invocation no longer includes the ChangesSandbox prebuild invocation updates
Estimated code review effort: 1 (Trivial) | ~5 minutes Suggested labels: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage remains at 96%, unchanged from the TypeScript / code-coverage/cliThe overall coverage in the Show a code coverage summary of the most impacted files.
Updated |
E2E Advisor RecommendationRequired E2E: Dispatch hint: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
E2E Target RecommendationRequired E2E targets: Dispatch required E2E targets:
Full E2E target advisor summaryE2E Target AdvisorBase: Required E2E targets
Optional E2E targets
Relevant changed files
|
PR Review Advisor (Nemotron Ultra) — Changes requestedMerge posture: Do not merge yet Action checklist
Findings index
Review findings by urgency: 0 required fixes, 2 items to resolve/justify, 3 in-scope improvements
|
PR Review Advisor — No blocking findingsMerge posture: No blocking advisor findings Action checklist
Test follow-ups to resolve or justifyIf these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.
This is an automated, non-binding review; it still expects maintainers and agents to respond to each required or warning item. Treat suggestions as current-PR improvements when they touch changed code; defer only with maintainer rationale or a linked follow-up. A human maintainer must make the final merge decision. |
There was a problem hiding this comment.
🧹 Nitpick comments (2)
src/lib/onboard/sandbox-prebuild.ts (2)
138-208: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick winUnbounded
rawLinesbuffer for the life of the build.
rawLines.push(line)runs for every non-empty line for the entire build (line 161), and onlyfailureTail()trims it down toMAX_FAILURE_OUTPUT_LINES— at call time, not incrementally. For long/verbose builds (e.g.npm install/apt-getoutput across many steps), this array can grow to hold the full build transcript in memory for the whole build duration, even though only the last 80 lines are ever used.♻️ Bound the buffer as lines arrive
function recordLine(rawLine: string): void { const line = rawLine.replace(/\r/g, "").trimEnd(); if (!line) return; rawLines.push(line); + if (rawLines.length > MAX_FAILURE_OUTPUT_LINES) { + rawLines.splice(0, rawLines.length - MAX_FAILURE_OUTPUT_LINES); + }🤖 Prompt for 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. In `@src/lib/onboard/sandbox-prebuild.ts` around lines 138 - 208, The createBuildKitStageLogger buffer is unbounded because rawLines keeps every non-empty line for the full build and only truncates in failureTail(); update recordLine() in createBuildKitStageLogger to cap rawLines as lines arrive by dropping older entries once MAX_FAILURE_OUTPUT_LINES is exceeded, while preserving the existing deduping/printing behavior in print() and the step/error parsing logic.
273-283: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick winSeparate stdout/stderr buffering in the BuildKit log parser
child.stdoutandchild.stderrboth append into the samependingbuffer, so partial chunks from one stream can be joined with chunks from the other before line parsing. That can corrupt BuildKit log lines and let raw/garbled text slip through the curated output. Use per-stream buffering (or tag chunks by origin) so each pipe is parsed independently.🤖 Prompt for 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. In `@src/lib/onboard/sandbox-prebuild.ts` around lines 273 - 283, The BuildKit log parsing in sandbox-prebuild’s stream handler is mixing stdout and stderr into a single pending buffer, which can corrupt line boundaries. Update createBuildKitStageLogger (and the child.stdout/child.stderr wiring in the sandbox build flow) to keep separate buffering per stream or tag chunks by origin before parsing. Ensure each pipe is parsed independently so partial chunks from one stream cannot be combined with the other and leak raw/garbled output.
🤖 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.
Nitpick comments:
In `@src/lib/onboard/sandbox-prebuild.ts`:
- Around line 138-208: The createBuildKitStageLogger buffer is unbounded because
rawLines keeps every non-empty line for the full build and only truncates in
failureTail(); update recordLine() in createBuildKitStageLogger to cap rawLines
as lines arrive by dropping older entries once MAX_FAILURE_OUTPUT_LINES is
exceeded, while preserving the existing deduping/printing behavior in print()
and the step/error parsing logic.
- Around line 273-283: The BuildKit log parsing in sandbox-prebuild’s stream
handler is mixing stdout and stderr into a single pending buffer, which can
corrupt line boundaries. Update createBuildKitStageLogger (and the
child.stdout/child.stderr wiring in the sandbox build flow) to keep separate
buffering per stream or tag chunks by origin before parsing. Ensure each pipe is
parsed independently so partial chunks from one stream cannot be combined with
the other and leak raw/garbled output.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 100c80aa-aabe-4295-a32b-dfb7071f04cb
📒 Files selected for processing (2)
src/lib/onboard/sandbox-prebuild.test.tssrc/lib/onboard/sandbox-prebuild.ts
E2E Target Results — ❌ Some jobs failedRun: 28992997390
|
E2E Target Results — ❌ Some jobs failedRun: 28993105552
|
E2E Target Results — ❌ Some jobs failedRun: 28994319251
|
1 similar comment
E2E Target Results — ❌ Some jobs failedRun: 28994319251
|
E2E Target Results — ✅ All requested jobs passedRun: 28995390102
|
|
Exact-head maintainer re-review at One acceptance item remains before review: please update the PR Summary/Changes/Testing text, which still describes the deleted stage parser, curated formatter, raw failure tail, and formatter tests. It should instead describe native Docker/BuildKit progress selection and the realpath expectation changes. I am dispatching the exact live target set selected by the E2E advisors ( |
E2E Target Results — ✅ All selected jobs passedRun: 28996448554
|
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
E2E Target Results — ✅ All requested jobs passedRun: 29000112496
|
cv
left a comment
There was a problem hiding this comment.
Exact-head review at 31f924926f: the normal matrix is green and the requested live run 29000112496 passed all five jobs (cloud-onboard, onboard-repair, onboard-resume, state-backup-restore, and upgrade-stale-sandbox). Those runs are useful lifecycle evidence, but they do not exercise or assert the changed local Docker-driver prebuild output.
Two items remain before approval:
- Align the PR metadata with the current implementation. The body still says this PR pipes output through a NemoClaw formatter, suppresses cache/status rows and command stdout, preserves a raw failure tail, and adds focused stream-shape coverage. None of that exists at this head. The actual diff removes
--progress=plain, relies on Docker/BuildKit defaultautooutput through inherited stdio, and updates the mock expectation for already-resolved paths. Please update the summary/changes/verification claims (the title can remain if it describes the outcome). - Provide behavior-specific exact-head evidence for the actual change: run an eligible generated local Docker prebuild through
prebuildSandboxImageIfEligiblein the intended terminal context, show the inherited/default output no longer exhibits the reported noisy shape, and prove the returnednemoclaw-sandbox-local:*image is usable. The 5/5 E2E logs contain no local-prebuild/BuildKit output, so they cannot establish this acceptance behavior; the unit test only mocksbuildImage.
I am not carrying forward Nemotron’s O_NOFOLLOW, test-file split, concurrency, or large-output suggestions as blockers here: those are pre-existing and this two-line argv change does not weaken those boundaries.
|
Addressed the two items from #6536 (review):
Live local Docker-driver prebuild probe evidence: The probe allocated a pseudo-terminal, called Focused checks also pass: |
Addressed without a head change: title/body now match the actual default-BuildKit-progress implementation, exact-head run 29000112496 passed all five required live jobs, and the author supplied a real pseudo-terminal prebuild/image-consumption probe. Formal advisor disposition remains separate.
cv
left a comment
There was a problem hiding this comment.
Approved at exact head 31f924926f.
- All 45 GitHub checks pass; DCO is present and all three commits are Verified.
- Exact-head E2E run 29000112496 passed
cloud-onboard,onboard-repair,onboard-resume,state-backup-restore, andupgrade-stale-sandbox. - The author corrected the title/body to match the actual change and supplied a real pseudo-terminal local-prebuild probe: native BuildKit UI, returned image label verified, and a downstream image successfully built from the returned local image.
- Refreshed exact-head GPT advisor attempt 2 recommends
merge_as_is; CodeRabbit has no major finding. - Nemotron’s remaining overlap/E2E notes are nonblocking: #6333 is still open rather than a base commit to rebase onto, this PR is cleanly mergeable with current main, and the required live evidence is recorded above.
<!-- markdownlint-disable MD041 --> ## Summary Adds the pre-tag v0.0.79 release notes entry to `docs/about/release-notes.mdx` so the release plan can be generated after docs merge. The entry summarizes the merged v0.0.79 release train across inference, diagnostics, runtime hardening, policies, onboarding recovery, and release validation. ## Changes - Added the v0.0.79 release notes section with linked follow-up documentation for OpenRouter onboarding, managed vLLM changes, completion and logging, Deep Agents runtime limits, policy updates, onboarding recovery, and release validation. - Source summary: - #6461 -> `docs/about/release-notes.mdx`: Documents OpenRouter onboarding support and links to inference/provider references. - #6271 and #6272 -> `docs/about/release-notes.mdx`: Documents shell completion and structured logging highlights. - #6465, #6539, #6570, and #6528 -> `docs/about/release-notes.mdx`: Documents status route-drift, orphaned sandbox, gateway cleanup, and DGX Spark express-install diagnostics. - #6523, #6551, #6484, #6488, #6324, and #6542 -> `docs/about/release-notes.mdx`: Documents managed vLLM, Qwen3.6 tool parser, compaction, and timeout/readiness improvements. - #6559, #6538, #6560, #6568, #6552, #6567, and #6587 -> `docs/about/release-notes.mdx`: Documents runtime, credential, proxy, PID namespace, TOML, and provider-state hardening. - #6541, #5415, #6246, #6496, and #6573 -> `docs/about/release-notes.mdx`: Documents GitHub policy, Gmail policy, MCP allowlist, WhatsApp, and messaging-variant updates. - #6253, #6572, #6444, #6536, and #5860 -> `docs/about/release-notes.mdx`: Documents onboarding resume and create-step recovery improvements. - #6508, #6527, #5506, #6588, #6446, #6447, #6582, #6296, #6367, #6397, and #6505 -> `docs/about/release-notes.mdx`: Documents docs, release-risk, and E2E validation updates. ## 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 <!-- Check exactly one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: Release-note prose only. - [x] Docs updated for user-facing behavior changes - [ ] Docs 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: ## 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 the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed 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: Tests not applicable, release-note prose only. - [ ] 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) - [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) Docs validation note: `npm run docs:check-agent-variants && npm run docs:check-routes && git diff --check` passed. Full `npm run docs` is currently blocked before Fern validation because the pinned `fern-api@5.65.2` package is unavailable from npm (`ETARGET No matching version found`). --- <!-- 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: Julie Yaunches <jyaunches@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added release notes for v0.0.79 with a new summary of recent improvements, including onboarding and inference options, operator/CLI diagnostics, sandbox recovery hardening, runtime limits, network policy behavior, and release validation updates. * Added updated references and links for the latest release. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
<!-- markdownlint-disable MD041 --> ## Summary Fixes noisy local Docker-driver sandbox prebuild output by no longer forcing Docker/BuildKit plain progress. The generated local prebuild now invokes `docker build` with BuildKit enabled, inherited stdio, and Docker's default `auto` progress selection so interactive terminals get Docker's native progress UI while the gateway fallback path stays unchanged. ## Related Issue Refs NVIDIA#6258 ## Changes - Remove the forced `--progress=plain` argument from the local BuildKit prebuild Docker invocation. - Keep inherited stdio for the real Docker build instead of piping output through a NemoClaw parser or formatter. - Keep the existing generated-context trust checks and gateway fallback behavior unchanged. - Update the success-path unit expectation to assert the helper receives `fs.realpathSync`-resolved Dockerfile and build-context paths. ## 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 exactly one tests line and one docs 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: - [ ] Docs updated for user-facing behavior changes - [x] Docs not applicable - justification: no documented command, flag, configuration, or workflow changed; this adjusts the internal local Docker-driver BuildKit prebuild invocation and preserves the existing onboarding workflow. - [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: onboarding/sandbox prebuild path reviewed by Carlos at NVIDIA#6536 (review); metadata and behavior-specific evidence updated in response. - [ ] Non-success, skipped, or missing CI check accepted by maintainer - check name, approval link, and follow-up issue: ## 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 the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed 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: `npx vitest run --project cli src/lib/onboard/sandbox-prebuild.test.ts` -> 17 passed; `npm run typecheck:cli` -> passed. - [x] Behavior-specific exact-head evidence for the local Docker-driver prebuild: `expect -c '... spawn npx tsx -e <probe> ...'` allocated a pseudo-terminal, called `prebuildSandboxImageIfEligible` against a generated staged context with the real Docker helper and inherited stdio, returned `RESULT_IMAGE_REF=nemoclaw-sandbox-local:acceptance-probe-acceptance-mrd6ea2v`, verified `INSPECT_LABEL=prebuild`, and built `DOWNSTREAM_IMAGE_REF=nemoclaw-sandbox-local:acceptance-probe-acceptance-mrd6ea2v-downstream` from that returned image. The observed Docker output used BuildKit's terminal progress display and did not emit the previous forced plain `#N DONE`/`CACHED` stream shape or inner command transcript noise. - [ ] 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) --- <!-- 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: San Dang <sdang@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved reliability of local sandbox image prebuilds by resolving build context and Dockerfile paths consistently across environments. * Updated the local BuildKit invocation to stop forcing verbose "plain" progress output, reducing unnecessary noise during prebuild runs. * Strengthened the related prebuild success-path check to validate the resolved paths passed to the local Docker/BuildKit helper. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Adds the pre-tag v0.0.79 release notes entry to `docs/about/release-notes.mdx` so the release plan can be generated after docs merge. The entry summarizes the merged v0.0.79 release train across inference, diagnostics, runtime hardening, policies, onboarding recovery, and release validation. ## Changes - Added the v0.0.79 release notes section with linked follow-up documentation for OpenRouter onboarding, managed vLLM changes, completion and logging, Deep Agents runtime limits, policy updates, onboarding recovery, and release validation. - Source summary: - NVIDIA#6461 -> `docs/about/release-notes.mdx`: Documents OpenRouter onboarding support and links to inference/provider references. - NVIDIA#6271 and NVIDIA#6272 -> `docs/about/release-notes.mdx`: Documents shell completion and structured logging highlights. - NVIDIA#6465, NVIDIA#6539, NVIDIA#6570, and NVIDIA#6528 -> `docs/about/release-notes.mdx`: Documents status route-drift, orphaned sandbox, gateway cleanup, and DGX Spark express-install diagnostics. - NVIDIA#6523, NVIDIA#6551, NVIDIA#6484, NVIDIA#6488, NVIDIA#6324, and NVIDIA#6542 -> `docs/about/release-notes.mdx`: Documents managed vLLM, Qwen3.6 tool parser, compaction, and timeout/readiness improvements. - NVIDIA#6559, NVIDIA#6538, NVIDIA#6560, NVIDIA#6568, NVIDIA#6552, NVIDIA#6567, and NVIDIA#6587 -> `docs/about/release-notes.mdx`: Documents runtime, credential, proxy, PID namespace, TOML, and provider-state hardening. - NVIDIA#6541, NVIDIA#5415, NVIDIA#6246, NVIDIA#6496, and NVIDIA#6573 -> `docs/about/release-notes.mdx`: Documents GitHub policy, Gmail policy, MCP allowlist, WhatsApp, and messaging-variant updates. - NVIDIA#6253, NVIDIA#6572, NVIDIA#6444, NVIDIA#6536, and NVIDIA#5860 -> `docs/about/release-notes.mdx`: Documents onboarding resume and create-step recovery improvements. - NVIDIA#6508, NVIDIA#6527, NVIDIA#5506, NVIDIA#6588, NVIDIA#6446, NVIDIA#6447, NVIDIA#6582, NVIDIA#6296, NVIDIA#6367, NVIDIA#6397, and NVIDIA#6505 -> `docs/about/release-notes.mdx`: Documents docs, release-risk, and E2E validation updates. ## 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 <!-- Check exactly one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: Release-note prose only. - [x] Docs updated for user-facing behavior changes - [ ] Docs 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: ## 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 the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or `npm run check:diff` passed 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: Tests not applicable, release-note prose only. - [ ] 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) - [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) Docs validation note: `npm run docs:check-agent-variants && npm run docs:check-routes && git diff --check` passed. Full `npm run docs` is currently blocked before Fern validation because the pinned `fern-api@5.65.2` package is unavailable from npm (`ETARGET No matching version found`). --- <!-- 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: Julie Yaunches <jyaunches@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added release notes for v0.0.79 with a new summary of recent improvements, including onboarding and inference options, operator/CLI diagnostics, sandbox recovery hardening, runtime limits, network policy behavior, and release validation updates. * Added updated references and links for the latest release. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Summary
Fixes noisy local Docker-driver sandbox prebuild output by no longer forcing Docker/BuildKit plain progress. The generated local prebuild now invokes
docker buildwith BuildKit enabled, inherited stdio, and Docker's defaultautoprogress selection so interactive terminals get Docker's native progress UI while the gateway fallback path stays unchanged.Related Issue
Refs #6258
Changes
--progress=plainargument from the local BuildKit prebuild Docker invocation.fs.realpathSync-resolved Dockerfile and build-context paths.Type of Change
Quality Gates
Verification
Verifiedin GitHubpre-commit,commit-msg, andpre-pushhooks passed, ornpm run check:diffpassed when hooks were skipped or unavailablenpx vitest run --project cli src/lib/onboard/sandbox-prebuild.test.ts-> 17 passed;npm run typecheck:cli-> passed.expect -c '... spawn npx tsx -e <probe> ...'allocated a pseudo-terminal, calledprebuildSandboxImageIfEligibleagainst a generated staged context with the real Docker helper and inherited stdio, returnedRESULT_IMAGE_REF=nemoclaw-sandbox-local:acceptance-probe-acceptance-mrd6ea2v, verifiedINSPECT_LABEL=prebuild, and builtDOWNSTREAM_IMAGE_REF=nemoclaw-sandbox-local:acceptance-probe-acceptance-mrd6ea2v-downstreamfrom that returned image. The observed Docker output used BuildKit's terminal progress display and did not emit the previous forced plain#N DONE/CACHEDstream shape or inner command transcript noise.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)Signed-off-by: San Dang sdang@nvidia.com
Summary by CodeRabbit