fix(onboard): prove native Linux ARM64 GPUs with denylisted names - #8425
fix(onboard): prove native Linux ARM64 GPUs with denylisted names#8425latenighthackathon wants to merge 14 commits into
Conversation
Onboarding reported "no NVIDIA GPU detected" on native Linux ARM64 hosts whose GPU reports a denylisted JMJWOA-Generic-* name, even where docker run --gpus all runs a CUDA workload successfully. detectGpu() treats that name as untrusted unless firmware confirms a Spark, Station, or Jetson host, and clears it only through the bounded Docker CUDA proof. The prover returned null unless the host was Docker Desktop-backed WSL, so a native Linux ARM64 host had no way to prove its GPU and onboarding fell through to the remote provider menu. Run the bounded proof on native ARM64 Linux as well. A WSL host that is not Docker Desktop-backed still returns null, so Windows-on-ARM passthrough scope is unchanged. The CUDA workload remains the trust boundary, so the Snapdragon nvidia-smi shim still fails closed wherever the proof runs. Signed-off-by: latenighthackathon <latenighthackathon@users.noreply.github.com>
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe ARM64 GPU prover now validates placeholder GPU names on native Linux and Docker Desktop-backed WSL. Tests cover success, failure, and unsupported WSL states. Reference and troubleshooting documentation describe the updated behavior. ChangesARM64 GPU proof
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant Onboarding
participant ARM64GpuProver
participant CudaVectorAddContainer
Onboarding->>ARM64GpuProver: evaluate placeholder GPU and host eligibility
ARM64GpuProver->>CudaVectorAddContainer: run bounded CUDA proof
CudaVectorAddContainer-->>ARM64GpuProver: return proof outcome
ARM64GpuProver-->>Onboarding: preserve GPU passthrough or fall back to CPU
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage in commit ca3fcc6 in the TypeScript / code-coverage/cliThe overall coverage in commit ca3fcc6 in the Show a code coverage summary of the most impacted files.
Updated |
|
🌿 Preview your docs: https://nvidia-preview-pr-8425.docs.buildwithfern.com/nemoclaw |
PR Review Advisor — Blocking findings reportedAdvisor assessment: Blockers require maintainer review Model lanes
Second-opinion terminology and E2E selections are advisory. Live E2E does not run automatically for pull requests. 3 semantic terminology decisionsTerminology decisions are advisory. They affect the assessment only when a separate finding identifies concrete semantic impact.
E2E guidanceAdvisory only. A maintainer can dispatch the default E2E suite against this exact revision. Recommended E2E: Blockers
|
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 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.
Inline comments:
In `@docs/reference/commands.mdx`:
- Line 799: Update the proof descriptions in docs/reference/commands.mdx (lines
799-799) and docs/reference/troubleshooting.mdx (lines 808-817) to scope them to
generic ARM64 hosts without firmware-confirmed NVIDIA platform metadata; in
commands.mdx replace the broad “every other host still fails closed” wording
with wording limited to other non-firmware-vouched hosts, and qualify the
troubleshooting proof instructions accordingly.
In `@src/lib/onboard/wsl-docker-desktop-gpu.test.ts`:
- Around line 88-105: Add a test through the public detectGpu() boundary for the
denylisted native ARM64 GPU case, asserting that a failed proof produces null
rather than exposing the failed result. Update the related tests around
createArm64WslDockerDesktopGpuProver() so helper-level assertions do not claim
public fail-closed detection, while preserving their proof behavior checks.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 1cf5773e-d822-4713-b4fa-b2450cc66f08
📒 Files selected for processing (6)
docs/reference/commands.mdxdocs/reference/troubleshooting.mdxsrc/lib/inference/gpu-trust.tssrc/lib/inference/nim.tssrc/lib/onboard/wsl-docker-desktop-gpu.test.tssrc/lib/onboard/wsl-docker-desktop-gpu.ts
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
|
Maintainer CI classification: the non-required managed runtime lane failed during OpenClaw managed bootstrap because the runtime-reported normalized Docker replacement spec changed in |
|
Maintainer CI classification: the required CLI shard failure is a transient runner-timing failure, not a PR regression. After roughly 9.6 minutes of shard execution, the only error was the synchronous |
|
Follow-up: the single CLI shard rerun passed. Its dependent |
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
|
Maintainer follow-up for the current branch revision (
Nine-category security review: PASS, no findings. (1) no secrets or credentials added; (2) the CUDA proof uses a repository-controlled fixed argv without a shell, and GPU names are not interpolated into the command; (3) no authentication or authorization changes; (4) no dependency changes; (5) diagnostics remain bounded and contain no credential data; (6) no cryptographic changes; (7) no security-header or policy configuration changes; (8) tests cover eligible native ARM64, Docker Desktop-backed WSL, excluded WSL runtimes, successful, failed, timed-out, and public fail-closed detection paths; (9) the holistic trust boundary remains the successful bounded CUDA workload—non-ARM64 hosts, the names-only fallback, unqualified WSL runtimes, and failed proofs do not gain GPU trust. No CI waiver or merge bypass is requested. Merge remains contingent on the fresh required checks and an independent approval. |
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
|
Addressed
Validation on the current branch revision:
Refreshed nine-category security review: PASS — no findings.
GitHub Actions replacement runs may remain queued while Actions availability is degraded; I will monitor them without issuing repeated reruns. |
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
|
CI failure follow-up for the current branch revision:
Additional validation passes: CLI type checking, documentation build (0 errors; 2 pre-existing warnings), diff whitespace checks, DCO, and GitHub commit verification. Fresh CI is now running, and I will continue monitoring it. |
|
Fresh validation completed: 56 checks pass with no pending or failing check, including the live all-agent managed-runtime activation gate. Documentation and security reviews pass, the final documentation receipt is current, all review threads are resolved, and DCO plus GitHub verification pass. The PR is mergeable; independent approval is the only remaining gate. |
cv
left a comment
There was a problem hiding this comment.
Please refresh this branch onto the current main commit and rerun the required checks. The current base SHA is df56c02b, while main is bfc2bafd; repository policy does not permit approval of a stale branch. I reviewed the native ARM64 candidate gate, immutable CUDA image, bounded proof, WSL exclusion, failure fallback, tests, and documentation and found no additional correctness or security defect.
The stale-base request was addressed. A current review records the remaining diagnostic-safety findings separately.
cv
left a comment
There was a problem hiding this comment.
Two current findings remain. Escape or safely format GPU names from nvidia-smi before writing them to terminal output, and add an ANSI/control-character regression so a malformed denylisted suffix cannot alter logs. Also document the authoritative identity signal and removal condition that would retire the native ARM64 proof exception.
Summary
Onboarding reported
no NVIDIA GPU detectedon native Linux ARM64 hosts whose GPU reports a denylistedJMJWOA-Generic-*name, even wheredocker run --gpus allruns a CUDA workload successfully, so setup fell through to the remote provider menu. Those hosts now run the same bounded Docker CUDA proof that Docker Desktop-backed WSL already runs, and keep GPU passthrough when it passes.Related Issue
Fixes #8096
Changes
src/lib/onboard/wsl-docker-desktop-gpu.ts:createArm64WslDockerDesktopGpuProverpreviously returnednullunlessdetectWslDockerDesktopStatus()reporteddocker-desktop. Because that helper returnsnot-docker-desktopfor any non-WSL host, a native ARM64 Linux host collapsed into the same branch and had no way to prove its GPU. The prover now returnsnullonly when the host is WSL that is not Docker Desktop-backed, so native ARM64 Linux gains the proof and Windows-on-ARM passthrough scope is unchanged.Docker GPU proof), matching the terminology already used insrc/lib/inference/gpu-trust.tsandsrc/lib/inference/nim.test.ts.wsl-docker-desktop-gpu.ts,gpu-trust.ts, andnim.tsthat described the prover as Docker Desktop-only, including thewslDockerDesktopGpuProofPassednote that assumed the proof implies Docker Desktop WSL.docs/reference/troubleshooting.mdxanddocs/reference/commands.mdx: documented which hosts run the bounded proof, that it may pull the CUDA sample image, its 3 minute bound and theNEMOCLAW_WSL_GPU_PROOF_TIMEOUT_MSoverride, and the CPU fallback on failure or timeout.The bounded CUDA workload remains the trust boundary, not the container runtime. The Snapdragon
nvidia-smishim exposes no usable CUDA device, so it still fails closed wherever the proof runs, preserving the #3988/#4424 default.test/../wsl-docker-desktop-gpu.test.tsprotects both directions: a native Linux host proves its GPU, and a WSL host without Docker Desktop stays unproven.Type of Change
Quality Gates
Documentation Writer Review
docs-updateddocs/reference/commands.mdxanddocs/reference/troubleshooting.mdx, and refreshed the generated source citation indocs/reference/platform-support.mdx. The final independent review verified the primary memory-query scope, the failed-proof outcome, the ARM64-capable vectorAdd command, and all OpenClaw, Hermes, and Deep Agents variants. The review also verified the nvcr.io pull and cache disclosure, positive-millisecond timeout contract, and precise pass/fail effects. No actionable findings remain.Verification
Signed-off-by:line and every commit appears asVerifiedin GitHubpre-commit,commit-msg, andpre-pushhooks passedI do not have native ARM64 Linux hardware, so the end-to-end run is not something I can confirm. The proof command in this path is the same one the reporter recorded as passing on the affected host.
Signed-off-by: latenighthackathon latenighthackathon@users.noreply.github.com
Summary by CodeRabbit
New Features
Documentation