Skip to content

fix(install): decouple notice acceptance from non-interactive on --station-deepseek (#7008, #7009) - #7010

Merged
apurvvkumaria merged 8 commits into
mainfrom
fix/7008-7009-station-deepseek-accept3p
Jul 16, 2026
Merged

fix(install): decouple notice acceptance from non-interactive on --station-deepseek (#7008, #7009)#7010
apurvvkumaria merged 8 commits into
mainfrom
fix/7008-7009-station-deepseek-accept3p

Conversation

@yanyunl1991

@yanyunl1991 yanyunl1991 commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes two related DGX Station express-install issues in the same scripts/install.sh code path.

#7008 — notice acceptance wrongly implied non-interactive

The documented curl-pipe install aborted immediately:

curl -fsSL https://www.nvidia.com/nemoclaw.sh | NEMOCLAW_INSTALL_TAG=v0.0.84 NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE=1 bash -s -- --station-deepseek
[ERROR] --station-deepseek selects the DGX Station express prompt and cannot be combined with --non-interactive.

NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE=1 (and --yes-i-accept-third-party-software) inferred NON_INTERACTIVE=1, which then made validate_station_deepseek_override reject --station-deepseek — a flag that explicitly selects the interactive DGX Station express prompt. The two signals are orthogonal: one accepts a licence, the other opts into an interactive flow.

Fix: skip the notice→non-interactive inference when --station-deepseek is set. The inference (and its #4414/#2671 partial-install protection) is preserved for every other install.

#7009 — the conflict error did not name the trigger

When --station-deepseek does conflict with non-interactive mode, the error printed an identical message no matter what caused it, so users could not tell why. main() exports NON_INTERACTIVE into NEMOCLAW_NON_INTERACTIVE, so the origin cannot be recovered at error time.

Fix: record the trigger during flag parsing and name it in the message:

[ERROR] --station-deepseek selects the DGX Station express prompt and cannot be combined with non-interactive mode (triggered by: the --non-interactive flag).
... (triggered by: NEMOCLAW_NON_INTERACTIVE=1).

After #7008, notice acceptance is no longer a trigger here, so the remaining triggers are the explicit flag and env var — both now named.

Verification (DGX-Station-mocked aarch64)

Drove main with the platform mocked to DGX Station, stopping right after the express preflight:

  • NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE=1 + --station-deepseekproceeds past the preflight, NON_INTERACTIVE stays unset (was: aborted).
  • --non-interactive + --station-deepseek → still conflicts, names the --non-interactive flag.
  • NEMOCLAW_NON_INTERACTIVE=1 + --station-deepseek → still conflicts, names NEMOCLAW_NON_INTERACTIVE=1.
  • notice acceptance without --station-deepseek → still implies non-interactive (regression preserved).

Added/updated cases in test/install-express-prompt.test.ts covering all four.

Fixes #7008.
Fixes #7009.

Signed-off-by: Yanyun Liao yanyunl@nvidia.com

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Bug Fixes
    • Improved installer messaging by capturing the specific reason non-interactive mode was triggered.
    • Updated third-party software notice handling so it only enables non-interactive mode when the DeepSeek station option isn’t selected.
    • Refined DeepSeek station vs. non-interactive validation to include a “triggered by” context when applicable.
  • Tests
    • Enhanced the prompt test harness to run from a selected installer entrypoint and pass entrypoint arguments.
    • Updated DeepSeek rejection/acceptance expectations, adding coverage for completing the DeepSeek express prompt without showing the non-interactive conflict message.

Scope note — no-TTY behavior (out of scope, tracked separately)

While reviewing this change we confirmed that on a host with no TTY, --station-deepseek passes validation and then the express prompt is silently skipped (maybe_offer_express_install), so the flag is ignored with no error. This is pre-existing behavior — it already affects plain --station-deepseek (without notice acceptance), and this PR only makes the notice-acceptance path consistent with it rather than introducing it. Making --station-deepseek error on a missing TTY is a separate improvement, tracked in #7014, and intentionally kept out of this PR to keep it scoped to the accept-notice/non-interactive decoupling.

…--station-deepseek (#7008, #7009)

#7008: NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE=1 (and --yes-i-accept-third-party-software)
inferred non-interactive mode, which then made --station-deepseek reject its own
required interactive DGX Station express prompt, so the documented curl-pipe install
aborted immediately. The two signals are orthogonal -- one accepts a licence, the
other opts into an interactive express flow. Skip the inference when --station-deepseek
is set so the express prompt is reached; the inference is preserved for every other
install (its #4414/#2671 partial-install protection is unchanged).

#7009: the conflict error printed the same message regardless of what put the run in
non-interactive mode. main() exports NON_INTERACTIVE into NEMOCLAW_NON_INTERACTIVE, so
the origin cannot be recovered at error time -- record it during flag parsing and name
it in the message ("the --non-interactive flag" or "NEMOCLAW_NON_INTERACTIVE=1").

Verified on a DGX-Station-mocked aarch64 host: the reported command now proceeds past
the express preflight without inferring non-interactive; explicit --non-interactive and
NEMOCLAW_NON_INTERACTIVE=1 still conflict and now name their trigger; notice acceptance
without --station-deepseek still implies non-interactive.

Signed-off-by: Yanyun Liao <yanyunl@nvidia.com>
@coderabbitai

coderabbitai Bot commented Jul 16, 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

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: d5e062c5-e8f5-43f9-a86c-1a8cc7eb2dc7

📥 Commits

Reviewing files that changed from the base of the PR and between 94f2608 and 91347bf.

📒 Files selected for processing (1)
  • test/install-express-prompt.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • test/install-express-prompt.test.ts

📝 Walkthrough

Walkthrough

The installer records why non-interactive mode was enabled, reports that source in station express conflicts, and avoids inferring non-interactive mode from third-party software acceptance when --station-deepseek is selected. Tests cover the updated messages and express flow.

Changes

Station DeepSeek installer flow

Layer / File(s) Summary
Non-interactive source tracking and express-flow exception
scripts/install.sh
Records whether non-interactive mode came from the flag or environment, reports that source in conflicts, and preserves interactive --station-deepseek behavior when third-party software acceptance is set.
Express preflight coverage
test/install-express-prompt.test.ts
Updates the PTY harness, rejection expectations, and express-flow coverage for trigger details and third-party acceptance.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related issues

Possibly related PRs

  • NVIDIA/NemoClaw#7013: Updates the same non-interactive source reporting and station express conflict coverage.

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

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.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
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the install behavior change and the DGX Station --station-deepseek conflict fix.
Linked Issues check ✅ Passed The changes address #7008 and #7009 by preserving the prompt under --station-deepseek and reporting the non-interactive trigger.
Out of Scope Changes check ✅ Passed The added test harness support is tied to validating the installer fix and does not introduce unrelated scope.
✨ 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/7008-7009-station-deepseek-accept3p

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

@github-code-quality

github-code-quality Bot commented Jul 16, 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/7008-7009-statio... branch remains at 80%, unchanged from the main branch.

Show a code coverage summary of the most impacted files.
File main d034b7f fix/7008-7009-statio... 91347bf +/-
src/lib/domain/.../connect-env.ts 89% 97% +8%

Updated July 16, 2026 17:33 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@yanyunl1991 yanyunl1991 changed the title fix(install): skip non-interactive inference from notice acceptance for --station-deepseek (#7008, #7009) fix(install): decouple notice acceptance from non-interactive on --station-deepseek (#7008, #7009) Jul 16, 2026
@github-actions

github-actions Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Informational

Advisor assessment: Informational / high confidence
Next action: No advisor follow-up needed.
Findings: 0 blockers · 0 warnings · 0 suggestions
Status: No actionable findings remain in the canonical review ledger.

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 E2E selections differ; severity counts match.

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

Workflow run details

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

shfmt (-i 2 -ci -bn) puts the binary operator at the start of the continuation
line. No behavior change.

Signed-off-by: Yanyun Liao <yanyunl@nvidia.com>
- Drop the now-dead NON_INTERACTIVE_SOURCE assignment in the notice-acceptance
  block: with the #7008 guard it only runs for non-station installs, and its
  only reader (validate_station_deepseek_override) is station-only, so the value
  is never read.
- Append the "(triggered by: ...)" clause only when the origin is known, so
  direct callers that set NON_INTERACTIVE without going through flag parsing get
  a clean message instead of a guessed attribution.

No behavior change for real installs: in main(), NON_INTERACTIVE always has a
recorded source when it is set.

Signed-off-by: Yanyun Liao <yanyunl@nvidia.com>
apurvvkumaria and others added 5 commits July 16, 2026 09:55
Co-authored-by: Yanyun Liao <yanyunl@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Co-authored-by: Yanyun Liao <yanyunl@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Co-authored-by: Yanyun Liao <yanyunl@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>
Co-authored-by: Yanyun Liao <yanyunl@nvidia.com>
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>

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

Approved at exact head 91347bf against current base d034b7f. The refresh is patch-identical to the previously reviewed production change; later commits only strengthen the real interactive Station prompt tests for env and CLI notice acceptance. All 55 current checks and exact-diff E2E are green, CodeRabbit and Advisor are clear, DCO is present, and all eight commits are Verified.

@apurvvkumaria
apurvvkumaria merged commit cca7138 into main Jul 16, 2026
76 checks passed
@apurvvkumaria
apurvvkumaria deleted the fix/7008-7009-station-deepseek-accept3p branch July 16, 2026 17:56
cv pushed a commit that referenced this pull request Jul 17, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Add the canonical dated changelog entry required before the v0.0.85
release plan can be generated.
The entry summarizes the user-visible OpenShell, DGX Station, inference,
MCP, onboarding, and recovery changes merged since v0.0.84 and links to
their owning guides.

## Changes

- Add `docs/changelog/2026-07-16.mdx` with the exact `## v0.0.85`
heading, parser-safe SPDX comment, release summary, and detailed
bullets.
- Link every documented theme to its most specific published OpenClaw
guide routes.
- Reconcile the release entry with these merged source PRs:
- #6726 -> `docs/changelog/2026-07-16.mdx`: Document the supported
OpenShell v0.0.85 upgrade, immutable consumed artifacts, multiline exec,
credential rewrite diagnostics, and child-process TLS boundary.
- #6986 -> `docs/changelog/2026-07-16.mdx`: Document managed MCP
behavior shared across supported agents.
- #6991 and #7045 -> `docs/changelog/2026-07-16.mdx`: Document qualified
DGX Station host preparation and the interactive-terminal boundary for
`--station-deepseek`.
- #6992, #7001, #7006, and #7044 -> `docs/changelog/2026-07-16.mdx`:
Document managed-model reasoning behavior, safe inference route
mutation, and verified vLLM served aliases.
- #6865, #7010, and #7028 -> `docs/changelog/2026-07-16.mdx`: Document
onboarding DNS recovery, explicit notice acceptance, and upgrades with
user-local OpenShell.
- #7005, #7021, #7029, and #7049 -> `docs/changelog/2026-07-16.mdx`:
Document rebuild backup safety, no-dashboard state, managed gateway
discovery, and Hermes shields topology checks.

## 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
- [x] Existing tests cover changed behavior — justification:
`test/changelog-docs.test.ts` validates the canonical heading,
parser-safe SPDX comment, and detailed entry structure; the docs build
validates published routes.
- [ ] 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:

## 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/changelog-docs.test.ts` passed 6/6.
- [ ] 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 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) — passed
with 0 errors and 2 pre-existing Fern warnings.
- [x] Doc pages follow the [style
guide](https://github.com/NVIDIA/NemoClaw/blob/main/docs/CONTRIBUTING.md)
(doc changes only)
- [x] New doc pages include SPDX header and frontmatter (new pages only)
— native changelog entries use the required parser-safe MDX SPDX comment
instead of frontmatter.

---
Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>


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

## Summary by CodeRabbit

* **Documentation**
  * Added release notes for NemoClaw v0.0.85.
* Documented improvements to compatibility, credential handling, setup
validation, recovery workflows, endpoint configuration, gateway
discovery, and runtime validation.
  * Added links to relevant user-guide sections.

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

Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
@wscurran wscurran added area: install Install, setup, prerequisites, or uninstall flow bug-fix PR fixes a bug or regression platform: dgx-station Affects DGX Station hardware or workflows labels Jul 29, 2026
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 bug-fix PR fixes a bug or regression platform: dgx-station Affects DGX Station hardware or workflows

Projects

None yet

4 participants