Skip to content

feat(cli): add N1x Express preview - #8903

Open
sandl99 wants to merge 19 commits into
mainfrom
feat/n1x-express-install-8574
Open

feat(cli): add N1x Express preview#8903
sandl99 wants to merge 19 commits into
mainfrom
feat/n1x-express-install-8574

Conversation

@sandl99

@sandl99 sandl99 commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

Summary

Add a Deferred N1x Express preview that recognizes the qualified FastOS and PCI identity and offers one-host managed vLLM. N1x remains outside the supported-platform set until physical NemoClaw Express E2E validation is complete.

Related Issue

Fixes #8574

Changes

  • Add a bounded N1x identity reader for the installer and readiness projection. Generic DMI cannot identify this device directly, so the classifier requires a trusted /etc/fastos-release marker and exact NVIDIA display PCI identity; focused identity and installer tests protect the boundary.
  • Add a distinct N1x managed-vLLM profile using nvidia/Qwen3.6-35B-A3B-NVFP4. A separate profile prevents N1x from inheriting DGX Spark cluster, fixed-catalog, llama.cpp, or NIM behavior; vLLM profile and menu tests protect the selection.
  • Keep Local NVIDIA NIM unavailable on N1x in both interactive onboarding and explicit provider selection. Provider-selection tests prove that nim-local is rejected before NIM setup while managed vLLM remains available.
  • Keep host.platform.supported absent and add a blocking pending-validation finding. Only explicit managed-vLLM preview intent can waive that finding after N1x identity qualifies; readiness and onboarding-admission tests protect the exception.
  • Document the Deferred preview, readiness contract, model, exclusions, and physical E2E promotion gate across the platform matrix, quickstarts, inference setup, command reference, and readiness reference.

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:
  • 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: Local security review covered bounded identity input, marker ownership and mode checks, symlink and malformed-marker rejection, exact PCI matching, fail-closed readiness states, and the scoped preview waiver. No blocking findings remain.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: docs-updated
  • Evidence: docs/get-started/prerequisites.mdx, docs/get-started/quickstart-hermes.mdx, docs/get-started/quickstart-langchain-deepagents-code.mdx, docs/get-started/quickstart.mdx, docs/inference/choose-inference-provider.mdx, docs/inference/choose-local-inference-server.mdx, docs/inference/set-up-nvidia-nim.mdx, docs/inference/set-up-vllm.mdx, docs/reference/commands.mdx, docs/reference/platform-support.mdx, docs/reference/system-readiness.mdx, docs/security/best-practices.mdx; synchronized source: ci/platform-matrix.json
  • Agent: Codex CLI

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit: Not applicable; scripts/prepare-dgx-station-host.sh is unchanged.
  • Station profile/scenario: Not applicable.
  • Result: Not applicable.
  • Supporting evidence: Not applicable.

Verification

  • PR description includes a Signed-off-by: line and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run validate:pr passed after refreshing origin/main when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set — npx vitest run test/install-express-n1x.test.ts (10 passed), including non-C locale metadata collection plus N1x decline, NEMOCLAW_NO_EXPRESS=1, and explicit install-vllm bypass coverage.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result: Not applicable; this change does not modify the runtime-wide test harness or repository-wide validation configuration.
  • 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) — build passed with 0 errors and 2 pre-existing Fern warnings.
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only) — no new documentation pages.

Signed-off-by: San Dang sdang@nvidia.com

Summary by CodeRabbit

  • New Features

    • Added deferred Express-install preview support for N1x FASTOS hosts.
    • Added managed vLLM support with the default Qwen3.6-35B-A3B-NVFP4 model.
    • Added N1x platform detection and readiness qualification.
  • Bug Fixes

    • Prevented local NVIDIA NIM from being offered or selected on N1x hosts.
  • Documentation

    • Updated setup, inference, platform-support, readiness, and security guidance for N1x requirements, limitations, and preview behavior.

Signed-off-by: San Dang <sdang@nvidia.com>
@sandl99 sandl99 self-assigned this Aug 12, 2026
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds deferred N1x FASTOS support across host detection, readiness qualification, managed vLLM selection, Express installation, onboarding behavior, tests, support matrices, and setup documentation.

Changes

N1x FASTOS deferred preview

Layer / File(s) Summary
N1x identity and NVIDIA platform detection
src/lib/inference/platform-identity/n1x.ts, src/lib/inference/nim.ts, src/lib/inference/platform-identity/n1x.test.ts, src/lib/inference/nim-n1x.test.ts
Validates trusted FastOS metadata and exact NVIDIA PCI identity. Qualified Linux ARM64 hosts are classified as n1x.
N1x readiness qualification and admission
src/lib/readiness/platform-qualification.ts, src/lib/readiness/onboard-admission.ts, src/lib/readiness/host.ts, src/lib/onboard/fatal-runtime-preflight.ts, src/lib/readiness/*test.ts, src/lib/onboard/fatal-runtime-preflight.test.ts
Adds N1x capability and evidence states. The pending validation finding is waived only for explicit install-vllm intent.
N1x managed vLLM and onboarding integration
src/lib/inference/vllm-models.ts, src/lib/inference/vllm.ts, src/lib/onboard/vllm-menu.ts, src/lib/onboard/provider-menu.ts, src/lib/onboard/setup-nim-flow.ts, test/*vllm*.test.ts, src/lib/onboard/*test.ts
Adds the N1x profile and Qwen3.6-35B-A3B-NVFP4 model. Onboarding labels N1x entries as [Deferred preview] and excludes Local NVIDIA NIM.
N1x Express installer flow
scripts/install.sh, test/install-express-n1x.test.ts
Detects qualifying N1x hosts, presents explicit preview prompts, and activates managed vLLM with the N1x default configuration.
N1x platform documentation and support matrix
ci/platform-matrix.json, docs/get-started/*.mdx, docs/inference/*.mdx, docs/reference/*.mdx, docs/security/best-practices.mdx
Documents N1x host requirements, deferred support status, managed vLLM behavior, preview acceptance, provider restrictions, and pending physical validation.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Host as N1x FASTOS host
  participant Installer as Express installer
  participant Readiness as Readiness qualification
  participant Onboarding as Managed vLLM onboarding
  participant vLLM as N1X_PROFILE
  Host->>Installer: Provide FastOS metadata and PCI identity
  Installer->>Readiness: Evaluate N1x readiness
  Readiness-->>Installer: Return deferred validation status
  Installer->>Onboarding: Request explicit N1x preview
  Onboarding->>vLLM: Select managed vLLM profile
  vLLM-->>Onboarding: Use Qwen3.6-35B-A3B-NVFP4
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The PR detects qualified N1x Linux ARM64 hosts and offers the Express managed-vLLM preview, directly addressing [#8574].
Out of Scope Changes check ✅ Passed The installer, readiness, provider, profile, test, and documentation changes directly support the N1x Express preview objective.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: adding the N1x Express preview.
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/n1x-express-install-8574

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

@github-code-quality

github-code-quality Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit 3eb66af in the feat/n1x-express-ins... branch remains at 96%, unchanged from commit 12fe0d3 in the main branch.


Updated August 13, 2026 17:22 UTC

Comment thread scripts/install.sh Fixed
@github-actions

Copy link
Copy Markdown
Contributor

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

Actionable comments posted: 6

🧹 Nitpick comments (2)
src/lib/readiness/platform-qualification.ts (1)

367-406: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider extracting the N1x qualification block into a helper.

projectPlatformQualification now derives WSL, Station, Spark, and N1x state in one function body. The N1x block adds three derived values, a mutable status ladder, and two extra clauses to platformSupported. A small pure helper that returns { identity, qualified, status } would keep the projection readable and match the existing isQualifiedStationProfile and isQualifiedStationRuntime pattern in this file.

Also note that n1xIdentity && on Line 370 is implied by input.nvidiaPlatform === "n1x" on Line 371, because n1xIdentity is true whenever nvidiaPlatform === "n1x". The conjunct is harmless but redundant.

The behavior is correct as written. Treat this as deferrable.

🤖 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/readiness/platform-qualification.ts` around lines 367 - 406, Extract
the N1x derivation from projectPlatformQualification into a small pure helper
returning identity, qualified, and status, following the existing
isQualifiedStationProfile and isQualifiedStationRuntime pattern; use that result
in platformSupported and evidence-related logic. While extracting, remove the
redundant n1xIdentity conjunct from the n1xQualified expression, preserving the
current behavior and treating this as a deferrable cleanup.
src/lib/onboard/fatal-runtime-preflight.ts (1)

153-153: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use a shared provider identifier for "install-vllm".

No shared constant or predicate currently defines this identifier. Add one and use it in the preflight and vLLM menu checks. Preserve the current matching semantics: the preflight uses an exact comparison, while the menu trims and lowercases the value.

🤖 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/fatal-runtime-preflight.ts` at line 153, Define a shared
provider identifier or predicate for the "install-vllm" value, then update the
allowDeferredN1xManagedVllm check and the vLLM menu checks to use it. Preserve
exact matching in the preflight path and trimming/lowercasing before matching in
the menu path.

Source: Coding guidelines

🤖 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/inference/set-up-vllm.mdx`:
- Around line 48-49: Update the N1x documentation entry in the existing-server
section so the “Deferred preview” label applies only to Local vLLM managed
install/start flows, not to already-running local vLLM servers; retain the
experimental label for generic hosts.

In `@scripts/install.sh`:
- Line 3882: Replace the chained &&/|| length-check expression in the
surrounding vendor-device iteration with an explicit if condition that continues
when vendor, device, or pci_class exceeds 64 characters. Preserve the existing
filtering behavior while eliminating ShellCheck SC2015.

In `@src/lib/inference/nim.ts`:
- Line 47: Add "n1x" to ARM64_DGX_NIM_PLATFORMS and update the platform-label
selection used by the ARM64 NIM compatibility warning to provide a matching N1X
label. Extend the relevant tests to cover both the warning path and the
non-warning path for N1X hosts.

In `@src/lib/inference/platform-identity/n1x.test.ts`:
- Around line 36-41: Replace the conditional fixture chains with path-keyed
lookup tables: in src/lib/inference/platform-identity/n1x.test.ts lines 36-41,
update the readFile fixture to map vendor, device, and class values and retain
the unexpected-path throw fallback; in src/lib/inference/nim-n1x.test.ts lines
8-20, update withFirmwareModel to map absolute firmware paths and fall back to
the original fs.readFileSync for all other paths.
- Around line 92-101: Update the openFile assertion in the n1xFixture test to
verify that the flags argument includes the fs.constants.O_NOFOLLOW bit,
importing node:fs as needed, while preserving the existing path and descriptor
assertions.

In `@src/lib/readiness/platform-qualification.test.ts`:
- Around line 326-346: Update the `it.each` table in the N1x FastOS marker test
to include the expected `host.platform.n1x` capability state as explicit data
for each scenario. Replace the conditional mapping from `expectedStatus` in the
capability assertion with that table value, while keeping the qualification and
finding assertions unchanged.

---

Nitpick comments:
In `@src/lib/onboard/fatal-runtime-preflight.ts`:
- Line 153: Define a shared provider identifier or predicate for the
"install-vllm" value, then update the allowDeferredN1xManagedVllm check and the
vLLM menu checks to use it. Preserve exact matching in the preflight path and
trimming/lowercasing before matching in the menu path.

In `@src/lib/readiness/platform-qualification.ts`:
- Around line 367-406: Extract the N1x derivation from
projectPlatformQualification into a small pure helper returning identity,
qualified, and status, following the existing isQualifiedStationProfile and
isQualifiedStationRuntime pattern; use that result in platformSupported and
evidence-related logic. While extracting, remove the redundant n1xIdentity
conjunct from the n1xQualified expression, preserving the current behavior and
treating this as a deferrable cleanup.
🪄 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: a04b6fbb-cfec-431f-98d7-b5a82237df95

📥 Commits

Reviewing files that changed from the base of the PR and between ac6adac and eaa90d5.

📒 Files selected for processing (30)
  • ci/platform-matrix.json
  • docs/get-started/prerequisites.mdx
  • docs/get-started/quickstart-hermes.mdx
  • docs/get-started/quickstart-langchain-deepagents-code.mdx
  • docs/get-started/quickstart.mdx
  • docs/inference/choose-inference-provider.mdx
  • docs/inference/set-up-vllm.mdx
  • docs/reference/commands.mdx
  • docs/reference/platform-support.mdx
  • docs/reference/system-readiness.mdx
  • scripts/install.sh
  • src/lib/inference/nim-n1x.test.ts
  • src/lib/inference/nim.ts
  • src/lib/inference/platform-identity/n1x.test.ts
  • src/lib/inference/platform-identity/n1x.ts
  • src/lib/inference/vllm-models.test.ts
  • src/lib/inference/vllm-models.ts
  • src/lib/inference/vllm.ts
  • src/lib/onboard/fatal-runtime-preflight.test.ts
  • src/lib/onboard/fatal-runtime-preflight.ts
  • src/lib/onboard/vllm-menu.test.ts
  • src/lib/onboard/vllm-menu.ts
  • src/lib/readiness/host.ts
  • src/lib/readiness/onboard-admission.test.ts
  • src/lib/readiness/onboard-admission.ts
  • src/lib/readiness/platform-qualification.test.ts
  • src/lib/readiness/platform-qualification.ts
  • test/detect-vllm-profile.test.ts
  • test/install-express-n1x.test.ts
  • test/onboard-selection-vllm.test.ts

Comment thread docs/inference/set-up-vllm.mdx Outdated
Comment thread scripts/install.sh Outdated
Comment thread src/lib/inference/nim.ts
Comment thread src/lib/inference/platform-identity/n1x.test.ts
Comment thread src/lib/inference/platform-identity/n1x.test.ts
Comment thread src/lib/readiness/platform-qualification.test.ts
@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — No blocking findings reported

Advisor assessment: No blocking advisor findings reported
Next action: No advisor follow-up needed.
Findings: 0 blockers · 0 warnings · 0 suggestions

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Model comparison: normalized findings match; normalized terminology decisions differ; normalized E2E selections differ; severity counts match.
4 terminology differences from the second opinion

Advisory only. These are normalized differences from the primary terminology receipt.

  • Deferred preview at ci/platform-matrix.json:172: selected only by the second-opinion lane as justified.
  • explicit managed-vLLM preview intent at ci/platform-matrix.json:77: selected only by the second-opinion lane as define.
  • FastOS at ci/platform-matrix.json:72: selected only by the second-opinion lane as define.
  • N1x at ci/platform-matrix.json:72: selected only by the second-opinion lane as define.

Second-opinion terminology and E2E selections are advisory. Live E2E does not run automatically for pull requests.

3 semantic terminology decisions

Terminology decisions are advisory. They affect the assessment only when a separate finding identifies concrete semantic impact.

  • define — Deferred preview at docs/inference/set-up-vllm.mdx:50: Define this term at its first user-facing use as an available path pending physical E2E validation; retain the distinction from Experimental and supported.
  • justified — explicit managed-vLLM preview intent at docs/security/best-practices.mdx:334: Retain the modifier and identify NEMOCLAW_PROVIDER=install-vllm where readers need the exact admission mechanism.
  • define — N1x identity at docs/reference/system-readiness.mdx:143: Define N1x identity as the combined marker and PCI evidence at the first reference, then use the same term for qualification and admission.

E2E guidance

Advisory only. A maintainer can dispatch the default E2E suite for the commit under review.

Recommended E2E: inference-routing

Manual-only E2E: cloud-onboard, managed-image-multiarch-startup, onboard-repair, onboard-resume, network-policy
The manual PR workflow does not run these selectors for the commit under review. Run them from reviewed code on main.

1 optional E2E recommendation
  • e2e-all

Workflow run details

This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge.

Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>
Signed-off-by: San Dang <sdang@nvidia.com>

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

Actionable comments posted: 1

🤖 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/security/best-practices.mdx`:
- Around line 330-338: Update the N1x documentation in the surrounding
managed-vLLM availability section to explicitly identify N1x as preview-only and
outside the supported-platform set, note that physical Express E2E validation is
unavailable, and state that managed-vLLM requires explicit user intent after
identity qualification. Add these constraints to the existing table or
recommendation without changing availability behavior for other hosts.
🪄 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: 36e55418-0b68-4baa-8901-d3a7dea232b3

📥 Commits

Reviewing files that changed from the base of the PR and between eaa90d5 and 9d4cb43.

📒 Files selected for processing (20)
  • ci/platform-matrix.json
  • docs/inference/choose-inference-provider.mdx
  • docs/inference/choose-local-inference-server.mdx
  • docs/inference/set-up-nvidia-nim.mdx
  • docs/inference/set-up-vllm.mdx
  • docs/reference/platform-support.mdx
  • docs/security/best-practices.mdx
  • scripts/install.sh
  • src/lib/inference/nim-n1x.test.ts
  • src/lib/inference/platform-identity/n1x.test.ts
  • src/lib/onboard/fatal-runtime-preflight.ts
  • src/lib/onboard/nim-image-compat-warning.test.ts
  • src/lib/onboard/provider-menu.test.ts
  • src/lib/onboard/provider-menu.ts
  • src/lib/onboard/setup-nim-flow.ts
  • src/lib/onboard/vllm-menu.test.ts
  • src/lib/onboard/vllm-menu.ts
  • src/lib/readiness/platform-qualification.test.ts
  • src/lib/readiness/platform-qualification.ts
  • test/onboard-selection-vllm.test.ts
🚧 Files skipped from review as they are similar to previous changes (11)
  • src/lib/onboard/vllm-menu.test.ts
  • src/lib/inference/platform-identity/n1x.test.ts
  • ci/platform-matrix.json
  • src/lib/onboard/vllm-menu.ts
  • src/lib/onboard/fatal-runtime-preflight.ts
  • docs/reference/platform-support.mdx
  • docs/inference/set-up-vllm.mdx
  • src/lib/inference/nim-n1x.test.ts
  • test/onboard-selection-vllm.test.ts
  • src/lib/readiness/platform-qualification.test.ts
  • scripts/install.sh

Comment thread docs/security/best-practices.mdx
Signed-off-by: San Dang <sdang@nvidia.com>
@sandl99 sandl99 added platform: n1x Affects N1X hardware or workflows enhancement New capability or improvement request labels Aug 12, 2026
@wscurran wscurran added area: cli Command line interface, flags, terminal UX, or output area: install Install, setup, prerequisites, or uninstall flow area: local-models Local model providers, downloads, launch, or connectivity area: providers Inference provider integrations and provider behavior feature PR adds or expands user-visible functionality labels Aug 12, 2026
cv
cv previously requested changes Aug 12, 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.

  1. scripts/install.sh:3824: N1x detection compares GNU stat %F output with the English text regular file. %F is locale-sensitive: the same regular file reports Normale Datei under de_DE.utf8, fichier under fr_FR.utf8, and 通常ファイル under ja_JP.utf8. A valid N1x marker therefore fails qualification under non-English locales, and the installer omits the preview prompt. Make all marker metadata reads locale-invariant or use a numeric file-type check, including the descriptor and post-open checks at lines 3827, 3831, 3848, and 3852. Add a non-C-locale regression test that exercises metadata collection; test/install-express-n1x.test.ts:60 currently supplies the English type directly and cannot detect this failure.

  2. docs/inference/set-up-vllm.mdx:355 and docs/get-started/quickstart.mdx:60 state that an N1x user can decline or disable Express and continue to interactive provider selection. The Hermes and Deep Agents quickstarts make the same claim at lines 177 and 110. In the implemented flow, src/lib/onboard/fatal-runtime-preflight.ts:154 evaluates readiness before provider selection and waives host.platform.n1x_validation_pending only when NEMOCLAW_PROVIDER is already exactly install-vllm. An N1x user who declines the prompt or sets only NEMOCLAW_NO_EXPRESS=1 is blocked before selecting an agent or provider. Align the installer message and documentation with the accepted managed-vLLM-only preview boundary. Do not broaden the waiver to arbitrary providers without a product decision. Add regression evidence for the N1x decline and NEMOCLAW_NO_EXPRESS=1 paths.

@cjagwani cjagwani self-assigned this Aug 12, 2026
Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
@cjagwani
cjagwani requested a review from cv August 12, 2026 21:11
@cjagwani

Copy link
Copy Markdown
Collaborator

Addressed both requested blockers on current head d757108: FastOS metadata collection now uses locale-invariant numeric stat file-mode data for the path, opened descriptor, and post-open comparisons; the installer now stops N1x decline and NEMOCLAW_NO_EXPRESS-only paths with exact managed-vLLM remediation instead of promising interactive provider selection. Added non-C-locale collection plus decline, disable, and explicit install-vllm bypass regressions. Installer suite 10/10, docs build (0 errors; 2 existing warnings), repository checks, ShellCheck, shfmt, Biome, CLI build/typecheck, and normal commit/pre-push hooks pass.

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

Actionable comments posted: 3

🤖 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/get-started/quickstart-langchain-deepagents-code.mdx`:
- Around line 58-59: Restrict the interactive Express instructions to supported
non-N1x Express platforms rather than all non-N1x hosts. Update
docs/get-started/quickstart-langchain-deepagents-code.mdx lines 58-59 and
111-113 with this condition, and apply the same condition to NEMOCLAW_NO_EXPRESS
in docs/get-started/quickstart.mdx line 178.

In `@test/install-express-n1x.test.ts`:
- Around line 121-129: Update the test’s fake stat() validation to accept any
/proc/self/fd/* path for the -Lc argument, while preserving the existing trusted
marker alternative, locale check, and format-string check; do not require file
descriptor 9 specifically.
- Around line 32-41: Update the test case around runExpressPromptWithTty in
“stops before onboarding when the Deferred preview is declined” to use stdinMode
"tty" instead of "pipe", so the supplied “n\n” reaches the preview prompt and
exercises the user-decline path while preserving the existing assertions.
🪄 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: 23493515-dddc-454e-b471-543afcec028d

📥 Commits

Reviewing files that changed from the base of the PR and between cabda67 and d757108.

📒 Files selected for processing (7)
  • docs/get-started/quickstart-hermes.mdx
  • docs/get-started/quickstart-langchain-deepagents-code.mdx
  • docs/get-started/quickstart.mdx
  • docs/inference/set-up-vllm.mdx
  • docs/reference/commands.mdx
  • scripts/install.sh
  • test/install-express-n1x.test.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • docs/get-started/quickstart-hermes.mdx
  • docs/inference/set-up-vllm.mdx
  • scripts/install.sh

Comment thread docs/get-started/quickstart-langchain-deepagents-code.mdx Outdated
Comment thread test/install-express-n1x.test.ts
Comment thread test/install-express-n1x.test.ts
Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
@cjagwani

Copy link
Copy Markdown
Collaborator

Follow-up review fixes are now published at exact head 4999de16f6b57e63e13d4ca5d8681167219f86ff.

  • Scoped interactive Express guidance to supported non-N1x express hosts.
  • Generalized the stat fixture to /proc/self/fd/*.
  • Documented why the decline fixture keeps a script pipe while sending the response through the controlling TTY.

Validation: focused installer regression suite 10/10 passed after hooks; normal pre-commit and pre-push hooks passed (including repository checks, secret scan, CLI typecheck, and version sync); docs build remains 0 errors / 2 existing warnings. Independent docs review: no further documentation changes needed.

@cjagwani

Copy link
Copy Markdown
Collaborator

Exact-head CI classification for 4999de16f6b57e63e13d4ca5d8681167219f86ff: every code, docs, security, sharded test, sandbox, and direct managed-startup gate passed. The three exact image producers passed and the all-agent consumer validated the exact checkout/catalog, then failed only while onboarding OpenClaw with gateway: HTTP 0 (gateway not responding) and dashboard connection refused (job).

This is the same OpenClaw cold-start runner signature independently reproduced minutes earlier on approved PR #8901 after all three of its direct startup producers passed. It is therefore shared infrastructure evidence rather than a branch-specific regression. The other red lane is the informational Nemotron advisor (ANALYSIS_OUTCOME=failure); Terra and CodeRabbit completed successfully, and all review threads are resolved. No retry issued because two exact heads now reproduce the same external startup failure.

@wscurran wscurran added the v0.0.109 Release target label Aug 13, 2026
@sandl99

sandl99 commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator Author

Manual N1x Express end-to-end test evidence

I ran ./install.sh from the source checkout on a physical N1x host.

Test scope

  • Tested commit: 3ddf2d86560c5e5b1d48b4f70ed0242b1746910a
  • Installer version output: v0.0.107-32-g3ddf2d865
  • Result: Passing
  • Installer elapsed time: 1595s
  • Agent runtime: OpenClaw
  • Sandbox: my-assistant
  • Inference path: Deferred N1x managed-vLLM preview

Physical host

  • Architecture and OS: aarch64, Ubuntu 24.04.4 LTS, kernel 7.0.0-1015-nvidia
  • Trusted marker: /etc/fastos-release with NAME="N1x FASTOS", version 1.23.0
  • GPU: NVIDIA JMJWOA-Generic-GPU, 118775 MB
  • Display PCI identity: 10de:2e2a
  • Docker CDI: /var/run/cdi/nvidia.yaml detected; GPU preflight passed

Verified journey

  • The installer detected N1x and required explicit acceptance of the Deferred preview.
  • Preflight passed Docker, CDI GPU, bridge-container, DNS, resource, and NVIDIA GPU checks.
  • The managed OpenShell gateway did not become healthy within 60 seconds. The standalone fallback started and became healthy.
  • NemoClaw pulled pinned image nvcr.io/nvidia/vllm@sha256:9204569b17ee4c0eff75194b8e6e458479c8aee18953b5ab9cf359fcdac659e2.
  • NemoClaw downloaded nvidia/Qwen3.6-35B-A3B-NVFP4 and started vLLM on localhost:8000.
  • Onboarding detected the expected model and configured vllm-local with a 262144-token context window.
  • NemoClaw built the Arm64 sandbox image locally because no compatible published base image was available.
  • Sandbox GPU verification passed nvidia-smi when available, the /proc/<pid>/task/<tid>/comm write, and cuInit(0) through libcuda.so.1.
  • NemoClaw created the sandbox and started OpenClaw 2026.7.1.
  • NemoClaw applied the Balanced policy tier and the selected policy presets.
  • Deployment verification passed for the gateway, dashboard, and inference route.
  • The installer finished with Installation complete and reported OpenClaw available through the browser and terminal launch paths.

Evidence boundary

The transcript verifies the install, onboarding, managed-vLLM startup, sandbox creation, GPU access, policy application, and deployment health for the tested commit and host. It does not include a user inference request from the dashboard or TUI.

The PR branch advanced after this run. Later N1x installer changes are not covered by this evidence. This manual test does not by itself change the Deferred status or establish product support.

sandl99 added a commit that referenced this pull request Aug 13, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Refresh the Deep Agents Code staging QA source from `af2a73f…` to PR
#8941's merge commit, `ce96811…`. The rebuilt staging base now contains
the `libssh2` `nemoclaw2` inventory required by current candidate
images, so unrelated PRs such as #8903 no longer inherit this mismatch
from `main`.

## Changes

- Pin `STAGING_QA_SOURCE_SHA` to
`ce96811ddb418ad01c040521a1fe912b5bcb405e`.
- Update the workflow comment and exact integration assertion for the
`nemoclaw2` contract.
- Root cause: PR #8941 advanced the managed-image `libssh2` contract,
while the staging QA source remained on the earlier `nemoclaw1`
inventory.
- Detection gap: the source test enforced the recorded SHA but could not
establish image compatibility. The staging QA job detected the package
mismatch and remains the integration evidence for this repair.

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

- [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: This change only refreshes an
internal staging QA source pin and its exact workflow assertion. It
changes no CLI, public configuration, API, default, or supported user
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: Codex Desktop reviewed
commit `7445324bf` across all nine security categories. The full commit
SHA remains immutable, checkout credentials remain disabled, permissions
remain `contents: read`, and identity failures still stop the job.
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Documentation Writer Review

- [x] Documentation writer subagent reviewed the completed changes
- Result: `no-docs-needed`
- Evidence: Independent review: PASS — the internal staging comment
identifies the exact libssh2 inventory mismatch and the workflow
assertion pins the same reviewed source; no supported user-facing
behavior changes.
- Agent: Codex Desktop
<!-- docs-review-head-sha: 7445324 -->
<!-- docs-review-agents-blob-sha: c4923a3 -->

## DGX Station Hardware Evidence

- [ ] Tested on DGX Station
- Tested commit: Not applicable
- Station profile/scenario: Not applicable;
`scripts/prepare-dgx-station-host.sh` is unchanged.
- Result: Not applicable
- Supporting evidence: Not applicable

## Verification

- [x] PR description includes a `Signed-off-by:` line and every commit
appears as `Verified` in GitHub
- [x] Normal `pre-commit`, `commit-msg`, and `pre-push` hooks passed, or
`npm run validate:pr` passed after refreshing `origin/main` when hooks
were skipped or unavailable
- [x] Targeted behavior tests pass for the current change set, or tests
are marked not applicable above — `npx vitest run --project integration
test/managed-image-publication-workflow.test.ts` passed 19 tests.
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — not applicable to this focused workflow
pin update.
- [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)

---

Signed-off-by: San Dang <sdang@nvidia.com>


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Chores**
* Updated the staging quality-assurance workflow to use the latest
approved source revision and description.
* Improved consistency between staging validation settings and the
intended candidate configuration.

* **Tests**
* Updated workflow validation expectations to reflect the revised
staging source revision.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
@copy-pr-bot

copy-pr-bot Bot commented Aug 13, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@cv
cv dismissed their stale review August 13, 2026 18:20

The locale-sensitive N1x marker handling and preview-boundary documentation findings were addressed in later commits.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: cli Command line interface, flags, terminal UX, or output area: install Install, setup, prerequisites, or uninstall flow area: local-models Local model providers, downloads, launch, or connectivity area: providers Inference provider integrations and provider behavior enhancement New capability or improvement request feature PR adds or expands user-visible functionality platform: n1x Affects N1X hardware or workflows v0.0.109 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[N1x Linux][Install] Express installation not available

5 participants