fix(onboard): render truthful Ollama status in the inference menu - #6753
Conversation
Interactive onboarding gated the local daemon probes on the shared-gateway route preflight, so any unrelated registry route on the same gateway silently hid a running Ollama or vLLM daemon from the menu: the entry rendered as "Local Ollama (localhost:11434)" with no running suffix and no detection banner. The probe only drives status display; route conflicts stay enforced at selection time through assertRouteCompatible, so interactive runs now always probe while non-interactive runs keep the preflight gate. An installed-but-stopped daemon also rendered the status-style label "Local Ollama (WSL:11434)", which reads as a reachability claim while the daemon is down. Selecting that entry is the deliberate auto-start path, so it now renders the action label "Start local Ollama (WSL:11434)" instead. Suppressing the entry was rejected: on WSL with native Docker it is the only in-wizard path to a local Ollama. The Windows-host "(requires Docker Desktop WSL integration)" suffix is working as designed; the Windows preparation guide now states that requirement and the Ollama setup page describes the interactive re-prompt accurately instead of claiming an exit. Refs #6750 Signed-off-by: Dongni Yang <dongniy@nvidia.com>
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 |
|
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)
📝 WalkthroughWalkthroughInteractive onboarding now permits local provider probes despite route conflicts, while non-interactive runs retain gating. Ollama’s stopped-state menu label and Windows/WSL remediation guidance are updated with corresponding tests. ChangesOnboarding behavior
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
🌿 Preview your docs: https://nvidia-preview-pr-6753.docs.buildwithfern.com/nemoclaw |
E2E Advisor RecommendationRequired E2E: Dispatch hint: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
PR Review Advisor — No blocking findingsMerge posture: No blocking advisor findings This is an automated review. Required findings need action before merge. Warnings and optional suggestions do not require a response or follow-up. A human maintainer makes the final merge decision. |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
src/lib/onboard/setup-nim-provider-discovery.test.ts (1)
31-61: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winCover the non-interactive vLLM gate.
The implementation has independent non-interactive Ollama and vLLM branches, but these tests only exercise the non-interactive Ollama intent. Add blocked and allowed vLLM cases so the
probeVllmroute-gating branch cannot regress silently.As per path instructions, tests should provide behavioral confidence for each changed 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/setup-nim-provider-discovery.test.ts` around lines 31 - 61, Add corresponding blocked and allowed non-interactive vLLM tests alongside the existing Ollama cases in the setup provider discovery test suite. Configure the non-interactive provider as vLLM and assert probeVllm is false when canProbeRoute returns false and true when it returns true, preserving the existing dependency and setup patterns.Source: Path instructions
src/lib/onboard/setup-nim-flow.test.ts (1)
358-386: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winExercise selection-time conflict enforcement through the public boundary.
This test only proves that
canProbeRouteis not called; its selection stub choosesnvidia-prod, and no local-provider rejection throughassertRouteCompatibleis exercised. Add a local selection case that remains blocked by a route conflict while retaining the probe assertions.As per path instructions, tests should verify observable behavior through the public boundary rather than rely on mock-call assertions.
🤖 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/setup-nim-flow.test.ts` around lines 358 - 386, Update the test around createSetupNim and setupNim to exercise a conflicting local-provider selection that is rejected through the public setup flow by assertRouteCompatible, while preserving the interactive discovery behavior and expected detect:true:true probe event. Replace the canProbeRoute call-count assertion with observable outcome assertions showing local selection remains blocked, and retain the remote-selection setup only as needed to reach the public boundary.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/windows-preparation.mdx`:
- Line 165: Update the Windows Ollama onboarding guidance in the surrounding
paragraph to scope express install to Docker Desktop WSL integration being
available. Explicitly direct users running native Docker Engine inside WSL to
use the WSL Ollama instance and avoid the Windows-host path.
---
Nitpick comments:
In `@src/lib/onboard/setup-nim-flow.test.ts`:
- Around line 358-386: Update the test around createSetupNim and setupNim to
exercise a conflicting local-provider selection that is rejected through the
public setup flow by assertRouteCompatible, while preserving the interactive
discovery behavior and expected detect:true:true probe event. Replace the
canProbeRoute call-count assertion with observable outcome assertions showing
local selection remains blocked, and retain the remote-selection setup only as
needed to reach the public boundary.
In `@src/lib/onboard/setup-nim-provider-discovery.test.ts`:
- Around line 31-61: Add corresponding blocked and allowed non-interactive vLLM
tests alongside the existing Ollama cases in the setup provider discovery test
suite. Configure the non-interactive provider as vLLM and assert probeVllm is
false when canProbeRoute returns false and true when it returns true, preserving
the existing dependency and setup patterns.
🪄 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: 256064f7-d897-426a-9b9b-182c9ebe9c21
📒 Files selected for processing (7)
docs/get-started/windows-preparation.mdxdocs/inference/set-up-ollama.mdxsrc/lib/onboard/ollama-install-menu.test.tssrc/lib/onboard/ollama-install-menu.tssrc/lib/onboard/setup-nim-flow.test.tssrc/lib/onboard/setup-nim-provider-discovery.test.tssrc/lib/onboard/setup-nim-provider-discovery.ts
The express prompt appears on any WSL host, but the Windows-host Ollama path it selects requires Docker Desktop WSL integration, so native Docker Engine users need to decline it and pick WSL Ollama instead. Refs #6750 Signed-off-by: Dongni Yang <dongniy@nvidia.com>
cjagwani
left a comment
There was a problem hiding this comment.
Exact-head maintainer review complete on c92259b. CI is green, all commits are Verified with PR-body DCO, the trusted PR Review Advisor reports merge_as_is, and no unresolved actionable threads remain. Security review across the nine categories found no credential, input-validation, authorization, dependency, logging, cryptography, configuration, testing, or holistic-posture regression: interactive local-daemon probing only drives truthful menu status, while route compatibility is still enforced when a provider is selected. The added tests preserve the non-interactive fail-closed route gate and cover stopped-daemon labels.
<!-- markdownlint-disable MD041 --> ## Summary Release-prep documentation for v0.0.82 now summarizes user-facing changes merged since v0.0.81. It also closes stale wording in the stopped-sandbox backup, snapshot-clone, Ollama selection, and custom-policy authoring guidance. ## Changes - Add the `v0.0.82` section to `docs/about/release-notes.mdx` with links to the focused user guides. - Document that snapshot clones receive a destination-owned dashboard port before destructive replacement begins. - Align `backup-all` guidance with eligible stopped Docker-driver sandboxes that NemoClaw starts temporarily. - Describe the running and stopped Ollama menu states without claiming one fixed label. - Document runtime rejection of catch-all hosts in custom policy files. ### Source summary - [#6748](#6748) -> `docs/about/release-notes.mdx`, `docs/manage-sandboxes/lifecycle.mdx`, and `docs/reference/commands.mdx`: Summarize non-destructive sandbox `stop` and `start` commands. - [#6723](#6723) -> `docs/about/release-notes.mdx`, `docs/manage-sandboxes/backup-restore.mdx`, and `docs/reference/commands.mdx`: Record temporary startup and cleanup for eligible stopped-sandbox backups. - [#6749](#6749) -> `docs/about/release-notes.mdx` and `docs/manage-sandboxes/backup-restore.mdx`: Document destination-owned dashboard ports for snapshot clones. - [#6764](#6764) -> `docs/about/release-notes.mdx`: Summarize installer handling of route-only onboarding placeholders. - [#6771](#6771) -> `docs/about/release-notes.mdx`, `docs/inference/set-up-vllm.mdx`, `docs/inference/choose-inference-provider.mdx`, `docs/reference/commands.mdx`, and `docs/reference/platform-support.mdx`: Summarize managed-vLLM storage gates, immutable image digests, and the explicit override boundary. - [#6759](#6759) -> `docs/about/release-notes.mdx`: Record early, actionable OpenShell gateway-port conflict diagnostics. - [#6753](#6753) -> `docs/about/release-notes.mdx` and `docs/inference/set-up-ollama.mdx`: Document truthful running and stopped Ollama menu states. - [#6776](#6776) -> `docs/about/release-notes.mdx`: Summarize proxy-independent loopback readiness checks. - [#6769](#6769) -> `docs/about/release-notes.mdx`: Record compatible endpoint and agent guidance when Chat Completions is unavailable. - [#6730](#6730) -> `docs/about/release-notes.mdx`: Summarize bounded reuse of an eligible successful Chat Completions check. - [#6768](#6768) -> `docs/about/release-notes.mdx`: Record route-reservation repair during resumed onboarding. - [#6742](#6742) -> `docs/about/release-notes.mdx`: Summarize pre-mutation resolution of secret-free sandbox create intent. - [#6721](#6721) -> `docs/about/release-notes.mdx` and `docs/get-started/quickstart-langchain-deepagents-code.mdx`: Record bounded cleanup of completed managed Deep Agents headless sessions. - [#6731](#6731) -> `docs/about/release-notes.mdx` and `docs/network-policy/customize-network-policy.mdx`: Document runtime rejection of catch-all custom-policy destinations. - [#6729](#6729) -> `docs/about/release-notes.mdx` and `docs/get-started/prerequisites.mdx`: Record the Node.js 22.19 minimum. - [#6735](#6735) -> `docs/about/release-notes.mdx` and `docs/reference/platform-support.mdx`: Summarize the Ubuntu 26.04 userspace contract without claiming pending host or live validation. - [#6775](#6775) -> `docs/about/release-notes.mdx` and `docs/resources/community-contributions.mdx`: Route independent solutions outside canonical supported-product documentation. - [#6740](#6740) -> `docs/about/release-notes.mdx`: Summarize the semantic dependency-upgrade contributor workflow. - [#6777](#6777) -> `docs/about/release-notes.mdx` and `docs/CONTRIBUTING.md`: Summarize the route-safe documentation-refactor workflow. - [#6741](#6741) -> `docs/about/release-notes.mdx` and `docs/security/openclaw-2026.6.10-dependency-review.md`: Summarize reviewed npm archive verification and audit enforcement. - [#6739](#6739) -> `docs/about/release-notes.mdx` and `docs/security/openclaw-2026.6.10-dependency-review.md`: Record the locked offline dependency graph for the managed OpenClaw WeChat runtime. - [#6737](#6737) -> `docs/about/release-notes.mdx`: Record removal of the messaging build plan from final OpenClaw and Hermes image environments. - [#6733](#6733) -> `docs/about/release-notes.mdx`: Summarize cached plugin dependency layers for source and blueprint rebuilds. ### Skipped from docs-skip - None. No commit or changed path in `v0.0.81..origin/main` matched `openclaw-sandbox-permissive.yaml` or `config-show`, and the drafted content contains none of the configured skip terms. ## 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 is a documentation-only release-prep update; behavior is protected by the merged source PRs, and the documentation build validates the changed routes and agent variants. - [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 the DCO sign-off declaration 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 — tests are not applicable for this documentation-only change. - [ ] 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 for this documentation-only 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) — 0 errors; two pre-existing Fern warnings remain. - [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) — no new pages. --- Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Updated release notes with improvements to sandbox recovery, onboarding, session management, policy validation, storage checks, and system requirements. * Clarified Ollama setup instructions and status labels. * Documented safer snapshot restoration, including dedicated ports and protection against destructive failures. * Expanded `backup-all` coverage to include eligible stopped sandboxes. * Added guidance rejecting broad or catch-all network destinations in custom policies. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com>
Summary
Interactive onboarding gated the local daemon probes on the shared-gateway route preflight, so any unrelated registry route on the same gateway silently hid a running Ollama or vLLM daemon from the step [3/8] inference menu (no
— runningsuffix, no detection banner). Interactive runs now always probe — route conflicts stay enforced at selection time viaassertRouteCompatible— and an installed-but-stopped daemon renders the action labelStart local Ollama (WSL:11434)instead of a status-style label that reads as a reachability claim.Related Issue
Refs #6750
Changes
src/lib/onboard/setup-nim-provider-discovery.ts: stop ANDingcanProbeRouteintoprobeOllama/probeVllmon the interactive path; non-interactive runs keep the preflight gate. Selection-time containment (assertRouteCompatibleinguardProviderInferenceRouteSelection) is unchanged and remains the enforcement point for shared-gateway route conflicts.src/lib/onboard/ollama-install-menu.ts: renderStart local Ollama (<host>)when the daemon is installed but not running; the running label (Local Ollama (<host>) — running (suggested)) is unchanged. The entry stays because selecting it is the deliberate auto-start path — suppressing it would leave WSL users on native Docker with no in-wizard path to a local Ollama.src/lib/onboard/setup-nim-flow.test.ts: update the probe-gating contract test to the new interactive behavior.src/lib/onboard/setup-nim-provider-discovery.test.ts(new) andsrc/lib/onboard/ollama-install-menu.test.ts: regression tests that fail without the fix, plus guards pinning the retained non-interactive gate.docs/get-started/windows-preparation.mdx,docs/inference/set-up-ollama.mdx: state the Docker Desktop WSL integration requirement for the Windows-host Ollama path and describe the interactive re-prompt accurately (the third symptom in [macOS][Onboard] onboard inference menu: Ollama items display incorrect status on macOS and WSL2 #6750 — the(requires Docker Desktop WSL integration)suffix — is working as designed; the expected(loopback only — switch to 0.0.0.0)wording never existed in the codebase).Type of Change
Quality Gates
Verification
Verifiedin GitHubpre-commit,commit-msg, andpre-pushhooks passed, ornpm run check:diffpassed when hooks were skipped or unavailablenpx vitest run --project cli src/lib/onboard/— 294/295 files pass (2905 tests); new regression tests confirmed red before the fix and green after; the one failing file (created-sandbox-finalization.test.ts, 2 tests, [All Platforms][Onboard] --fresh re-onboard keeps the old in-sandbox model — nemoclaw status shows the new model while the agent still runs the previous one #6311) fails identically on pristineupstream/mainand is unrelatednpm testfor broad runtime/test-harness changes;npm run checkfor repo-wide validation/coverage changes — command/result:npm run docsbuilds without warnings (doc changes only) — 0 errors; the 2 reported warnings are pre-existing (identical count on a build without this change)Signed-off-by: Dongni Yang dongniy@nvidia.com
Summary by CodeRabbit
New Features
Bug Fixes
Documentation
NEMOCLAW_NO_EXPRESS=1).