fix(installer): enable stock DGX OS on Station GB300#7108
Conversation
Signed-off-by: Aaron Erickson <aerickson@nvidia.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:
📝 WalkthroughWalkthroughDGX Station express install now validates safe release markers, distinguishes stock DGX OS from generic Ubuntu preparation, and verifies factory GPU runtimes without host mutation. Installer guidance, support documentation, tests, and direct-GPU sysfs policies are updated. ChangesDGX Station express qualification
Direct GPU policy sysfs access
Estimated code review effort: 4 (Complex) | ~60 minutes Sequence Diagram(s)sequenceDiagram
participant Installer
participant HostPreparation
participant Docker
participant GPU
Installer->>HostPreparation: classify Station release
HostPreparation->>Docker: select local default daemon
HostPreparation->>GPU: validate driver, ECC, CDI, and visibility
GPU->>Docker: run CDI and --gpus all probes
Docker-->>HostPreparation: validation result
HostPreparation-->>Installer: continue or stop
Possibly related issues
Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
🌿 Preview your docs: https://nvidia-preview-pr-7108.docs.buildwithfern.com/nemoclaw |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage remains at 96%, unchanged from the branch. Updated |
PR Review Advisor — InformationalAdvisor assessment: Informational / high confidence Model lanes
Nemotron output stays in workflow artifacts and does not change the assessment above. E2E guidanceAdvisory only. E2E / PR Gate selects and runs jobs independently. Recommended E2E: 2 optional E2E recommendations
This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge. |
There was a problem hiding this comment.
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 `@scripts/prepare-dgx-station-host.sh`:
- Around line 84-90: Update the OTA history validation around the key-processing
loop in scripts/prepare-dgx-station-host.sh (lines 84-90) to require each
DGX_OTA_VERSION immediately followed by DGX_OTA_DATE, reject orphan dates,
duplicate or consecutive versions, and reject a dangling final version. Add
regression cases in test/install-station-dgx-os.test.ts (lines 87-114) covering
duplicate versions, orphan dates, and a missing final date.
🪄 Autofix (Beta)
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: 436a29d7-8426-4255-95e0-80d5bcb28c84
📒 Files selected for processing (10)
docs/get-started/prerequisites.mdxdocs/get-started/quickstart.mdxscripts/checks/vitest-project-overlap.tsscripts/install.shscripts/prepare-dgx-station-host.shtest/install-express-prompt.test.tstest/install-station-dgx-os.test.tstest/install-station-host-preparation.test.tstest/test-boundary-guards.test.tsvitest.config.ts
This reverts commit 0da802e. Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
|
Exact-head evidence for
Physical Station cleanup/status after the bounded test:
Exact-head local gates:
No private hostnames, endpoints, lab paths, credentials, or internal report links are included in this PR. |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
test/install-station-host-preparation.test.ts (1)
60-73: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy liftPrefer behavioral assertions over source-text locking.
fs.readFileSync(...)plus literal substring and regex checks fail on harmless wording changes while not proving that the installer boundary behaves correctly. Prefer generated published output or a behavior-level contract, keeping only the minimum cross-file consistency check.As per path instructions, tests should provide behavioral confidence rather than implementation or source-text lock-in.
🤖 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 `@test/install-station-host-preparation.test.ts` around lines 60 - 73, Replace the source-text assertions in the test around the DGX OS sandbox boundary with behavioral checks against generated or published station-preparation output. Verify the resulting contract communicates the failed sandbox boundary, avoids treating host probes as qualification, and preserves only the minimum necessary cross-file consistency check; remove brittle literal and regex matching on implementation wording.Source: Path instructions
🤖 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.mdx`:
- Around line 216-219: Update the headless or CI installation guidance in the
quickstart to explicitly select the DeepSeek V4 Flash managed-vLLM recipe using
NEMOCLAW_PROVIDER=install-vllm and NEMOCLAW_VLLM_MODEL=deepseek-v4-flash, or
link directly to the corresponding concrete example in set-up-vllm.mdx; keep the
interactive --station-deepseek guidance unchanged.
In `@docs/inference/set-up-vllm.mdx`:
- Around line 160-163: Scope the managed-vLLM claims in the DGX Station setup
documentation to Station systems running the generic Ubuntu 24.04 ARM64 control:
update the default-availability statement and the provider-only installation
guidance, while leaving the existing qualification warning and other platform
guidance unchanged.
---
Nitpick comments:
In `@test/install-station-host-preparation.test.ts`:
- Around line 60-73: Replace the source-text assertions in the test around the
DGX OS sandbox boundary with behavioral checks against generated or published
station-preparation output. Verify the resulting contract communicates the
failed sandbox boundary, avoids treating host probes as qualification, and
preserves only the minimum necessary cross-file consistency check; remove
brittle literal and regex matching on implementation wording.
🪄 Autofix (Beta)
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: 0d93fb25-366e-4934-98c6-99705a2f6e6e
📒 Files selected for processing (10)
ci/platform-matrix.jsondocs/get-started/prerequisites.mdxdocs/get-started/quickstart.mdxdocs/inference/choose-inference-provider.mdxdocs/inference/set-up-vllm.mdxdocs/reference/platform-support.mdxscripts/install.shscripts/prepare-dgx-station-host.shtest/install-express-prompt.test.tstest/install-station-host-preparation.test.ts
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
This reverts commit faf9850.
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
scripts/install.sh (1)
3271-3280: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winSelect the local Docker context before Station preparation.
run_station_host_preparationcurrently runs first, so the generic profile can inspect and probe an ambient remoteDOCKER_HOSTor context. The installer then switches to local Docker, meaning the runtime actually used by onboarding was not validated. Move the context selection beforeensure_station_express_host.Proposed fix
prepare_installer_host() { maybe_offer_express_install + if [[ "${_SELECTED_EXPRESS_PLATFORM:-}" == "DGX Station" ]]; then + unset DOCKER_HOST + export DOCKER_CONTEXT=default + fi ensure_station_express_host - if [[ "${_SELECTED_EXPRESS_PLATFORM:-}" == "DGX Station" ]]; then - unset DOCKER_HOST - export DOCKER_CONTEXT=default - fi ensure_docker🤖 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 `@scripts/install.sh` around lines 3271 - 3280, Update prepare_installer_host so the DGX Station local Docker context selection occurs before calling ensure_station_express_host. Move the DOCKER_HOST unset and DOCKER_CONTEXT=default export block ahead of Station preparation, preserving the platform guard and leaving ensure_docker after preparation.
🧹 Nitpick comments (2)
src/lib/onboard/initial-policy.test.ts (2)
132-146: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winCover
/sysalready present inread_write.
buildDirectGpuPolicyYamlchecks both policy lists, but these tests only cover/sysinread_only. Add a fixture with/sysinread_writeand verify it is not duplicated intoread_only.As per path instructions, tests should provide behavioral confidence for the changed branches.
🤖 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/initial-policy.test.ts` around lines 132 - 146, Add a test case in the existing initial-policy tests using buildDirectGpuPolicyYaml with /sys already listed under filesystem_policy.read_write, then assert /sys is not added or duplicated in filesystem_policy.read_only. Keep the fixture focused on this branch and preserve the existing read_only coverage.Source: Path instructions
128-130: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAvoid locking tests to array ordering.
The contract is presence, removal, and non-duplication; assert those properties with
toContain/not.toContainand a count check for/sysinstead of exact ordered arrays.As per path instructions, tests should provide behavioral confidence rather than implementation lock-in.
Also applies to: 145-146
🤖 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/initial-policy.test.ts` around lines 128 - 130, Update the filesystem policy assertions in the GPU policy tests to avoid exact array ordering: use containment checks for required paths, non-containment checks for removed paths, and verify `/sys` appears exactly once. Apply the same assertion style to the additional assertions around the referenced second location, preserving coverage of presence, removal, and non-duplication.Source: Path instructions
🤖 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 `@scripts/prepare-dgx-station-host.sh`:
- Around line 119-123: Restore the fail-closed stock DGX OS boundary: in
scripts/prepare-dgx-station-host.sh lines 119-123 remove stock version and
host-profile support; in scripts/install.sh lines 2962-2966 allow Station
express only for generic-ubuntu. Update test/install-express-prompt.test.ts
lines 681-704 and 760-788, test/install-station-dgx-os.test.ts lines 54-68 and
237-260, and test/install-station-host-preparation.test.ts lines 60-63 to assert
stock rejection, blocker guidance, and removal of unreachable stock validation.
Update prerequisites.mdx lines 44-74 and quickstart.mdx lines 122-134, 201-217,
and 240 to document rejection before mutation, generic Ubuntu or non-express
alternatives, and the unresolved OpenShell sandbox runtime blocker.
In `@src/lib/onboard/initial-policy.test.ts`:
- Line 82: Append the applicable local issue reference, such as (`#7103`), as the
final suffix to the changed test titles in the tests around the cases at lines
82 and 132, including the title beginning “prepares sysfs read access…”.
---
Outside diff comments:
In `@scripts/install.sh`:
- Around line 3271-3280: Update prepare_installer_host so the DGX Station local
Docker context selection occurs before calling ensure_station_express_host. Move
the DOCKER_HOST unset and DOCKER_CONTEXT=default export block ahead of Station
preparation, preserving the platform guard and leaving ensure_docker after
preparation.
---
Nitpick comments:
In `@src/lib/onboard/initial-policy.test.ts`:
- Around line 132-146: Add a test case in the existing initial-policy tests
using buildDirectGpuPolicyYaml with /sys already listed under
filesystem_policy.read_write, then assert /sys is not added or duplicated in
filesystem_policy.read_only. Keep the fixture focused on this branch and
preserve the existing read_only coverage.
- Around line 128-130: Update the filesystem policy assertions in the GPU policy
tests to avoid exact array ordering: use containment checks for required paths,
non-containment checks for removed paths, and verify `/sys` appears exactly
once. Apply the same assertion style to the additional assertions around the
referenced second location, preserving coverage of presence, removal, and
non-duplication.
🪄 Autofix (Beta)
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: fd34b3db-9553-4b2f-8a9d-2e3676d3bc0a
📒 Files selected for processing (12)
docs/get-started/prerequisites.mdxdocs/get-started/quickstart.mdxscripts/checks/vitest-project-overlap.tsscripts/install.shscripts/prepare-dgx-station-host.shsrc/lib/onboard/initial-policy.test.tssrc/lib/onboard/initial-policy.tstest/install-express-prompt.test.tstest/install-station-dgx-os.test.tstest/install-station-host-preparation.test.tstest/test-boundary-guards.test.tsvitest.config.ts
apurvvkumaria
left a comment
There was a problem hiding this comment.
Requesting changes on exact head 2d85bac48439cdf62d84ebdb1c628d3bdc6a19b8 for the following release and sandbox-safety blockers:
-
The current installer and prerequisites enable stock DGX OS 7.2.0/7.4.0/7.5.0, while
ci/platform-matrix.json, the vLLM documentation, and this PR's description state that no stock DGX OS release is qualified and record a CUDA initialization failure inside a real OpenShell sandbox. Host and plain-container GPU visibility is not sufficient for this boundary. Please restore the fail-closed stock-image behavior, or provide a successful exact-head physical OpenShell acceptance run and make the implementation, PR description, platform matrix, and all docs agree. -
ensure_station_express_hostruns before the installer clearsDOCKER_HOSTand selects the local default context. The generic preparation path also uses the ambient Docker client for workload checks. That can inspect one daemon and then continue onboarding against another. Select and bind the intended local daemon before every preparation/workload check, prove the same daemon is used throughout, and add a regression for non-defaultDOCKER_HOST/DOCKER_CONTEXTinput. -
The platform boundary is not strong enough for automatic host mutation. A standalone
P3830token passes the DMI predicate, after which the generic Ubuntu path can begin package changes before proving the expected GB300 GPU identity. The release-marker parser also claims to reject NVIDIA BaseOS but has no positive audited discriminator and can accept the same release-file schema/version. Please fail closed on an exact qualified product/image identity, prove the GPU identity before mutation, and add negative fixtures for BaseOS and unrelatedP3830hosts. -
The change adds the whole
/systree read-only to every direct-GPU sandbox policy. That is a global isolation-boundary expansion, not a DGX-OS-only adjustment, and the current unit assertion does not establish least privilege or that it fixes the real OpenShell failure. Please scope it to the minimum required paths (or justify why that is impossible), add boundary coverage, and include successful real-sandbox acceptance evidence before relying on it to qualify this path.
The current codebase-growth-guardrails failure also needs to be resolved. I did not find an authorization, credential-exposure, command-injection, or unpinned-download regression in the reviewed diff, but the trust-boundary, fail-closed, isolation, and platform-identity findings above block approval.
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
docs/get-started/prerequisites.mdx (1)
44-50: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winAlign all Station documentation with the fail-closed qualification boundary.
The same stale claim appears across the public docs: stock DGX OS is presented as accepted and sandbox
cuInit(0)as validated, while the PR objective keeps stock images rejected before host mutation and the supplied qualification summary records a real-OpenShellcuInit(0)segfault.
docs/get-started/prerequisites.mdx#L44-L50: document generic Ubuntu 24.04 ARM64 as the express-qualified path and stock images as blocked.docs/get-started/prerequisites.mdx#L65-L77: remove the implication that stock validation completed successfully.docs/inference/set-up-vllm.mdx#L160-L165: describe the unresolved blocker instead of stock qualification.docs/reference/platform-support.mdx#L85-L85: correct the generated Station platform row and regenerate it from the matrix source.docs/reference/platform-support.mdx#L107-L107: remove the stock-DGX-OS managed-vLLM qualification claim.Based on the supplied PR objectives and qualification summary.
🤖 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 `@docs/get-started/prerequisites.mdx` around lines 44 - 50, Align all Station documentation with fail-closed qualification: in docs/get-started/prerequisites.mdx lines 44-50, present generic Ubuntu 24.04 ARM64 as the only express-qualified path and state that stock DGX OS images are blocked; update lines 65-77 to remove any claim of successful stock validation. In docs/inference/set-up-vllm.mdx lines 160-165, describe the unresolved real-OpenShell cuInit(0) blocker. Correct the generated Station row in docs/reference/platform-support.mdx line 85 by updating and regenerating it from the platform-support matrix source, and remove the stock-DGX-OS managed-vLLM qualification claim at line 107.
🤖 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.
Outside diff comments:
In `@docs/get-started/prerequisites.mdx`:
- Around line 44-50: Align all Station documentation with fail-closed
qualification: in docs/get-started/prerequisites.mdx lines 44-50, present
generic Ubuntu 24.04 ARM64 as the only express-qualified path and state that
stock DGX OS images are blocked; update lines 65-77 to remove any claim of
successful stock validation. In docs/inference/set-up-vllm.mdx lines 160-165,
describe the unresolved real-OpenShell cuInit(0) blocker. Correct the generated
Station row in docs/reference/platform-support.mdx line 85 by updating and
regenerating it from the platform-support matrix source, and remove the
stock-DGX-OS managed-vLLM qualification claim at line 107.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 0ae1d629-6c49-4e66-8ed9-e7b6bc543538
📒 Files selected for processing (12)
ci/platform-matrix.jsondocs/get-started/prerequisites.mdxdocs/get-started/quickstart.mdxdocs/inference/choose-inference-provider.mdxdocs/inference/set-up-vllm.mdxdocs/reference/platform-support.mdxscripts/install.shscripts/prepare-dgx-station-host.shsrc/lib/onboard/initial-policy.test.tstest/install-express-prompt.test.tstest/install-station-dgx-os.test.tstest/install-station-host-preparation.test.ts
🚧 Files skipped from review as they are similar to previous changes (6)
- docs/inference/choose-inference-provider.mdx
- src/lib/onboard/initial-policy.test.ts
- docs/get-started/quickstart.mdx
- ci/platform-matrix.json
- scripts/install.sh
- scripts/prepare-dgx-station-host.sh
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/lib/onboard/initial-policy.ts (1)
324-334: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winAdd one public-boundary regression test for the complete Station sysfs flow.
src/lib/onboard/initial-policy.ts#L324-L334: protect forwarding fromstationGb300SysfsReadOnlyPathsinto direct-GPU policy generation.src/lib/onboard/initial-policy.test.ts#L158-L201: invokeprepareInitialSandboxCreatePolicy, inspect the generated policy, and run its cleanup.As per path instructions, tests must prove that public entrypoints reach the new path.
🤖 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/initial-policy.ts` around lines 324 - 334, Add a public-boundary regression test covering the complete Station sysfs flow. In src/lib/onboard/initial-policy.ts lines 324-334, preserve forwarding of stationGb300SysfsReadOnlyPaths into direct-GPU policy generation; in src/lib/onboard/initial-policy.test.ts lines 158-201, invoke prepareInitialSandboxCreatePolicy, inspect the generated policy for the forwarded paths, and execute the returned cleanup.Sources: Coding guidelines, Path instructions
🤖 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 `@test/install-station-host-preparation.test.ts`:
- Around line 123-124: Update the expectations in the Station product-identifier
test for “P3830” and “NVIDIA P3830 Rev A” from false to true, preserving the
existing test structure so both newly supported identities are accepted.
---
Outside diff comments:
In `@src/lib/onboard/initial-policy.ts`:
- Around line 324-334: Add a public-boundary regression test covering the
complete Station sysfs flow. In src/lib/onboard/initial-policy.ts lines 324-334,
preserve forwarding of stationGb300SysfsReadOnlyPaths into direct-GPU policy
generation; in src/lib/onboard/initial-policy.test.ts lines 158-201, invoke
prepareInitialSandboxCreatePolicy, inspect the generated policy for the
forwarded paths, and execute the returned cleanup.
🪄 Autofix (Beta)
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: efce602d-b72f-403f-a06c-49d83fe3809f
📒 Files selected for processing (12)
ci/platform-matrix.jsondocs/get-started/prerequisites.mdxdocs/inference/choose-inference-provider.mdxdocs/inference/set-up-vllm.mdxdocs/reference/platform-support.mdxscripts/install.shscripts/prepare-dgx-station-host.shsrc/lib/onboard/initial-policy.test.tssrc/lib/onboard/initial-policy.tstest/install-express-prompt.test.tstest/install-station-dgx-os.test.tstest/install-station-host-preparation.test.ts
🚧 Files skipped from review as they are similar to previous changes (9)
- docs/inference/set-up-vllm.mdx
- docs/inference/choose-inference-provider.mdx
- docs/reference/platform-support.mdx
- ci/platform-matrix.json
- test/install-station-dgx-os.test.ts
- test/install-express-prompt.test.ts
- scripts/install.sh
- docs/get-started/prerequisites.mdx
- scripts/prepare-dgx-station-host.sh
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Physical Station acceptance and release-tag gateValidated code head
The PR was squash-merged as |
<!-- markdownlint-disable MD041 --> ## Summary DGX Station host preparation now follows the host-profile boundary established by merged PR #7108: generic Ubuntu requires the reviewed exact prerequisite tuple, while qualifying stock DGX OS validates its factory runtime without package or runtime mutation. The installer also accepts an exact verified Docker `.asc` source, selects GB300 driver and ECC rows by PCI identity on mixed-GPU systems, and keeps express output concise while retaining the full audit log. ## Changes - Reconcile the branch with current `main` and preserve the fail-closed generic Ubuntu and validation-only stock DGX OS profiles from #7108. Unknown package, driver, and CUDA-keyring drift is rejected; the reviewed factory DKMS transition remains the only generic profile exception. - Pass the complete pinned prerequisite tuple unchanged through APT availability, simulation, installation, and exact post-install verification. This avoids a missing-only solve that could mutate retained prerequisites. - Reuse an existing Docker repository only when its source bytes exactly match the reviewed `.gpg` or `.asc` form and the referenced key is byte-identical to the freshly downloaded SHA-256 and fingerprint-verified key. New repository configuration continues to use the dearmored `.gpg` form. - Match `nvidia-smi` rows to the GB300 through exact PCI vendor, device, and display-class identity before applying driver and ECC qualification. Auxiliary NVIDIA GPUs are reported and skipped. - Show the Station audit-log path plus all warnings and errors in express install, while keeping verbose preparation details in the private log. - Update prerequisites documentation and split focused Docker-repository and package-transaction tests out of the host-preparation suite. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [x] 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: - [x] Docs updated for user-facing behavior changes - [ ] Docs not applicable — justification: - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: The current revision implements the fail-closed boundaries requested in [maintainer feedback](#7090 (comment)) and aligns profile handling with merged #7108. Exact-profile, full-tuple APT, PCI-identity, CUDA-keyring, repository-file, rollback, and file-safety contracts have focused regression coverage. The current head awaits human re-review. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## 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 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 — full `npx vitest run --project installer-integration --testTimeout=15000` (295 passed, 2 skipped); Station platform identity (22 passed); `npm run test:projects:check`; `npm run test-size:check`; Bash syntax and ShellCheck. - [ ] Applicable broad gate passed — `npm test` for broad runtime/test-harness changes; `npm run check` for repo-wide validation/coverage changes — not applicable: this is a focused installer revision, and the complete installer-integration project plus diff-scoped repository gate passed. - [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) — passed with 0 errors; Fern continues to report 2 existing warnings. - [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) --- Signed-off-by: San Dang <sdang@nvidia.com> Signed-off-by: Julie Yaunches <jyaunches@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved DGX Station GPU detection and driver/ECC validation by matching devices to their PCI identities. * Added stricter Docker repository and signing-key compatibility checks. * Prevented unsafe or unexpected package changes during host preparation. * Improved installer output by preserving useful logs, warnings, and errors while filtering irrelevant details. * **Improvements** * Updated DGX Station host preparation version and strengthened installation reliability. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: San Dang <sdang@nvidia.com> Signed-off-by: Apurv Kumaria <akumaria@nvidia.com> Signed-off-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: Julie Yaunches <jyaunches@nvidia.com> Co-authored-by: Apurv Kumaria <akumaria@nvidia.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Summary
7.2.0,7.4.0, or7.5.0.StationandGB300DMI identifiers. Generic Ubuntu preparation also requires the exact NVIDIA GB300 PCI identity (10de:31c2) before any host mutation./etc/dgx-releasemarker with a strict schema, well-formed OTA history,DGX_OTA_PRETTY_NAME="DGX OS", andDGX_PLATFORM="DGX Server for GALAXY-GB300".nvidia-ctkCDI, and GPU visibility through both CDI and--gpus allbefore continuing./sys, the PCI parent subtree, or sysfs write access.P3830, partial product matches, unknown DGX OS releases, NVIDIA BaseOS, unsafe markers, and other Station generations fail-closed.Why
Issue #7103 reports that the released express installer rejects the stock DGX OS image shipped on Station. The prior qualification also exposed the OpenShell sandbox CUDA failure tracked in NVIDIA/OpenShell#2343. NemoClaw can safely address that runtime behavior at its policy boundary while retaining released OpenShell
0.0.85.This does not claim that NVIDIA/OpenShell#2343 is fixed upstream, promote Station support, or cover the dual-Station work in #7091.
Fixes #7103.
Physical Station evidence
A clean-application-baseline run at
58c11e9d6passed end to end on physical DGX OS7.5.0Station GB300:8000/8080listeners, installed NemoClaw/OpenShell commands, and failed systemd units before installation;0.0.85and localnvidia/nemotron-3-ultra-550b-a55bserving;595.71.05and volatile ECC0/0;write_fileandread_fileoperations.A separate physical A/B policy test established the least-privilege sysfs boundary encoded at
2db0ea0bc:/sys/fs/cgroup/cgroup.controllersand/sys/class/net/lo/addressremained denied;/sysnor/sys/bus/pci/devicesis added to the generated policy.The exact
2db0ea0bcfull clean-install acceptance then passed in 910 seconds:2db0ea0bcc3ecce1406ffea497465070d6ec4b7f;0009:06:00.0, CPU, memory, NUMA, and NVIDIA module-init sysfs paths, with no broad/sysor PCI parent entry;write_fileandread_file, and the resulting two-line artifact was independently verified;The final physical acceptance used code head
7a7414b3d80a9cb38257a276cd926fd48a93ec0e. The merge head55fe0c11cc549374a2605b882d16bf3ec40b9c3dis a signed, empty CI-retry commit with the identical Git tree and zero source diff. From a clean application baseline on stock DGX OS7.5.0Station GB300:0;complete, non-resumable, and had no remaining Station intent, retirement claim, or resume receipt;0.0.85, local Nemotron Ultra, Hermes Agent, host GPU discovery, sandbox GPU enablement, and CUDA verification were healthy;write_fileandread_filetasks in both one-shot mode and the real interactive TUI.The PR was squash-merged as
929389f6fa556f0b81139fa1d7d5f14926a05f1d. The release-tag gate is the complete default E2E fan-out on currentmaintag candidatee7e8b674e0d7fcaa37ad3806d5f39df352e702c4, which contains this merge. It was dispatched with no job or target selectors and the internal-NVIDIA inference override: https://github.com/NVIDIA/NemoClaw/actions/runs/29607823884Verification
main; the complete tag-candidate E2E matrix is tracked separately as the release-tag gate.Physical validation here is intentionally single-Station and does not change the platform matrix from Deferred.
v0.0.86 release evidence
e7e8b674e0d7fcaa37ad3806d5f39df352e702c4, which contains squash merge929389f6fa556f0b81139fa1d7d5f14926a05f1d.mcp-bridge (deepagents)deterministically loses a tmpfs-only marker after a graceful gateway restart. The release exception is limited to that lifecycle expectation; the narrow correction is #7119 and is labeled forv0.0.87.v0.0.86is an annotated, SSH-signed GitHub-Verified tag objectefd753e485520de4491e7733a58c3410d2a4eff4;latestis independently an annotated, SSH-signed GitHub-Verified tag objectadb5eafa35f4a510f32a41ed81e160944374343d. Both peel to the exact release commit above.lkgremains unchanged at45b1cb5a01f3408743c8479772af4ad9d4a91fc8.Signed-off-by: Aaron Erickson aerickson@nvidia.com