fix(install): decouple notice acceptance from non-interactive on --station-deepseek (#7008, #7009) - #7010
Conversation
…--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>
|
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:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughThe 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 ChangesStation DeepSeek installer flow
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related issues
Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Code Coverage OverviewLanguages: TypeScript TypeScript / code-coverage/pluginThe overall coverage remains at 96%, unchanged from the TypeScript / code-coverage/cliThe overall coverage in the Show a code coverage summary of the most impacted files.
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: 1 optional E2E recommendation
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>
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
left a comment
There was a problem hiding this comment.
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.
<!-- 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>
Summary
Fixes two related DGX Station express-install issues in the same
scripts/install.shcode 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-deepseekNEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE=1(and--yes-i-accept-third-party-software) inferredNON_INTERACTIVE=1, which then madevalidate_station_deepseek_overridereject--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-deepseekis 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-deepseekdoes conflict with non-interactive mode, the error printed an identical message no matter what caused it, so users could not tell why.main()exportsNON_INTERACTIVEintoNEMOCLAW_NON_INTERACTIVE, so the origin cannot be recovered at error time.Fix: record the trigger during flag parsing and name it in the message:
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
mainwith the platform mocked toDGX Station, stopping right after the express preflight:NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE=1+--station-deepseek→ proceeds past the preflight,NON_INTERACTIVEstays 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.--station-deepseek→ still implies non-interactive (regression preserved).Added/updated cases in
test/install-express-prompt.test.tscovering all four.Fixes #7008.
Fixes #7009.
Signed-off-by: Yanyun Liao yanyunl@nvidia.com
🤖 Generated with Claude Code
Summary by CodeRabbit
Scope note — no-TTY behavior (out of scope, tracked separately)
While reviewing this change we confirmed that on a host with no TTY,
--station-deepseekpasses 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-deepseekerror 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.