Skip to content

feat(installer): add temporary Station metadata override#7132

Merged
apurvvkumaria merged 5 commits into
NVIDIA:mainfrom
senthilr-nv:codex/force-station-metadata-override
Jul 18, 2026
Merged

feat(installer): add temporary Station metadata override#7132
apurvvkumaria merged 5 commits into
NVIDIA:mainfrom
senthilr-nv:codex/force-station-metadata-override

Conversation

@senthilr-nv

@senthilr-nv senthilr-nv commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a temporary --force-station-install operator-intent flag for genuine DGX Station GB300 systems whose DGX release metadata is not yet recognized. The flag bypasses only the release-metadata allowlist; hardware identity and all factory-runtime health checks remain mandatory.

This PR also makes Station Express resume fail closed across a host-preparation reboot or login refresh, and corrects BaseOS failed-service qualification so the reviewed Fluent Bit template is not tied to one Station's hostname, MAC address, or IP address.

Changes

  • Recognize explicit Station intent only on detected Station GB300 hardware and only from an interactive terminal.
  • Preserve the factory driver, packages, and container runtime for forced metadata profiles; require the existing GPU, ECC, service, workload, Docker, Buildx, Toolkit, CDI, storage, and container visibility checks to pass.
  • Reject incompatible non-interactive, provider, no-express, architecture, and hardware combinations before host mutation.
  • Persist a secret-free Station Express intent and one-use receipt generation across the host-preparation boundary, restore the exact provider/model/sandbox/policy selection on resume, and retire the receipt safely after successful completion.
  • Preserve the metadata override in the exact reboot or relogin resume command.
  • Qualify the reviewed BaseOS Fluent Bit config by an exact normalized template hash while allowing only strictly formatted Hostname, MAC, and IP values to vary. Package-owned units and static configs remain exact whole-file pins.
  • Document the temporary override in the canonical Station preparation page and generated platform references.
  • Cover classification, fail-closed validation, runtime preservation, prompt behavior, receipt ownership/retirement, resume fidelity, and relogin handoff.

The temporary compatibility path is intentionally narrower than broad platform-family recognition. Unknown metadata requires explicit operator intent, and all runtime capability checks continue to fail closed.

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: Aaron Erickson approved the narrow metadata-only override boundary in internal maintainer discussion on 2026-07-17; fail-closed source review and physical Station validation were performed.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

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, including shfmt, ShellCheck, repository checks, secret scanning, and CLI type-checking
  • Targeted behavior tests pass for the current change set:
    • npx vitest run --project installer-integration test/install-express-prompt.test.ts test/install-station-dgx-os.test.ts test/install-station-host-preparation.test.ts (173 passed, 1 skipped)
    • npx vitest run test/install-station-platform-identity.test.ts (19 passed)
    • npx vitest run --project integration test/station-doc-ownership.test.ts (2 passed)
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result: not run; targeted installer, resume, platform, documentation, and normal hook gates cover this focused change
  • 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) — 0 errors with two pre-existing Fern warnings
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Physical Station evidence

Exact head 91b73d18927217595c88295889900f4a9f71ba0a was exercised on a freshly reprovisioned DGX Station GB300 using the Colossus BaseOS 7.5 image baseos-galaxy-7.5.0-GB300ws-2026-04-02-08-20-16-arm64-aarch64-standard-uefi.

  • Clean-host preflight passed; factory driver and package inventory were preserved.
  • BaseOS failed-service qualification passed on a second host identity, including the normalized Fluent Bit template.
  • CDI refresh, GB300 visibility, storage, and ECC checks passed.
  • Phase 1 exited at the expected Docker-group login boundary and produced a receipt bound to the exact revision, DeepSeek model, OpenClaw agent, sandbox, policy tier, generation, and boot ID.
  • Phase 2 accepted the receipt, restored the DeepSeek Express selection, and proceeded through host verification and onboarding without the prior malformed-resume exception.
  • The first unauthenticated model-download attempt received an external Hugging Face 429. Resuming the same failed onboarding session with a process-scoped read token completed the 160 GB download, vLLM cold initialization, sandbox build, and policy application without changing the saved Express selection.
  • Postflight passed for the exact installed commit, managed vLLM container, direct and routed inference, OpenShell gateway, sandbox CUDA, balanced plus local-inference policies, and GB300 ECC (0/0).
  • The sealed agent smoke passed: exact response STATION_CHAT_OK in 4.77 seconds; tool-created artifact in 29.16 seconds; source checksum unchanged; host evaluator confirmed exactly # Station Validation and Total: 42.

Signed-off-by: Senthil Ravichandran senthilr@nvidia.com

@senthilr-nv senthilr-nv added platform: ubuntu Affects Ubuntu Linux environments platform: arm64 Affects ARM64 or aarch64 architecture area: install Install, setup, prerequisites, or uninstall flow feature PR adds or expands user-visible functionality platform: dgx-station Affects DGX Station hardware or workflows v0.0.87 Release target labels Jul 18, 2026
@senthilr-nv senthilr-nv self-assigned this Jul 18, 2026
@coderabbitai

coderabbitai Bot commented Jul 18, 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 --force-station-install for maintainer-directed DGX Station metadata overrides. The installer preserves hardware, architecture, runtime, and interactive-terminal checks, forwards the override through host preparation and resume commands, adds boundary tests, and expands Station documentation.

Changes

DGX Station override and onboarding

Layer / File(s) Summary
Station host qualification override
scripts/prepare-dgx-station-host.sh, test/install-station-dgx-os.test.ts
Adds force-option parsing, a forced-factory-runtime profile, metadata-only bypass behavior, normalized Fluent Bit checks, and tests for remaining platform and runtime validation.
Installer flag and express-flow wiring
scripts/install.sh
Adds CLI parsing, validation, prompt messaging, host-preparation forwarding, and resume-command preservation for --force-station-install.
Installer boundary and prompt validation
test/install-express-prompt.test.ts, test/install-station-dgx-os.test.ts
Tests help output, invalid hardware and mode combinations, interactive prompt behavior, environment forwarding, classification boundaries, runtime handoff, and Fluent Bit qualification.
Station override documentation and ownership checks
docs/get-started/*, docs/inference/set-up-vllm.mdx, docs/reference/platform-support.mdx, ci/platform-matrix.json, test/station-doc-ownership.test.ts
Documents the metadata override, remaining prerequisites, installer behavior, and related Station guidance; ownership checks cover the linked pages.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Operator
  participant Installer as scripts/install.sh
  participant HostPrep as prepare-dgx-station-host.sh
  participant Runtime
  Operator->>Installer: provide --force-station-install
  Installer->>Installer: validate hardware, mode, and TTY
  Installer->>HostPrep: forward force option
  HostPrep->>Runtime: validate forced factory runtime
  Runtime-->>HostPrep: validation result
  HostPrep-->>Installer: preparation result and resume command
Loading

Possibly related PRs

  • NVIDIA/NemoClaw#7108: Modifies the overlapping DGX Station release-marker qualification flow.
  • NVIDIA/NemoClaw#7126: Modifies related Station release classification and factory-runtime handoff behavior.

Suggested labels: area: docs

Suggested reviewers: apurvvkumaria, ericksoa

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.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 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 clearly summarizes the main change: adding a temporary Station metadata override for the installer.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

Signed-off-by: Senthil Ravichandran <senthilr@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 `@test/install-station-dgx-os.test.ts`:
- Around line 505-530: Update run_apply’s reboot-required check to call an
overridable probe function instead of reading /var/run/reboot-required directly.
In the “preserves packages and the runtime for a forced metadata profile” test,
stub that probe to return false so the test does not depend on the host’s reboot
state.
🪄 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: 10957884-50e2-48e3-a20b-1d96200e7474

📥 Commits

Reviewing files that changed from the base of the PR and between 757e5e2 and 2a64c16.

📒 Files selected for processing (13)
  • ci/platform-matrix.json
  • docs/get-started/dgx-station-preparation.mdx
  • docs/get-started/quickstart.mdx
  • docs/inference/set-up-vllm.mdx
  • docs/reference/platform-support.mdx
  • scripts/install.sh
  • scripts/prepare-dgx-station-host.sh
  • src/lib/onboard/station-express-resume.test.ts
  • src/lib/onboard/station-express-resume.ts
  • test/install-express-prompt.test.ts
  • test/install-station-dgx-os.test.ts
  • test/install-station-host-preparation.test.ts
  • test/station-doc-ownership.test.ts

Comment thread test/install-station-dgx-os.test.ts
@github-actions

github-actions Bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Blocking findings reported

Advisor assessment: Blockers require maintainer review
Next action: Review the blockers below.
Findings: 1 blocker · 1 warning · 0 suggestions

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 1 blocker · 1 warning · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Model comparison: normalized findings differ; normalized E2E selections differ; Nemotron reported 1 fewer blocker, 1 fewer warning, the same number of suggestions.

Nemotron output stays in workflow artifacts and does not change the assessment above.

E2E guidance

Advisory only. E2E / PR Gate selects and runs jobs independently.

Recommended E2E: cloud-onboard

1 optional E2E recommendation
  • spark-install

Blockers

PRA-1 Blocker — Verify the exact GB300 PCI identity on the forced metadata path

  • Location: scripts/prepare-dgx-station-host.sh:643
  • Category: correctness
  • Problem: The new forced-factory-runtime branch accepts unrecognized release metadata after only the Station GB300 DMI-name check. Unlike generic-ubuntu, it does not call station_has_exact_gb300_pci_gpu. The later runtime check accepts a GPU solely when its nvidia-smi name contains "GB300", so it does not restore the exact PCI vendor/device/class identity required for the override.
  • Impact: A host whose mutable firmware product string says DGX Station GB300, but whose GPU is not the qualified GB300 PCI device, can enter the metadata-bypass factory-runtime path and proceed to express onboarding if its GPU reports a GB300-like name.
  • Fix: Before assigning forced-factory-runtime, require station_has_exact_gb300_pci_gpu against station_pci_devices_path, as the generic Ubuntu branch already does; retain the existing runtime probes afterward.
  • Verification: Read scripts/prepare-dgx-station-host.sh:635-646 and :1397-1434: generic-ubuntu checks vendor/device/class, whereas forced-factory-runtime does not and gpu_rows_are_valid matches only a GB300 name.
  • Test coverage: Add a sourced helper test with FORCE_STATION_INSTALL=1, valid ARM64/Ubuntu/DMI fixtures, unsupported metadata, and a PCI tree lacking 0x10de:0x31c2 display-class hardware; assert check_platform fails before factory-runtime validation.
  • Evidence: scripts/prepare-dgx-station-host.sh:635-638 calls station_has_exact_gb300_pci_gpu only for generic-ubuntu. scripts/prepare-dgx-station-host.sh:643-646 assigns forced-factory-runtime for unsupported metadata without an equivalent PCI check. scripts/prepare-dgx-station-host.sh:1411-1433 validates nvidia-smi rows by a GB300 name match and count, not PCI vendor/device/class. docs/get-started/dgx-station-preparation.mdx:29-31 states the override still requires genuine DGX Station GB300 hardware identity.
1 warning · 0 suggestions

Warnings

Warnings do not block.

PRA-2 Warning — Fail closed when the forced Station prompt becomes unreadable

  • Location: scripts/install.sh:3683
  • Category: correctness
  • Problem: The prompt implementation fails closed on a read error only for STATION_DEEPSEEK. When FORCE_STATION_INSTALL is set, a prompt read error instead logs “Skipping express install” and continues after preflight accepted an explicit interactive-only metadata-bypass request.
  • Impact: An explicit --force-station-install request can be silently discarded if terminal input becomes unreadable, allowing the installer to continue through a different configuration instead of rejecting the requested bypass.
  • Recommendation: In both prompt read-error branches, reject FORCE_STATION_INSTALL with fail_force_station_terminal_required (or a shared Station-explicit-flag guard), then retain the PTY regression coverage.
  • Verification: Inspect scripts/install.sh:3679-3717: both read-error branches invoke fail_station_deepseek_terminal_required only under STATION_DEEPSEEK, then otherwise log that express install is skipped.
  • Test coverage: Add a PTY prompt test with --force-station-install, an unsupported Station release state, and FORCE_EXPRESS_PROMPT_READ_FAILURE=1; assert nonzero exit, the force-terminal-required error, and no “Skipping express install” continuation.
  • Evidence: scripts/install.sh read-failure branches call fail_station_deepseek_terminal_required only when STATION_DEEPSEEK=1, otherwise log that express install is skipped. test/install-express-prompt.test.ts includes an unreadable-prompt regression for --station-deepseek but static inventory shows no equivalent force-override test. --force-station-install preflight requires an interactive Station express flow, so silently skipping its accepted prompt violates its own fail-closed contract. scripts/install.sh:3679-3717 fails read errors only for STATION_DEEPSEEK and otherwise continues after logging a skipped express install. --force-station-install is validated as an interactive-only express selection before this prompt path. F-002's existing PTY regression proposal directly verifies the required fail-closed correction.

Workflow run details

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

@senthilr-nv
senthilr-nv force-pushed the codex/force-station-metadata-override branch from 2a64c16 to a9c6cc0 Compare July 18, 2026 01:10
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Co-authored-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
@apurvvkumaria
apurvvkumaria merged commit 7ab2262 into NVIDIA:main Jul 18, 2026
58 of 61 checks passed
ericksoa pushed a commit that referenced this pull request Jul 18, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Restricts `--force-station-install` to DGX Station GB300 systems whose
release metadata is actually unrecognized. Recognized profiles now fail
before host mutation, while the remaining forced path also verifies the
exact GB300 PCI identity and fails closed if its required prompt becomes
unreadable.

## Related Issue

Fixes #7138

## Changes

- Reject the force flag during outer installer preflight when release
classification is generic Ubuntu, stock DGX OS, Colossus BaseOS, or
NVIDIA AI Developer Tools.
- Repeat the recognized-profile guard in the Station preparation helper
so direct callers cannot enter package or runtime preparation.
- Require the exact NVIDIA GB300 PCI vendor, device, and display-class
identity before selecting the forced factory-runtime profile.
- Fail closed when the forced interactive prompt becomes unreadable
instead of silently continuing through another install path.
- Add regression coverage for all recognized release states, unchanged
unforced generic Ubuntu behavior, mutation boundaries, exact PCI
identity, and prompt-read failure.

The PCI and prompt-read changes close the two unaddressed force-path
findings reported by the PR Review Advisor on #7132.

## 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: the Station preparation,
quickstart, and platform-support pages already document the narrow
metadata-only override and mandatory hardware/runtime checks; this fix
makes implementation match that contract.
- [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: accepted scope and
fail-before-mutation criteria are recorded in #7138; the exact PCI and
prompt-read gaps were independently reported in the final PR Review
Advisor review on #7132.
- [ ] 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,
including shfmt, ShellCheck, repository checks, secret scanning, CLI
type-checking, and commitlint
- [x] Targeted behavior tests pass for the current change set — `npx
vitest run --project installer-integration
test/install-express-prompt.test.ts test/install-station-dgx-os.test.ts`
(128 passed, 1 skipped); `npx vitest run --project installer-integration
test/install-station-host-preparation.test.ts` (55 passed); `npx vitest
run --project integration
test/install-station-platform-identity.test.ts` (20 passed)
- [ ] 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)

---
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>


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

## Summary by CodeRabbit

* **Bug Fixes**
* Improved forced DGX Station installation validation for
already-supported host configurations.
* Added clearer errors when required GPU hardware is missing or does not
match.
* Improved non-interactive installation failures when an interactive
terminal is required.
  * Prevented system changes when platform identity checks fail.
* **Tests**
* Added coverage for supported release profiles, invalid GPU identities,
and unreadable installation prompts.

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

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: install Install, setup, prerequisites, or uninstall flow feature PR adds or expands user-visible functionality platform: arm64 Affects ARM64 or aarch64 architecture platform: dgx-station Affects DGX Station hardware or workflows platform: ubuntu Affects Ubuntu Linux environments v0.0.87 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants