Skip to content

fix(onboard): avoid forcing plain BuildKit progress - #6536

Merged
cv merged 3 commits into
mainfrom
fix/onboard-buildkit-stage-output
Jul 9, 2026
Merged

fix(onboard): avoid forcing plain BuildKit progress#6536
cv merged 3 commits into
mainfrom
fix/onboard-buildkit-stage-output

Conversation

@sandl99

@sandl99 sandl99 commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

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 #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

  • 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 documented command, flag, configuration, or workflow changed; this adjusts the internal local Docker-driver BuildKit prebuild invocation and preserves the existing onboarding workflow.
  • 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: onboarding/sandbox prebuild path reviewed by Carlos at fix(onboard): avoid forcing plain BuildKit progress #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

  • PR description includes the DCO sign-off declaration and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run check:diff passed 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: npx vitest run --project cli src/lib/onboard/sandbox-prebuild.test.ts -> 17 passed; npm run typecheck:cli -> passed.
  • 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:
  • 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: San Dang sdang@nvidia.com

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.

@sandl99 sandl99 self-assigned this Jul 9, 2026
@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The sandbox prebuild test now asserts Docker helper arguments using resolved filesystem paths, and the BuildKit build invocation no longer includes the --progress=plain flag.

Changes

Sandbox prebuild invocation updates

Layer / File(s) Summary
Path resolution in invocation test
src/lib/onboard/sandbox-prebuild.test.ts
The test resolves the temporary build context and Dockerfile paths before asserting the helper argv uses those real paths.
BuildKit build args
src/lib/onboard/sandbox-prebuild.ts
The local build command drops --progress=plain while keeping the remaining build arguments unchanged.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Suggested labels: area: sandbox

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately reflects the main change: stopping the local BuildKit prebuild from forcing plain progress output.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/onboard-buildkit-stage-output

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

@github-code-quality

github-code-quality Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage remains at 96%, unchanged from the main branch.

TypeScript / code-coverage/cli

The overall coverage in the fix/onboard-buildkit... branch remains at 76%, unchanged from the main branch.

Show a code coverage summary of the most impacted files.
File main 2b2c9f6 fix/onboard-buildkit... 31f9249 +/-
src/lib/actions...-add-restart.ts 19% 14% -5%
src/lib/shields/index.ts 60% 60% 0%
src/lib/credentials/store.ts 59% 61% +2%
src/lib/actions...ridge-policy.ts 62% 64% +2%
src/lib/messagi.../persistence.ts 92% 95% +3%
src/lib/actions...lution-probe.ts 88% 94% +6%
src/lib/actions...e-validation.ts 81% 90% +9%
src/lib/actions...x/mcp-bridge.ts 35% 44% +9%
src/lib/agent/b...availability.ts 63% 74% +11%
src/lib/sandbox...rsion-scheme.ts 73% 100% +27%

Updated July 09, 2026 05:54 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Advisor Recommendation

Required E2E: onboard-repair, onboard-resume, state-backup-restore, upgrade-stale-sandbox, cloud-onboard
Optional E2E: sandbox-rebuild

Dispatch hint: onboard-repair,onboard-resume,state-backup-restore,upgrade-stale-sandbox

Workflow run

Full advisor summary

E2E Recommendation Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E

  • onboard-repair: Required by the deterministic risk plan for onboarding and sandbox state convergence after repair paths. This change touches sandbox prebuild behavior used before falling back to gateway builds.
  • onboard-resume: Required by the deterministic risk plan for onboarding resume convergence across persisted metadata, reported status, and live runtime after partial failures or retries.
  • state-backup-restore: Required by the deterministic risk plan because sandbox prebuild changes can affect mutation paths where state must survive backup and restore.
  • upgrade-stale-sandbox: Required by the deterministic risk plan because stale sandbox upgrade/rebuild flows may rely on the generated Dockerfile prebuild path and must remain retryable after failures.
  • cloud-onboard (high): Changed onboard, trace timing, scorecard, or E2E workflow code can affect cloud onboard wall-clock behavior and should refresh the trusted cloud-onboard trace timing signal.

Optional E2E

  • sandbox-rebuild: Optional adjacent coverage for sandbox image rebuild behavior around the changed local BuildKit prebuild command shape and fallback behavior.

New E2E recommendations

  • None.

Dispatch hint

  • Workflow: .github/workflows/e2e.yaml
  • jobs input: onboard-repair,onboard-resume,state-backup-restore,upgrade-stale-sandbox

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Target Recommendation

Required E2E targets: onboard-repair, onboard-resume, state-backup-restore, upgrade-stale-sandbox
Optional E2E targets: None

Dispatch required E2E targets:

  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=onboard-repair
  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=onboard-resume
  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=state-backup-restore
  • gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=upgrade-stale-sandbox

Workflow run

Full E2E target advisor summary

E2E Target Advisor

Base: origin/main
Head: HEAD
Confidence: high

Required E2E targets

  • onboard-repair: Onboarding and sandbox state must converge across persisted metadata, reported status, and the live runtime.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=onboard-repair
  • onboard-resume: Onboarding and sandbox state must converge across persisted metadata, reported status, and the live runtime.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=onboard-resume
  • state-backup-restore: Upgrade, rebuild, snapshot, and restore operations must preserve user state while replacing stale runtime state.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=state-backup-restore
  • upgrade-stale-sandbox: Upgrade, rebuild, snapshot, and restore operations must preserve user state while replacing stale runtime state.
    • Dispatch: gh workflow run e2e.yaml --ref <pr-head-ref> --field jobs=upgrade-stale-sandbox

Optional E2E targets

  • None.

Relevant changed files

  • src/lib/onboard/sandbox-prebuild.ts

@sandl99 sandl99 added area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow bug-fix PR fixes a bug or regression labels Jul 9, 2026
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor (Nemotron Ultra) — Changes requested

Merge posture: Do not merge yet
Primary next action: Resolve or justify PRA-1: PR #6333 overlap requires rebase before merge.
Open items: 0 required · 2 warnings · 3 suggestions · 8 test follow-ups
Since last review: 0 prior items resolved · 0 still apply · 5 new items found

Action checklist

  • PRA-1 Resolve or justify: PR feat(gpu): prefer native OpenShell with compatibility fallback #6333 overlap requires rebase before merge in src/lib/onboard/sandbox-prebuild.ts:1
  • PRA-2 Resolve or justify: Required E2E jobs not executed in this review in src/lib/onboard/sandbox-prebuild.ts:1
  • PRA-T1 Add or justify test follow-up: Runtime validation
  • PRA-T2 Add or justify test follow-up: Runtime validation
  • PRA-T3 Add or justify test follow-up: Runtime validation
  • PRA-T4 Add or justify test follow-up: Runtime validation
  • PRA-T5 Add or justify test follow-up: Runtime validation
  • PRA-T6 Add or justify test follow-up: Required E2E jobs not executed in this review
  • PRA-T7 Add or justify test follow-up: No automated test for ghost resource cleanup after failed prebuild
  • PRA-T8 Add or justify test follow-up: No automated test for gateway-builder fallback state preservation
  • PRA-3 In-scope improvement: No automated test for ghost resource cleanup after failed prebuild in src/lib/onboard/sandbox-prebuild.ts:1
  • PRA-4 In-scope improvement: No automated test for gateway-builder fallback state preservation in src/lib/onboard/sandbox-prebuild.ts:1
  • PRA-5 In-scope improvement: No automated test for retry convergence after transient Docker failure in src/lib/onboard/sandbox-prebuild.ts:1

Findings index

ID Severity Category Location Required action
PRA-1 Resolve/justify scope src/lib/onboard/sandbox-prebuild.ts:1 Rebase this PR onto latest main after PR #6333 merges, or coordinate with PR #6333 author to resolve conflicts in a single merge.
PRA-2 Resolve/justify tests src/lib/onboard/sandbox-prebuild.ts:1 Ensure all 4 required E2E jobs pass in CI before merge; do not treat manual probe test as a substitute for automated gates.
PRA-3 Improvement tests src/lib/onboard/sandbox-prebuild.ts:1 Add an integration test that triggers a build failure (e.g., invalid Dockerfile) and verifies `docker images --filter reference=nemoclaw-sandbox-local:*` shows no new dangling images after fallback.
PRA-4 Improvement tests src/lib/onboard/sandbox-prebuild.ts:1 Add test that simulates prebuild failure (e.g., Docker daemon unavailable) and asserts createArgs unchanged, no partial sandbox metadata written, and onboarding can retry cleanly.
PRA-5 Improvement tests src/lib/onboard/sandbox-prebuild.ts:1 Add test that simulates transient buildImage failure (first call throws, second succeeds) and verifies: (1) no ghost images from first attempt, (2) second attempt succeeds, (3) final imageRef matches expected tag.
Review findings by urgency: 0 required fixes, 2 items to resolve/justify, 3 in-scope improvements

⚠️ Resolve or justify before merge

Investigate these in the current review; either fix them, explain why they are not applicable, or document the accepted risk.

PRA-1 Resolve/justify — PR #6333 overlap requires rebase before merge

  • Location: src/lib/onboard/sandbox-prebuild.ts:1
  • Category: scope
  • Problem: PR feat(gpu): prefer native OpenShell with compatibility fallback #6333 (feat(gpu): prefer native OpenShell with compatibility fallback) modifies the same two files (sandbox-prebuild.ts and sandbox-prebuild.test.ts). The current PR has rebaseable=false and mergeable_state=blocked, indicating a merge conflict that must be resolved.
  • Impact: Merge will fail or produce semantic conflicts if both PRs land without rebase; trust validation logic and test expectations could diverge.
  • Recommended action: Rebase this PR onto latest main after PR feat(gpu): prefer native OpenShell with compatibility fallback #6333 merges, or coordinate with PR feat(gpu): prefer native OpenShell with compatibility fallback #6333 author to resolve conflicts in a single merge.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Run `gh pr checkout 6333 && git merge-base HEAD main` to identify conflict base; check `git diff main...HEAD -- src/lib/onboard/sandbox-prebuild.ts src/lib/onboard/sandbox-prebuild.test.ts` for overlapping hunks.
  • Missing regression test: N/A — merge conflict resolution, not a testable behavior
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Run `gh pr checkout 6333 && git merge-base HEAD main` to identify conflict base; check `git diff main...HEAD -- src/lib/onboard/sandbox-prebuild.ts src/lib/onboard/sandbox-prebuild.test.ts` for overlapping hunks.
  • Evidence: PR metadata shows rebaseable=false, mergeable_state=blocked, sameFiles=['src/lib/onboard/sandbox-prebuild.test.ts', 'src/lib/onboard/sandbox-prebuild.ts'] for PR feat(gpu): prefer native OpenShell with compatibility fallback #6333

PRA-2 Resolve/justify — Required E2E jobs not executed in this review

  • Location: src/lib/onboard/sandbox-prebuild.ts:1
  • Category: tests
  • Problem: Risk plan mandates 4 tier-2 E2E jobs (onboard-repair, onboard-resume, state-backup-restore, upgrade-stale-sandbox) as validation floor for lifecycle-state and upgrade-rebuild invariants. These are not unit-testable and must run in CI; this review does not claim they executed.
  • Impact: Broader invariants (ghost resource cleanup, status convergence, credential/policy preservation, retry convergence) lack automated regression evidence for this change.
  • Recommended action: Ensure all 4 required E2E jobs pass in CI before merge; do not treat manual probe test as a substitute for automated gates.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Check CI pipeline for jobs onboard-repair, onboard-resume, state-backup-restore, upgrade-stale-sandbox with green status on head SHA 31f9249.
  • Missing regression test: Automated E2E execution of onboard-repair, onboard-resume, state-backup-restore, upgrade-stale-sandbox against this head SHA
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Check CI pipeline for jobs onboard-repair, onboard-resume, state-backup-restore, upgrade-stale-sandbox with green status on head SHA 31f9249.
  • Evidence: riskPlan.requiredJobs lists 4 jobs with tier=2 and matchedFileCount=1 for sandbox-prebuild.ts; testDepth.verdict=runtime_validation_recommended

💡 In-scope improvements

These are lower-risk, not throwaway. Prefer fixing them in this PR when they are local to changed code; defer only with rationale or a linked follow-up.

PRA-3 Improvement — No automated test for ghost resource cleanup after failed prebuild

  • Location: src/lib/onboard/sandbox-prebuild.ts:1
  • Category: tests
  • Problem: Invariant 'partial failure and retry converge without ghost resources or stale ports' has no automated regression test. Unit tests verify fallback behavior but not that failed Docker builds leave no dangling images/containers.
  • Impact: Failed prebuilds could accumulate ghost Docker images over time, consuming disk and potentially causing tag collisions on retry.
  • Suggested action: Add an integration test that triggers a build failure (e.g., invalid Dockerfile) and verifies `docker images --filter reference=nemoclaw-sandbox-local:*` shows no new dangling images after fallback.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Run `docker images --filter reference=nemoclaw-sandbox-local:* --format '{{.Repository}}:{{.Tag}}'` before and after a forced build failure; expect no new tags.
  • Missing regression test: Integration test: force buildImage to fail, verify no new nemoclaw-sandbox-local:* images created, verify fallback returns imageRef=null
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: riskPlan.invariants includes 'partial failure and retry converge without ghost resources or stale ports'; staticTestInventory shows no test covering Docker resource cleanup

PRA-4 Improvement — No automated test for gateway-builder fallback state preservation

  • Location: src/lib/onboard/sandbox-prebuild.ts:1
  • Category: tests
  • Problem: Invariant 'cleanup preserves unrelated sandboxes and removes only owned resources' and 'status agrees with independently probed gateway and sandbox state' lack automated coverage for the prebuild fallback path.
  • Impact: If fallback to gateway builder mishandles onboarding state (createArgs mutation, sandbox metadata), users could see inconsistent sandbox status or lost configuration.
  • Suggested action: Add test that simulates prebuild failure (e.g., Docker daemon unavailable) and asserts createArgs unchanged, no partial sandbox metadata written, and onboarding can retry cleanly.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Mock dockerSpawn to throw ECONNREFUSED; verify prebuildSandboxImageIfEligible returns original createArgs and no filesystem artifacts in sandbox metadata directory.
  • Missing regression test: Test: simulate Docker daemon failure during prebuild, assert createArgs unchanged, no partial state written, onboarding retry succeeds via gateway builder
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: riskPlan.invariants for lifecycle-state include cleanup preservation and status convergence; no test in staticTestInventory covers fallback state hygiene

PRA-5 Improvement — No automated test for retry convergence after transient Docker failure

  • Location: src/lib/onboard/sandbox-prebuild.ts:1
  • Category: tests
  • Problem: Invariant 'failed mutations remain retryable without destructive cleanup' has no automated test for transient Docker failures (e.g., temporary daemon overload, network blip during image pull).
  • Impact: Transient failures could leave the system in a state where retry either fails permanently or creates duplicate resources.
  • Suggested action: Add test that simulates transient buildImage failure (first call throws, second succeeds) and verifies: (1) no ghost images from first attempt, (2) second attempt succeeds, (3) final imageRef matches expected tag.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Use vi.fn().mockRejectedValueOnce(Error('transient')).mockResolvedValue(0) for buildImage; verify two docker build attempts, single final image, correct imageRef returned.
  • Missing regression test: Test: buildImage fails once then succeeds; verify exactly one successful image built, no orphan tags, retry converges to correct imageRef
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: riskPlan.invariants for upgrade-rebuild include 'failed mutations remain retryable without destructive cleanup'; current tests only cover permanent failure modes (nonzero, null, throw)
Test follow-ups to resolve or justify

If these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.

  • PRA-T1 Runtime validation — Run the onboard-repair E2E job for Onboarding and sandbox state must converge across persisted metadata, reported status, and the live runtime. Matched files: src/lib/onboard/sandbox-prebuild.ts.. Unit tests cover all prebuild function branches (16 tests), but risk-plan invariants (lifecycle-state, upgrade-rebuild) require E2E validation of ghost resource cleanup, fallback state preservation, and retry convergence — not unit-testable.
  • PRA-T2 Runtime validation — Run the onboard-resume E2E job for Onboarding and sandbox state must converge across persisted metadata, reported status, and the live runtime. Matched files: src/lib/onboard/sandbox-prebuild.ts.. Unit tests cover all prebuild function branches (16 tests), but risk-plan invariants (lifecycle-state, upgrade-rebuild) require E2E validation of ghost resource cleanup, fallback state preservation, and retry convergence — not unit-testable.
  • PRA-T3 Runtime validation — Run the state-backup-restore E2E job for Upgrade, rebuild, snapshot, and restore operations must preserve user state while replacing stale runtime state. Matched files: src/lib/onboard/sandbox-prebuild.ts.. Unit tests cover all prebuild function branches (16 tests), but risk-plan invariants (lifecycle-state, upgrade-rebuild) require E2E validation of ghost resource cleanup, fallback state preservation, and retry convergence — not unit-testable.
  • PRA-T4 Runtime validation — Run the upgrade-stale-sandbox E2E job for Upgrade, rebuild, snapshot, and restore operations must preserve user state while replacing stale runtime state. Matched files: src/lib/onboard/sandbox-prebuild.ts.. Unit tests cover all prebuild function branches (16 tests), but risk-plan invariants (lifecycle-state, upgrade-rebuild) require E2E validation of ghost resource cleanup, fallback state preservation, and retry convergence — not unit-testable.
  • PRA-T5 Runtime validation — Add integration test: force build failure, verify no ghost nemoclaw-sandbox-local:* images remain. Unit tests cover all prebuild function branches (16 tests), but risk-plan invariants (lifecycle-state, upgrade-rebuild) require E2E validation of ghost resource cleanup, fallback state preservation, and retry convergence — not unit-testable.
  • PRA-T6 Required E2E jobs not executed in this review — Ensure all 4 required E2E jobs pass in CI before merge; do not treat manual probe test as a substitute for automated gates.
  • PRA-T7 No automated test for ghost resource cleanup after failed prebuild — Add an integration test that triggers a build failure (e.g., invalid Dockerfile) and verifies `docker images --filter reference=nemoclaw-sandbox-local:*` shows no new dangling images after fallback.
  • PRA-T8 No automated test for gateway-builder fallback state preservation — Add test that simulates prebuild failure (e.g., Docker daemon unavailable) and asserts createArgs unchanged, no partial sandbox metadata written, and onboarding can retry cleanly.
Since last review details

Current findings, using the urgency labels above:

PRA-1 Resolve/justify — PR #6333 overlap requires rebase before merge

  • Location: src/lib/onboard/sandbox-prebuild.ts:1
  • Category: scope
  • Problem: PR feat(gpu): prefer native OpenShell with compatibility fallback #6333 (feat(gpu): prefer native OpenShell with compatibility fallback) modifies the same two files (sandbox-prebuild.ts and sandbox-prebuild.test.ts). The current PR has rebaseable=false and mergeable_state=blocked, indicating a merge conflict that must be resolved.
  • Impact: Merge will fail or produce semantic conflicts if both PRs land without rebase; trust validation logic and test expectations could diverge.
  • Recommended action: Rebase this PR onto latest main after PR feat(gpu): prefer native OpenShell with compatibility fallback #6333 merges, or coordinate with PR feat(gpu): prefer native OpenShell with compatibility fallback #6333 author to resolve conflicts in a single merge.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Run `gh pr checkout 6333 && git merge-base HEAD main` to identify conflict base; check `git diff main...HEAD -- src/lib/onboard/sandbox-prebuild.ts src/lib/onboard/sandbox-prebuild.test.ts` for overlapping hunks.
  • Missing regression test: N/A — merge conflict resolution, not a testable behavior
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Run `gh pr checkout 6333 && git merge-base HEAD main` to identify conflict base; check `git diff main...HEAD -- src/lib/onboard/sandbox-prebuild.ts src/lib/onboard/sandbox-prebuild.test.ts` for overlapping hunks.
  • Evidence: PR metadata shows rebaseable=false, mergeable_state=blocked, sameFiles=['src/lib/onboard/sandbox-prebuild.test.ts', 'src/lib/onboard/sandbox-prebuild.ts'] for PR feat(gpu): prefer native OpenShell with compatibility fallback #6333

PRA-2 Resolve/justify — Required E2E jobs not executed in this review

  • Location: src/lib/onboard/sandbox-prebuild.ts:1
  • Category: tests
  • Problem: Risk plan mandates 4 tier-2 E2E jobs (onboard-repair, onboard-resume, state-backup-restore, upgrade-stale-sandbox) as validation floor for lifecycle-state and upgrade-rebuild invariants. These are not unit-testable and must run in CI; this review does not claim they executed.
  • Impact: Broader invariants (ghost resource cleanup, status convergence, credential/policy preservation, retry convergence) lack automated regression evidence for this change.
  • Recommended action: Ensure all 4 required E2E jobs pass in CI before merge; do not treat manual probe test as a substitute for automated gates.
  • Expected follow-up: Resolve in this PR or explain why the risk is acceptable.
  • Verification: Check CI pipeline for jobs onboard-repair, onboard-resume, state-backup-restore, upgrade-stale-sandbox with green status on head SHA 31f9249.
  • Missing regression test: Automated E2E execution of onboard-repair, onboard-resume, state-backup-restore, upgrade-stale-sandbox against this head SHA
  • Done when: The risk is fixed or explicitly justified in the PR. Verification: Check CI pipeline for jobs onboard-repair, onboard-resume, state-backup-restore, upgrade-stale-sandbox with green status on head SHA 31f9249.
  • Evidence: riskPlan.requiredJobs lists 4 jobs with tier=2 and matchedFileCount=1 for sandbox-prebuild.ts; testDepth.verdict=runtime_validation_recommended

PRA-3 Improvement — No automated test for ghost resource cleanup after failed prebuild

  • Location: src/lib/onboard/sandbox-prebuild.ts:1
  • Category: tests
  • Problem: Invariant 'partial failure and retry converge without ghost resources or stale ports' has no automated regression test. Unit tests verify fallback behavior but not that failed Docker builds leave no dangling images/containers.
  • Impact: Failed prebuilds could accumulate ghost Docker images over time, consuming disk and potentially causing tag collisions on retry.
  • Suggested action: Add an integration test that triggers a build failure (e.g., invalid Dockerfile) and verifies `docker images --filter reference=nemoclaw-sandbox-local:*` shows no new dangling images after fallback.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Run `docker images --filter reference=nemoclaw-sandbox-local:* --format '{{.Repository}}:{{.Tag}}'` before and after a forced build failure; expect no new tags.
  • Missing regression test: Integration test: force buildImage to fail, verify no new nemoclaw-sandbox-local:* images created, verify fallback returns imageRef=null
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: riskPlan.invariants includes 'partial failure and retry converge without ghost resources or stale ports'; staticTestInventory shows no test covering Docker resource cleanup

PRA-4 Improvement — No automated test for gateway-builder fallback state preservation

  • Location: src/lib/onboard/sandbox-prebuild.ts:1
  • Category: tests
  • Problem: Invariant 'cleanup preserves unrelated sandboxes and removes only owned resources' and 'status agrees with independently probed gateway and sandbox state' lack automated coverage for the prebuild fallback path.
  • Impact: If fallback to gateway builder mishandles onboarding state (createArgs mutation, sandbox metadata), users could see inconsistent sandbox status or lost configuration.
  • Suggested action: Add test that simulates prebuild failure (e.g., Docker daemon unavailable) and asserts createArgs unchanged, no partial sandbox metadata written, and onboarding can retry cleanly.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Mock dockerSpawn to throw ECONNREFUSED; verify prebuildSandboxImageIfEligible returns original createArgs and no filesystem artifacts in sandbox metadata directory.
  • Missing regression test: Test: simulate Docker daemon failure during prebuild, assert createArgs unchanged, no partial state written, onboarding retry succeeds via gateway builder
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: riskPlan.invariants for lifecycle-state include cleanup preservation and status convergence; no test in staticTestInventory covers fallback state hygiene

PRA-5 Improvement — No automated test for retry convergence after transient Docker failure

  • Location: src/lib/onboard/sandbox-prebuild.ts:1
  • Category: tests
  • Problem: Invariant 'failed mutations remain retryable without destructive cleanup' has no automated test for transient Docker failures (e.g., temporary daemon overload, network blip during image pull).
  • Impact: Transient failures could leave the system in a state where retry either fails permanently or creates duplicate resources.
  • Suggested action: Add test that simulates transient buildImage failure (first call throws, second succeeds) and verifies: (1) no ghost images from first attempt, (2) second attempt succeeds, (3) final imageRef matches expected tag.
  • Expected follow-up: Prefer a current-PR fix when local to changed code; defer only with rationale or linked follow-up.
  • Verification: Use vi.fn().mockRejectedValueOnce(Error('transient')).mockResolvedValue(0) for buildImage; verify two docker build attempts, single final image, correct imageRef returned.
  • Missing regression test: Test: buildImage fails once then succeeds; verify exactly one successful image built, no orphan tags, retry converges to correct imageRef
  • Done when: The local improvement is applied, or the PR notes why it should be deferred.
  • Evidence: riskPlan.invariants for upgrade-rebuild include 'failed mutations remain retryable without destructive cleanup'; current tests only cover permanent failure modes (nonzero, null, throw)

Workflow run details

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.

@sandl99 sandl99 added the v0.0.79 label Jul 9, 2026
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings

Merge posture: No blocking advisor findings
Primary next action: Add or justify PRA-T1 and any related test follow-ups.
Open items: 0 required · 0 warnings · 0 suggestions · 5 test follow-ups

Action checklist

  • PRA-T1 Add or justify test follow-up: Runtime validation
  • PRA-T2 Add or justify test follow-up: Runtime validation
  • PRA-T3 Add or justify test follow-up: Runtime validation
  • PRA-T4 Add or justify test follow-up: Runtime validation
  • PRA-T5 Add or justify test follow-up: Runtime validation
Test follow-ups to resolve or justify

If these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.

  • PRA-T1 Runtime validation — Run the onboard-repair E2E job for the lifecycle-state invariant that onboarding and sandbox state converge after repair when local prebuild remains enabled.. Unit coverage is sufficient for the exact argv and fallback contract changed by this PR, but the risk plan flags lifecycle-state and upgrade-rebuild families, and mocked tests cannot prove real Docker default/auto progress behavior under an allocated TTY or downstream image usability.
  • PRA-T2 Runtime validation — Run the onboard-resume E2E job for the lifecycle-state invariant that retry/resume after partial prebuild failure does not leave stale runtime state.. Unit coverage is sufficient for the exact argv and fallback contract changed by this PR, but the risk plan flags lifecycle-state and upgrade-rebuild families, and mocked tests cannot prove real Docker default/auto progress behavior under an allocated TTY or downstream image usability.
  • PRA-T3 Runtime validation — Run the state-backup-restore E2E job for the upgrade-rebuild invariant that credentials, policy, messaging, and workspace state survive preservation paths after rebuild-related flows.. Unit coverage is sufficient for the exact argv and fallback contract changed by this PR, but the risk plan flags lifecycle-state and upgrade-rebuild families, and mocked tests cannot prove real Docker default/auto progress behavior under an allocated TTY or downstream image usability.
  • PRA-T4 Runtime validation — Run the upgrade-stale-sandbox E2E job for the upgrade-rebuild invariant that host and in-sandbox runtime versions agree after mutation.. Unit coverage is sufficient for the exact argv and fallback contract changed by this PR, but the risk plan flags lifecycle-state and upgrade-rebuild families, and mocked tests cannot prove real Docker default/auto progress behavior under an allocated TTY or downstream image usability.
  • PRA-T5 Runtime validation — For behavior-specific local validation, run a live local Docker-driver prebuild under an allocated pseudo-TTY that builds a generated staged context, verifies the returned image can be used by a downstream build, and confirms a nonzero Docker build still preserves the original createArgs fallback.. Unit coverage is sufficient for the exact argv and fallback contract changed by this PR, but the risk plan flags lifecycle-state and upgrade-rebuild families, and mocked tests cannot prove real Docker default/auto progress behavior under an allocated TTY or downstream image usability.

Workflow run details

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.

@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.

🧹 Nitpick comments (2)
src/lib/onboard/sandbox-prebuild.ts (2)

138-208: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Unbounded rawLines buffer for the life of the build.

rawLines.push(line) runs for every non-empty line for the entire build (line 161), and only failureTail() trims it down to MAX_FAILURE_OUTPUT_LINES — at call time, not incrementally. For long/verbose builds (e.g. npm install/apt-get output 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 win

Separate stdout/stderr buffering in the BuildKit log parser

child.stdout and child.stderr both append into the same pending buffer, 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

📥 Commits

Reviewing files that changed from the base of the PR and between e962d05 and ffbee34.

📒 Files selected for processing (2)
  • src/lib/onboard/sandbox-prebuild.test.ts
  • src/lib/onboard/sandbox-prebuild.ts

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some jobs failed

Run: 28992997390
Workflow ref: fix/onboard-buildkit-stage-output
Requested targets: (selector rejected by workflow validation)
Requested jobs: (selector rejected by workflow validation)
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped

Job Result
generate-matrix ❌ failure

Failed jobs: generate-matrix. Check run artifacts for logs.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some jobs failed

Run: 28993105552
Workflow ref: fix/onboard-buildkit-stage-output
Requested targets: (default — all supported)
Requested jobs: full-e2e
Summary: 0 passed, 1 failed, 0 cancelled, 0 skipped

Job Result
full-e2e ❌ failure

Failed jobs: full-e2e. Check run artifacts for logs.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some jobs failed

Run: 28994319251
Workflow ref: fix/onboard-buildkit-stage-output
Requested targets: (default — all supported)
Requested jobs: full-e2e,cloud-onboard
Summary: 1 passed, 1 failed, 0 cancelled, 0 skipped

Job Result
cloud-onboard ✅ success
full-e2e ❌ failure

Failed jobs: full-e2e. Check run artifacts for logs.

1 similar comment
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ❌ Some jobs failed

Run: 28994319251
Workflow ref: fix/onboard-buildkit-stage-output
Requested targets: (default — all supported)
Requested jobs: full-e2e,cloud-onboard
Summary: 1 passed, 1 failed, 0 cancelled, 0 skipped

Job Result
cloud-onboard ✅ success
full-e2e ❌ failure

Failed jobs: full-e2e. Check run artifacts for logs.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested jobs passed

Run: 28995390102
Workflow ref: fix/onboard-buildkit-stage-output
Requested targets: (default — all supported)
Requested jobs: cloud-onboard
Summary: 1 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
cloud-onboard ✅ success

@cv

cv commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator

Exact-head maintainer re-review at 798988eb0: the simplified approach is the right direction. Restoring inherited stdio and removing only forced --progress=plain eliminates the prior parser’s cross-stream corruption, unbounded buffer, raw failure-tail, and chunk-boundary risks; 17 focused tests plus CLI build/typecheck pass locally.

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 (cloud-onboard, full-e2e, ubuntu-repo-cloud-openclaw) while the standard exact-head matrix completes.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All selected jobs passed

Run: 28996448554
Workflow ref: fix/onboard-buildkit-stage-output
Requested targets: cloud-onboard,full-e2e,ubuntu-repo-cloud-openclaw
Requested jobs: (default — all default-enabled free-standing jobs; explicit-only jobs openshell-gateway-auth-contract, mcp-bridge-dev, hermes-gpu-startup, sandbox-rlimits-connect, and jetson-nvmap-gpu are skipped unless selected)
Summary: 3 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
cloud-onboard ✅ success
full-e2e ✅ success
live ✅ success

Signed-off-by: Carlos Villela <cvillela@nvidia.com>
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested jobs passed

Run: 29000112496
Workflow ref: fix/onboard-buildkit-stage-output
Requested targets: (default — all supported)
Requested jobs: onboard-repair,onboard-resume,state-backup-restore,upgrade-stale-sandbox,cloud-onboard
Summary: 5 passed, 0 failed, 0 cancelled, 0 skipped

Job Result
cloud-onboard ✅ success
onboard-repair ✅ success
onboard-resume ✅ success
state-backup-restore ✅ success
upgrade-stale-sandbox ✅ success

cv
cv previously requested changes Jul 9, 2026

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

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:

  1. 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 default auto output 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).
  2. Provide behavior-specific exact-head evidence for the actual change: run an eligible generated local Docker prebuild through prebuildSandboxImageIfEligible in the intended terminal context, show the inherited/default output no longer exhibits the reported noisy shape, and prove the returned nemoclaw-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 mocks buildImage.

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.

@sandl99 sandl99 changed the title fix(onboard): format local BuildKit stage output fix(onboard): avoid forcing plain BuildKit progress Jul 9, 2026
@sandl99

sandl99 commented Jul 9, 2026

Copy link
Copy Markdown
Collaborator Author

Addressed the two items from #6536 (review):

  • Updated the title and PR body to describe the current implementation: no NemoClaw stream parser/formatter, no raw failure tail, and no formatter tests. The PR now states that the change removes forced --progress=plain, keeps inherited stdio, and relies on Docker/BuildKit default auto progress.
  • Added behavior-specific exact-head evidence to the Verification section.

Live local Docker-driver prebuild probe evidence:

expect -c '... spawn npx tsx -e <probe> ...'
Building sandbox image with BuildKit (skips the slower in-gateway builder)...
[+] Building 0.2s (3/3) FINISHED docker:colima
RESULT_IMAGE_REF=nemoclaw-sandbox-local:acceptance-probe-acceptance-mrd6ea2v
INSPECT_LABEL=prebuild
DOWNSTREAM_IMAGE_REF=nemoclaw-sandbox-local:acceptance-probe-acceptance-mrd6ea2v-downstream

The probe allocated a pseudo-terminal, called prebuildSandboxImageIfEligible against a generated staged context with the real Docker helper and inherited stdio, verified the returned image label via docker image inspect, then built a downstream Dockerfile using the returned nemoclaw-sandbox-local:* image as its FROM.

Focused checks also pass:

npx vitest run --project cli src/lib/onboard/sandbox-prebuild.test.ts -> 17 passed
npm run typecheck:cli -> passed

@cv
cv dismissed their stale review July 9, 2026 07:27

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 cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

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, and upgrade-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.

@cv
cv merged commit d97ed2e into main Jul 9, 2026
125 checks passed
@cv
cv deleted the fix/onboard-buildkit-stage-output branch July 9, 2026 08:14
@jyaunches jyaunches mentioned this pull request Jul 9, 2026
21 tasks
cv pushed a commit that referenced this pull request Jul 9, 2026
<!-- 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 -->
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- 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>
Hadar301 pushed a commit to Hadar301/NemoClaw-OpenShift that referenced this pull request Jul 12, 2026
<!-- 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 -->
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 bug-fix PR fixes a bug or regression

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants