Skip to content

fix(installer): accept OTA-upgraded DGX OS on Station GB300 without image marker - #7223

Merged
jyaunches merged 1 commit into
mainfrom
fix/station-express-ota-upgraded-marker
Jul 20, 2026
Merged

fix(installer): accept OTA-upgraded DGX OS on Station GB300 without image marker#7223
jyaunches merged 1 commit into
mainfrom
fix/station-express-ota-upgraded-marker

Conversation

@hunglp6d

@hunglp6d hunglp6d commented Jul 20, 2026

Copy link
Copy Markdown
Collaborator

Summary

The Station express installer classifies a GB300 DGX OS host from its /etc/dgx-release metadata, but it only recognized DGX OS when the full-image identity field DGX_OTA_PRETTY_NAME="DGX OS" was present. A Station GB300 that was first installed from an older base image (for example 7.4.1-GB300ws) and later OTA-upgraded to 7.5.0 accrues DGX_OTA_VERSION/DGX_OTA_DATE but never gains that field, so it fell through to unsupported-dgx-os and hit the express boundary error even though it is a genuine, healthy DGX OS 7.5.0 GB300 host. This change classifies a host that carries an OTA history by its latest applied OTA version, so such a host is now recognized as supported-dgx-os and takes the existing stock-DGX-OS path that reuses the factory driver and container runtime without mutating host packages.

Related Issue

Fixes #7224

Changes

  • scripts/prepare-dgx-station-host.sh: in dgx_station_release_profile, gate the DGX OS branch on OTA-history presence and the latest DGX_OTA_VERSION (7.2.0/7.4.0/7.5.0) rather than on the DGX_OTA_PRETTY_NAME image marker. When that marker is present it must still read exactly DGX OS; when it is absent, the host must identify as the GB300 workstation via DGX_PRETTY_NAME="NVIDIA DGX GB300WS" so that other release lineages which also emit DGX_OTA_* fields stay fail-closed. The now-shadowed DGX_OTA_VERSION guard in the no-OTA branch is removed; the DGX_OTA_DATE guard is kept as defense-in-depth.
  • No new classification string or downstream wiring: the host resolves to the existing supported-dgx-osstock-dgx-os profile, which already reuses the factory driver and container runtime with no package, service, or runtime mutation.
  • test/install-station-dgx-os.test.ts: add a positive case for a marker-less OTA-upgraded GB300 workstation (mirrors the reported /etc/dgx-release, classified as supported-dgx-os), plus fail-closed cases for a non-workstation DGX Server identity and for an unreviewed latest OTA version.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification: no user-facing docs change; the DGX Station support matrix and boundary wording are unchanged (still Deferred; still DGX OS 7.2.0/7.4.0/7.5.0). Only the release-metadata classifier is broadened to recognize an OTA-upgraded host.
  • Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging)
  • Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification:
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Verification

  • 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 check:diff passed when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification:
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result:
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: Hung Le hple@nvidia.com

Summary by CodeRabbit

  • Bug Fixes

    • Improved DGX OS release detection for OTA-upgraded workstations.
    • Added validation for supported OTA versions and release identities.
    • Prevented unsupported DGX Server identities and unreviewed OTA versions from being accepted.
    • Correctly recognizes eligible OTA-upgraded GB300 workstations without a fresh-install marker.
  • Tests

    • Added coverage for OTA-upgraded workstation release detection and validation scenarios.

…mage marker

Signed-off-by: Hung Le <hple@nvidia.com>
@copy-pr-bot

copy-pr-bot Bot commented Jul 20, 2026

Copy link
Copy Markdown

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 572ff1fb-ac9c-4fbf-a1ad-47674da11bf9

📥 Commits

Reviewing files that changed from the base of the PR and between 3c4ea5a and 17dda63.

📒 Files selected for processing (2)
  • scripts/prepare-dgx-station-host.sh
  • test/install-station-dgx-os.test.ts

📝 Walkthrough

Walkthrough

The DGX Station release classifier now keys OTA detection on DGX_OTA_VERSION, supports GB300 workstations missing DGX_OTA_PRETTY_NAME, and retains supported-version and factory-image validation. Tests add OTA-upgraded fixtures plus accepted and fail-closed classification cases.

Changes

DGX OTA classification

Layer / File(s) Summary
OTA-aware release classification
scripts/prepare-dgx-station-host.sh
dgx_station_release_profile recognizes OTA history through DGX_OTA_VERSION, validates DGX identity and supported OTA versions, and removes the redundant no-OTA OTA-version rejection.
OTA release classification tests
test/install-station-dgx-os.test.ts
Adds an OTA-upgraded GB300 release fixture and tests for supported classification, invalid workstation identity, and an unsupported OTA version.

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

Possibly related PRs

Suggested labels: area: install, bug-fix, platform: dgx-station

Suggested reviewers: senthilr-nv, ericksoa

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: accepting OTA-upgraded DGX OS GB300 hosts without the image marker.
Linked Issues check ✅ Passed The code and tests implement #7224 by recognizing marker-less OTA-upgraded GB300 DGX OS hosts while fail-closing unsupported lineages and versions.
Out of Scope Changes check ✅ Passed The changes stay focused on release classification and test coverage for the reported OTA-upgrade case.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/station-express-ota-upgraded-marker

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

@github-code-quality

github-code-quality Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

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

TypeScript / code-coverage/cli

The overall coverage in the fix/station-express-... branch remains at 80%, unchanged from the main branch.

Show a code coverage summary of the most impacted files.
File main 3c4ea5a fix/station-express-... 17dda63 +/-
src/lib/sandbox...rce-identity.ts 91% 91% 0%
src/lib/state/m...ock-identity.ts 95% 95% 0%
src/lib/state/m...-acquisition.ts 84% 89% +5%
src/lib/domain/.../connect-env.ts 89% 97% +8%

Updated July 20, 2026 07:03 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@github-actions

github-actions Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Informational

Advisor assessment: Informational / high confidence
Next action: Review the warnings below.
Findings: 0 blockers · 1 warning · 0 suggestions
Status: Canonical ledger: 0 blocker(s), 1 warning(s), 0 suggestion(s).

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 0 blockers · 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 match; Nemotron reported the same number of blockers, 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: None

1 warning · 0 suggestions

Warnings

Warnings do not block.

PRA-1 Warning — Document the marker-less OTA compatibility fallback's source and retirement condition

  • Location: scripts/prepare-dgx-station-host.sh:202
  • Category: docs
  • Problem: The new fallback accepts a marker-less OTA release format based on the adjacent assertion that OTA upgrades never add DGX_OTA_PRETTY_NAME, but the repository does not identify an authoritative vendor format source or when this compatibility path can be removed.
  • Impact: Future changes to the external DGX release-file format may leave an obsolete or overbroad eligibility exception in the installer allowlist without a documented basis for maintaining or retiring it.
  • Recommendation: Add a concise reference to the authoritative vendor release-format/qualification evidence and a removal or revalidation condition next to this fallback.
  • Verification: Read the comment and fallback at scripts/prepare-dgx-station-host.sh:202-210 and search repository documentation for a cited vendor contract or lifecycle condition for marker-less DGX_OTA history.
  • Test coverage: The checked-in fixture test at test/install-station-dgx-os.test.ts:382-409 covers the current marker-less format; retain it and add any contract fixture needed when the cited vendor format is revised.
  • Evidence: scripts/prepare-dgx-station-host.sh:202-210 introduces the compatibility fallback and states that OTA upgrades never add the identity field. test/install-station-dgx-os.test.ts:382-409 supplies a current consumer-facing regression fixture, but does not establish the external metadata contract or retirement condition. The linked issue contains no maintainer decision or external contract citation; its root-cause claim is untrusted context.

Workflow run details

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

@hunglp6d
hunglp6d marked this pull request as ready for review July 20, 2026 09:11
@hunglp6d hunglp6d self-assigned this Jul 20, 2026
@hunglp6d hunglp6d added area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow VRDC Issues and PRs submitted by NVIDIA VRDC test team. v0.0.89 labels Jul 20, 2026
@jyaunches
jyaunches merged commit 20e5e66 into main Jul 20, 2026
114 checks passed
@jyaunches
jyaunches deleted the fix/station-express-ota-upgraded-marker branch July 20, 2026 13:24
@ericksoa ericksoa mentioned this pull request Jul 20, 2026
21 tasks
ericksoa added a commit that referenced this pull request Jul 20, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Add the canonical dated changelog entry for NemoClaw `v0.0.89` before
the release plan captures the tag commit.
The entry summarizes the user-visible Station preparation, inference,
recovery, policy-disclosure, and CLI-containment changes merged since
`v0.0.88`.

## Changes

- Add `docs/changelog/2026-07-20.mdx` with the exact `## v0.0.89`
release heading, parser-safe SPDX comment, summary, and detailed
bullets.
- Link each shipped theme to the most specific published OpenClaw
documentation routes.
- Keep internal E2E, advisory-registry, and review-workflow refactors
out of the user-facing release summary.

Source summary:

- #7214, #7241, #7237, #7223, #7204, #7202, #7183, and #7090 ->
`docs/changelog/2026-07-20.mdx`: Summarize qualified DGX Station
identity, package-state, PackageKit, DKMS, and reboot-handoff fixes.
- #7242, #7221, #7186, #7164, and #6874 ->
`docs/changelog/2026-07-20.mdx`: Summarize inference endpoint
provenance, provider attachment, managed vLLM cleanup and progress, and
Ollama selection guidance.
- #7225, #7216, #7192, #7136, #7096, and #6910 ->
`docs/changelog/2026-07-20.mdx`: Summarize sandbox readiness, recovery
guidance, rebuilt model routing, durable Hermes state, and gateway
restart behavior.
- #7187 -> `docs/changelog/2026-07-20.mdx`: Summarize complete effective
messaging-preset egress disclosure before policy mutation.
- #7218, #7165, and #7184 -> `docs/changelog/2026-07-20.mdx`: Summarize
structured output containment, terminal-safe route display, and Hermes
forward cleanup.

## Type of Change

- [ ] Code change (feature, bug fix, or refactor)
- [ ] Code change with doc updates
- [x] Doc only (prose changes, no code sample modifications)
- [ ] Doc only (includes code sample changes)

## Quality Gates

- [ ] Tests added or updated for changed behavior
- [ ] Existing tests cover changed behavior — justification:
- [x] Tests not applicable — justification: This PR adds release-history
prose only; the focused changelog contract test validates its required
structure and routes.
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [ ] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [ ] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification:
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Verification

- [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 — `mise exec node@22.23.1 -- npx vitest
run test/changelog-docs.test.ts` (6 passed).
- [ ] 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 doc-only release
entry.
- [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) — `mise
exec node@22.23.1 -- npm run docs` completed with 0 errors and 2
existing site-wide 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)
— the native changelog entry uses the required parser-safe MDX SPDX
comment and does not use frontmatter.

---
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>


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

## Summary by CodeRabbit

* **New Features**
* Expanded DGX Station installation support for qualified GB300 and
OTA-upgraded environments.
* Preserved selected inference providers, endpoints, model pins, and
tuning settings during sandbox creation and rebuilds.
* Improved sandbox recovery by validating availability and stability
before restarting services.
* Added clearer policy output showing the complete effective messaging
egress configuration.

* **Bug Fixes**
* Hardened status and inference route displays by sanitizing terminal
control characters.
* Improved Hermes uninstall behavior by stopping detached dashboard
forwarding.

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

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
prekshivyas added a commit that referenced this pull request Jul 24, 2026
<!-- markdownlint-disable MD041 -->
## Summary

This change documents the approved DGX Station OTA metadata fallback in
the canonical Station preparation guide.
It states the public hardware boundary as recognized GB300 hardware
while keeping exact PCI identifiers and the accepted-variant count as
implementation details.

## Changes

- [#7223](#7223) ->
`docs/get-started/dgx-station-preparation.mdx`: Document that
qualification uses the latest reviewed `DGX_OTA_VERSION`;
`DGX_OTA_PRETTY_NAME` must equal `DGX OS` when present; and marker-less
OTA hosts require `DGX_PRETTY_NAME=NVIDIA DGX GB300WS`.
- Preserve the safe, root-owned release-file gate and `DGX_PLATFORM=DGX
Server for GALAXY-GB300` requirement.
- Describe the public PCI qualification boundary only as recognized
GB300 hardware, without publishing identifiers or an accepted-variant
count.
- Extend `test/station-doc-ownership.test.ts` to protect canonical
ownership, the fallback wording, the public hardware term, and
identifier exclusion.
- Leave Quickstart, Platform Support, and provider-selection summaries
unchanged because their canonical links and summary-level statements
remain accurate.
- Rebase on merged PackageKit documentation PR #7331. The unpublished
Quickstart deduplication work touches the ownership test nearby, so
whichever branch lands second may need a mechanical rebase without a
semantic wording dependency.

## 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:
- [ ] Sensitive paths changed (security, policy, credentials, preflight,
onboarding, inference, runner, sandbox, or messaging)
- [ ] Sensitive-path review completed or maintainer-approved waiver
recorded — reviewer/approval link/justification:
- [ ] Non-success, skipped, or missing CI check accepted by maintainer —
check name, approval link, and follow-up issue:

## Documentation Writer Review

- [x] Documentation writer subagent reviewed the completed changes
- Result: `docs-updated`
- Evidence: At PR SHA `8cf7b91`, the focused integration test passed 1
file and 4 tests. `npm run docs` passed with the route checker OK, 0
errors, and 2 existing Fern warnings. `npm run check:diff` passed. The
exact-head review found no documentation issues: the OTA marker and
fallback wording matches the implementation, the force override is
limited to recognized GB300 hardware, and the ownership test excludes
raw device IDs.
- Agent: Codex Desktop
<!-- docs-review-head-sha: 8cf7b91 -->
<!-- docs-review-agents-blob-sha:
9c9b36d -->

## DGX Station Hardware Evidence

- [ ] Tested on DGX Station
- Tested commit: Not applicable.
- Station profile/scenario: Documentation-only clarification of merged
behavior.
- Result: No host behavior changed.
- Supporting evidence: Merged PR #7223 and the current Station
classifier and hardware-detection tests.

## 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 — `npx vitest run
test/station-doc-ownership.test.ts test/changelog-docs.test.ts`: 2 files
and 10 tests passed.
- [ ] Applicable broad gate passed — Not run; focused documentation
tests and the docs build cover this change.
- [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) — The
build passed with 0 errors. Fern reported the existing light-mode accent
contrast warning.
- [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: Miyoung Choi <miyoungc@nvidia.com>


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

* **Documentation**
* Refined DGX Station qualification guidance for GB300 systems,
including how OTA hosts qualify using the latest OTA version and
accepted version ranges.
* Clarified `DGX_OTA_PRETTY_NAME` expectations (including when it may be
omitted after OTA upgrades) and strengthened `DGX_PRETTY_NAME`
requirements when `DGX_OTA_PRETTY_NAME` is absent.
* Tightened the warning for `--force-station-install` to specify it
should only be used when automatic Station detection rejects recognized
GB300 `/etc/dgx-release` metadata.

* **Tests**
* Enhanced documentation ownership checks to validate OTA/GB300-specific
text and key qualification requirements.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Prekshi Vyas <prekshiv@nvidia.com>
Co-authored-by: Carlos Villela <cvillela@nvidia.com>
Co-authored-by: Prekshi Vyas <34834085+prekshivyas@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow VRDC Issues and PRs submitted by NVIDIA VRDC test team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[DGX Station][Install] Express install rejects an OTA-upgraded DGX OS 7.5.0 GB300 host missing DGX_OTA_PRETTY_NAME

3 participants