fix(ollama): verify pulled model discovery - #6481
Conversation
Port the narrow behavior from #6075 onto current main while preserving the existing onboarding test layout. Signed-off-by: Ho Lim <subhoya@gmail.com> Signed-off-by: cjagwani <cjagwani@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 (5)
🚧 Files skipped from review as they are similar to previous changes (2)
📝 WalkthroughWalkthroughAdds Ollama model-reference matching, waits for pulled models to appear before continuing, and updates onboarding plus tests to handle delayed discovery and implicit ChangesOllama model pull verification
Estimated code review effort: 4 (Complex) | ~45 minutes Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 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 covered files.
Updated |
PR Review Advisor (Nemotron Ultra) — No blocking findingsMerge posture: No blocking advisor findings Action checklist
Findings index
Review findings by urgency: 0 required fixes, 0 items to resolve/justify, 4 in-scope improvements
|
E2E Advisor RecommendationRequired E2E: Dispatch hint: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
E2E Target RecommendationRequired E2E targets: Dispatch required E2E targets:
Full E2E target advisor summaryE2E Target AdvisorBase: Required E2E targets
Optional E2E targets
Relevant changed files
|
PR Review Advisor — No blocking findingsMerge posture: No blocking advisor findings Action checklist
Test follow-ups to resolve or justifyIf these cover changed behavior, prefer adding them in this PR; otherwise state why existing coverage is enough or link the follow-up.
This is an automated, non-binding review; it still expects maintainers and agents to respond to each required or warning item. Treat suggestions as current-PR improvements when they touch changed code; defer only with maintainer rationale or a linked follow-up. A human maintainer must make the final merge decision. |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/lib/inference/ollama/proxy.ts (1)
897-913: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd user-facing feedback while waiting on model registration.
The pull step logs
Pulling Ollama model: ${model}, but the subsequentwaitForPulledOllamaModelpoll (up to several seconds) prints nothing until it fails. Given the linked issue explicitly calls out the wizard appearing to time out, a short status line (e.g. "Waiting for Ollama to register the model...") before Line 906 would reduce perceived hangs during onboarding.💡 Suggested addition
if (!(await pullOllamaModel(model))) { return { ok: false, message: `Failed to pull Ollama model '${model}'. ` + "Check the model name and that Ollama can access the registry, then try another model.", }; } + console.log(` Waiting for Ollama to register '${model}'...`); if (!waitForPulledOllamaModel(model)) {🤖 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/inference/ollama/proxy.ts` around lines 897 - 913, The Ollama pull flow in proxy.ts logs the initial pull but stays silent during the wait for registration, which makes the wizard look hung. In the code path around pullOllamaModel and waitForPulledOllamaModel, add a brief user-facing status message before waiting for the model to appear, so users see progress while the polling runs. Keep the existing failure returns unchanged, and place the new feedback adjacent to the waitForPulledOllamaModel check for easy discovery.
🤖 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.
Nitpick comments:
In `@src/lib/inference/ollama/proxy.ts`:
- Around line 897-913: The Ollama pull flow in proxy.ts logs the initial pull
but stays silent during the wait for registration, which makes the wizard look
hung. In the code path around pullOllamaModel and waitForPulledOllamaModel, add
a brief user-facing status message before waiting for the model to appear, so
users see progress while the polling runs. Keep the existing failure returns
unchanged, and place the new feedback adjacent to the waitForPulledOllamaModel
check for easy discovery.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: a1f0251a-9d3d-41ce-8ea8-17305d677400
📒 Files selected for processing (3)
src/lib/inference/ollama/proxy.test.tssrc/lib/inference/ollama/proxy.tstest/onboard-selection.test.ts
|
Comparator update: #6481 remains the preferred replacement vehicle for #6075, but it is not ready as-is. The repaired #6075 head exposed three gaps that match the exact-head advisor findings here:
I am porting those focused fixes/tests from #6075 onto this replacement branch now, then will rerun the exact-head gates. |
Exercise the real onboarding polling path and surface progress while Ollama registers a completed pull. Signed-off-by: cjagwani <cjagwani@nvidia.com>
|
Addressed the exact-head advisor gap in
Validation: proxy unit suite 8/8, full |
Treat an untagged model request as its Ollama :latest listing during installed and post-pull discovery checks. Signed-off-by: cjagwani <cjagwani@nvidia.com>
|
Folded the remaining useful edge case from the independently refreshed #6075 into exact head |
|
Thanks — |
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
E2E Target Results —
|
| Job | Result |
|---|---|
| gpu-e2e |
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
E2E Target Results —
|
| Job | Result |
|---|---|
| live | |
| ollama-auth-proxy |
E2E Target Results —
|
| Job | Result |
|---|---|
| cloud-onboard | |
| gpu-e2e |
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
E2E Target Results — ✅ All selected jobs passedRun: 28967132377
|
There was a problem hiding this comment.
🧹 Nitpick comments (2)
src/lib/inference/ollama/model-discovery.test.ts (1)
1-81: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winSolid coverage for success, delayed, and exhausted discovery paths.
Tests exercise the public
waitForPulledOllamaModelvia injectedgetModelOptions/now/sleep, and correctly assert the bounded backoff sequence and attempt counts for both the eventual-success and never-registers cases. This directly addresses the previously flagged gap.One optional addition: none of the
it.eachcases assert a non-match (e.g.,acme/model:7bvs. listedacme/model:8bshould returnfalse), so a regression innormalizeOllamaModelRef/ollamaModelRefsMatchthat makes everything match could slip through.✅ Suggested additional case
it.each([ ["llama3.2", "llama3.2:latest"], ["registry.example:5000/acme/model", "registry.example:5000/acme/model:latest"], ["acme/model:7b", "acme/model:7b"], ["acme/model@sha256:abc", "acme/model@sha256:abc"], ])("matches pulled model reference %s to listed reference %s", (requested, listed) => { expect( waitForPulledOllamaModel(requested, { getModelOptions: () => [listed], now: () => 0, sleep: () => {}, }), ).toBe(true); }); + + it("does not match a different tag on the same model", () => { + expect( + waitForPulledOllamaModel("acme/model:7b", { + getModelOptions: () => ["acme/model:8b"], + now: () => 0, + sleep: () => {}, + }), + ).toBe(false); + });🤖 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/inference/ollama/model-discovery.test.ts` around lines 1 - 81, Add a negative matching test to cover the reference normalization logic in waitForPulledOllamaModel, since the current suite only checks matching cases. Extend the existing it.each block in model-discovery.test.ts with a case where the requested and listed refs should not match (for example, a different tag for the same model), and assert the function returns false so regressions in normalizeOllamaModelRef or ollamaModelRefsMatch are caught.src/lib/inference/ollama/model-discovery.ts (1)
41-57: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winMove the no-op sleep hook out of
waitForPulledOllamaModel. The helper already acceptsdeps.sleep; keepsrc/lib/inference/ollama/model-discovery.tsprocess-free by deciding theNEMOCLAW_TEST_NO_SLEEPfallback in the caller or test harness instead of readingprocess.envhere.🤖 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/inference/ollama/model-discovery.ts` around lines 41 - 57, Move the no-op sleep fallback out of waitForPulledOllamaModel and keep model-discovery process-free. In waitForPulledOllamaModel, continue to use deps.sleep directly and remove the process.env.NEMOCLAW_TEST_NO_SLEEP check; decide that fallback in the caller or test harness instead. Update any nearby callers or tests that rely on this behavior so the function stays focused on getOllamaModelOptions, ollamaModelRefsMatch, and waitUntil.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.
Nitpick comments:
In `@src/lib/inference/ollama/model-discovery.test.ts`:
- Around line 1-81: Add a negative matching test to cover the reference
normalization logic in waitForPulledOllamaModel, since the current suite only
checks matching cases. Extend the existing it.each block in
model-discovery.test.ts with a case where the requested and listed refs should
not match (for example, a different tag for the same model), and assert the
function returns false so regressions in normalizeOllamaModelRef or
ollamaModelRefsMatch are caught.
In `@src/lib/inference/ollama/model-discovery.ts`:
- Around line 41-57: Move the no-op sleep fallback out of
waitForPulledOllamaModel and keep model-discovery process-free. In
waitForPulledOllamaModel, continue to use deps.sleep directly and remove the
process.env.NEMOCLAW_TEST_NO_SLEEP check; decide that fallback in the caller or
test harness instead. Update any nearby callers or tests that rely on this
behavior so the function stays focused on getOllamaModelOptions,
ollamaModelRefsMatch, and waitUntil.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: c0b4d155-efd2-4639-8285-f966789e6561
📒 Files selected for processing (5)
src/lib/inference/ollama/model-discovery.test.tssrc/lib/inference/ollama/model-discovery.tssrc/lib/inference/ollama/proxy.test.tssrc/lib/inference/ollama/proxy.tssrc/lib/onboard.ts
🚧 Files skipped from review as they are similar to previous changes (1)
- src/lib/onboard.ts
E2E Target Results — ✅ All requested jobs passedRun: 28967132313
|
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
|
@coderabbitai review |
✅ Action performedReview finished.
|
E2E Target Results —
|
| Job | Result |
|---|---|
| cloud-onboard | ✅ success |
| gpu-e2e | |
| ollama-auth-proxy | ✅ success |
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
|
@coderabbitai review |
✅ Action performedReview finished.
|
E2E Target Results — ✅ All requested jobs passedRun: 28968430828
|
|
Exact-head maintainer verification for signed
The remaining repository gate is independent human approval; @ericksoa is requested. I am not claiming unrun hardware acceptance: because #6038 reports the zero-model flow on DGX Spark, Ubuntu, and DGX Station and this worker has no Ollama daemon, a current-head real-flow confirmation from @wangericnv or QA (zero installed models -> pull -> registration -> warm/probe) would close that residual acceptance gap. |
Exact-head runtime evidence and acceptance scopeHead The GPU job and artifact 8179228189 provide this real-daemon chain on Linux x86_64 with an RTX PRO 6000:
The deterministic layers cover the timing boundaries that a live daemon cannot reliably force:
Source-of-truth rationale: the invalid state is a successful Ollama pull whose model is not yet visible. Ollama owns pull completion and daemon registration, so NemoClaw cannot repair that external source boundary; it can only observe Ollama's public discovery surfaces. The local mitigation is bounded to 10 seconds / 8 attempts and fails back to model selection. The code records the removal condition: remove it only when NemoClaw's minimum supported Ollama version guarantees immediate visibility and live CI verifies that guarantee. Inventing a version constant before Ollama provides such a guarantee would be misleading. Scope disclosure: the artifact does not capture a pre-pull empty Advisor cleanup is otherwise complete: the legacy |
cv
left a comment
There was a problem hiding this comment.
Approved at exact head 80b5734. Ordinary CI and CodeRabbit are clean; GPT-5.5 and Nemotron Ultra both recommend merge_as_is; all required live E2Es passed, with the real-Ollama evidence and platform scope recorded in the PR. I am not merging this PR.
<!-- markdownlint-disable MD041 --> ## Summary Prepares the user documentation for NemoClaw v0.0.78 by replacing the unreleased section with release highlights and synchronizing the affected inference, lifecycle, messaging, and CLI reference pages with merged behavior. ## Changes - Publish the v0.0.78 release-notes section with links to the most specific user guides for each shipped behavior. - Document authoritative Deep Agents route health, Nemotron Ultra profile behavior, and Hermes compatible-endpoint context metadata. - Document forced rebuild recovery after total backup failure and the ownership-safe tunnel/full-stop behavior. - Keep command examples and shared agent variants aligned with the current OpenClaw, Hermes, and Deep Agents interfaces. Source mapping: - [#3787](#3787) -> `docs/about/release-notes.mdx`: Record reliable workspace template seeding during sandbox startup. - [#4960](#4960) -> `docs/about/release-notes.mdx`: Record safer detection of rewritten OpenClaw gateway processes. - [#5676](#5676) -> `docs/about/release-notes.mdx`: Record warning-tolerant agent-list JSON handling. - [#5857](#5857) -> `docs/about/release-notes.mdx`: Record synchronization of explicit OpenClaw main-agent model state. - [#5929](#5929) -> `docs/about/release-notes.mdx`: Record copyable SSH port-forward guidance for remote dashboards. - [#6068](#6068) -> `docs/about/release-notes.mdx`: Record custom-image plugin provenance reconciliation. - [#6116](#6116) -> `docs/about/release-notes.mdx`: Record live-loopback dashboard-forward recovery. - [#6122](#6122) -> `docs/about/release-notes.mdx`: Announce validated, round-trippable policy YAML output. - [#6211](#6211) -> `docs/manage-sandboxes/lifecycle.mdx`, `docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Explain the explicit no-backup `rebuild --force` recovery boundary. - [#6283](#6283) -> `docs/about/release-notes.mdx`: Record Hermes WebUI port alignment. - [#6293](#6293) -> `docs/inference/switch-inference-providers.mdx`, `docs/about/release-notes.mdx`: Document compatible-endpoint context-length probing for Hermes. - [#6320](#6320) -> `docs/about/release-notes.mdx`: Record bounded gateway-recovery waits. - [#6377](#6377) -> `docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Explain rebuild diagnostics and prepared MCP-destroy recovery. - [#6412](#6412) -> `docs/get-started/quickstart-langchain-deepagents-code.mdx`, `docs/about/release-notes.mdx`: Document authoritative agent-visible inference route health. - [#6421](#6421) -> `docs/about/release-notes.mdx`: Record the longer quiet-pull window for managed vLLM images. - [#6431](#6431) -> `docs/inference/model-capability-audit.mdx`, `docs/about/release-notes.mdx`: Document the version-pinned Nemotron Ultra profile plugin. - [#6439](#6439) -> `docs/about/release-notes.mdx`: Summarize the authenticated, pinned credential-capture helper boundary. - [#6450](#6450) -> `docs/manage-sandboxes/messaging-channels.mdx`, `docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Document host-forward cleanup and ownership-safe gateway-port release. - [#6474](#6474) -> `docs/manage-sandboxes/messaging-channels.mdx`, `docs/about/release-notes.mdx`: Record composable OpenClaw messaging runtime loaders. - [#6475](#6475) -> `docs/about/release-notes.mdx`: Record removal of the unavailable Kimi K2.6 production endpoint option. - [#6480](#6480) -> `docs/about/release-notes.mdx`: Record stderr routing for the plugin registration banner. - [#6481](#6481) -> `docs/about/release-notes.mdx`: Record post-pull Ollama model discovery checks. - [#6482](#6482) -> `docs/about/release-notes.mdx`: Record Ollama model warm-up after daemon restart. - [#6486](#6486) -> `docs/about/release-notes.mdx`: Publish the opt-in, thread-scoped Deep Agents auto-approval boundary. - [#6490](#6490) -> `docs/about/release-notes.mdx`: Record diagnostics for custom images missing the managed runtime. - [#6494](#6494) -> `docs/inference/model-capability-audit.mdx`, `docs/about/release-notes.mdx`: Document nonempty tool-call content preservation and placeholder rejection. - [#6497](#6497) -> `docs/get-started/quickstart-langchain-deepagents-code.mdx`, `docs/about/release-notes.mdx`: Document isolated Deep Agents route-probe output. - [#6506](#6506) -> `docs/get-started/quickstart-langchain-deepagents-code.mdx`, `docs/about/release-notes.mdx`: Document observability-preserving managed route probes. - [#6508](#6508) -> `docs/about/release-notes.mdx`: Link the new extension taxonomy and SDK-readiness reference from the release summary. Release-source verification: GitHub reports all 29 cited source PRs as merged with base `main`, and every merge commit is an ancestor of `origin/main` at `17bf9a6a9688b3b1d69cf4b37d3f23110acb055e`. No source-mapping mismatches were found. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [x] Doc only (includes code sample changes) ## Quality Gates <!-- Check exactly one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: Documentation-only release-prep changes; `npm run docs` validates variants, routes, and Fern content. - [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 <!-- Check each applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [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 — command/result or justification: Tests are not applicable to this documentation-only change set. - [ ] 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) — exited 0 with zero errors; Fern reported the existing unauthenticated redirect-check and light-mode contrast 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) --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> --------- Signed-off-by: cjagwani <cjagwani@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Confirms that Ollama exposes a newly pulled model before onboarding accepts the route. This is a current-main replacement for NVIDIA#6075 that preserves Ho Lim's original authorship without carrying the conflicted test reshuffle. ## Related Issue Fixes NVIDIA#6038. ## Changes - Poll Ollama model discovery with bounded exponential backoff after a successful pull. - Return to model selection with a clear error when the daemon never lists the pulled model. - Treat omitted model tags as Ollama's canonical `:latest` form across pull authorization and post-pull discovery. - Keep model-reference, pull-readiness, and bounded discovery logic in a focused typed module.\n- Remove the legacy `@ts-nocheck` from `proxy.ts` while shrinking that hotspot below its main-branch line count. - Add deterministic wait success/exhaustion tests plus integrated delayed-registration and zero-exit/unlisted reprompt coverage. - Update existing successful-pull onboarding fixtures without growing the legacy test file. ## Type of Change - [x] Code change (bug fix) - [ ] Code change with doc updates - [ ] Doc only ## Quality Gates - [x] Tests added or updated for changed behavior - [x] Docs not applicable — this corrects existing onboarding behavior and error handling - [x] Sensitive paths changed — local Ollama onboarding and inference preparation. - [x] No secrets, API keys, or credentials committed ## Notes The registration-wait status and post-pull failure message make an existing onboarding contract explicit. The current Ollama docs already describe pull, load, and validation, so this reliability fix adds no new command, option, or workflow. ## Verification - [x] `npm run build:cli` - [x] `npm run typecheck:cli` - [x] `model-discovery.test.ts` + `proxy.test.ts` — 18/18 passed - [x] `test/onboard-selection.test.ts` — 64/64 passed - [x] Biome format and lint on all touched files - [x] `proxy.ts` shrank from 972 to 969 lines and now passes CLI type-checking without `@ts-nocheck`\n- [x] `npm run test-conditionals:scan -- --top 25`\n- [x] `npm run test-size:check` - [x] All commits are signed and the original contributor remains the first commit author --- Signed-off-by: Ho Lim <subhoya@gmail.com> Signed-off-by: cjagwani <cjagwani@nvidia.com> Signed-off-by: Carlos Villela <cvillela@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Enhanced Ollama model recognition to handle implied or differently formatted tags (e.g., `latest`) during selection and onboarding. * Added a post-pull discovery retry flow that waits for a newly pulled model to become available before proceeding. * **Bug Fixes** * Fixed cases where onboarding could continue before the model appeared in Ollama, leading to “model not found” and inconsistent recovery behavior. * **Tests** * Expanded coverage for pull completion, discovery retries, and deterministic onboarding scenarios. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Ho Lim <subhoya@gmail.com> Signed-off-by: cjagwani <cjagwani@nvidia.com> Signed-off-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: Ho Lim <subhoya@gmail.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Prepares the user documentation for NemoClaw v0.0.78 by replacing the unreleased section with release highlights and synchronizing the affected inference, lifecycle, messaging, and CLI reference pages with merged behavior. ## Changes - Publish the v0.0.78 release-notes section with links to the most specific user guides for each shipped behavior. - Document authoritative Deep Agents route health, Nemotron Ultra profile behavior, and Hermes compatible-endpoint context metadata. - Document forced rebuild recovery after total backup failure and the ownership-safe tunnel/full-stop behavior. - Keep command examples and shared agent variants aligned with the current OpenClaw, Hermes, and Deep Agents interfaces. Source mapping: - [NVIDIA#3787](NVIDIA#3787) -> `docs/about/release-notes.mdx`: Record reliable workspace template seeding during sandbox startup. - [NVIDIA#4960](NVIDIA#4960) -> `docs/about/release-notes.mdx`: Record safer detection of rewritten OpenClaw gateway processes. - [NVIDIA#5676](NVIDIA#5676) -> `docs/about/release-notes.mdx`: Record warning-tolerant agent-list JSON handling. - [NVIDIA#5857](NVIDIA#5857) -> `docs/about/release-notes.mdx`: Record synchronization of explicit OpenClaw main-agent model state. - [NVIDIA#5929](NVIDIA#5929) -> `docs/about/release-notes.mdx`: Record copyable SSH port-forward guidance for remote dashboards. - [NVIDIA#6068](NVIDIA#6068) -> `docs/about/release-notes.mdx`: Record custom-image plugin provenance reconciliation. - [NVIDIA#6116](NVIDIA#6116) -> `docs/about/release-notes.mdx`: Record live-loopback dashboard-forward recovery. - [NVIDIA#6122](NVIDIA#6122) -> `docs/about/release-notes.mdx`: Announce validated, round-trippable policy YAML output. - [NVIDIA#6211](NVIDIA#6211) -> `docs/manage-sandboxes/lifecycle.mdx`, `docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Explain the explicit no-backup `rebuild --force` recovery boundary. - [NVIDIA#6283](NVIDIA#6283) -> `docs/about/release-notes.mdx`: Record Hermes WebUI port alignment. - [NVIDIA#6293](NVIDIA#6293) -> `docs/inference/switch-inference-providers.mdx`, `docs/about/release-notes.mdx`: Document compatible-endpoint context-length probing for Hermes. - [NVIDIA#6320](NVIDIA#6320) -> `docs/about/release-notes.mdx`: Record bounded gateway-recovery waits. - [NVIDIA#6377](NVIDIA#6377) -> `docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Explain rebuild diagnostics and prepared MCP-destroy recovery. - [NVIDIA#6412](NVIDIA#6412) -> `docs/get-started/quickstart-langchain-deepagents-code.mdx`, `docs/about/release-notes.mdx`: Document authoritative agent-visible inference route health. - [NVIDIA#6421](NVIDIA#6421) -> `docs/about/release-notes.mdx`: Record the longer quiet-pull window for managed vLLM images. - [NVIDIA#6431](NVIDIA#6431) -> `docs/inference/model-capability-audit.mdx`, `docs/about/release-notes.mdx`: Document the version-pinned Nemotron Ultra profile plugin. - [NVIDIA#6439](NVIDIA#6439) -> `docs/about/release-notes.mdx`: Summarize the authenticated, pinned credential-capture helper boundary. - [NVIDIA#6450](NVIDIA#6450) -> `docs/manage-sandboxes/messaging-channels.mdx`, `docs/reference/commands.mdx`, `docs/about/release-notes.mdx`: Document host-forward cleanup and ownership-safe gateway-port release. - [NVIDIA#6474](NVIDIA#6474) -> `docs/manage-sandboxes/messaging-channels.mdx`, `docs/about/release-notes.mdx`: Record composable OpenClaw messaging runtime loaders. - [NVIDIA#6475](NVIDIA#6475) -> `docs/about/release-notes.mdx`: Record removal of the unavailable Kimi K2.6 production endpoint option. - [NVIDIA#6480](NVIDIA#6480) -> `docs/about/release-notes.mdx`: Record stderr routing for the plugin registration banner. - [NVIDIA#6481](NVIDIA#6481) -> `docs/about/release-notes.mdx`: Record post-pull Ollama model discovery checks. - [NVIDIA#6482](NVIDIA#6482) -> `docs/about/release-notes.mdx`: Record Ollama model warm-up after daemon restart. - [NVIDIA#6486](NVIDIA#6486) -> `docs/about/release-notes.mdx`: Publish the opt-in, thread-scoped Deep Agents auto-approval boundary. - [NVIDIA#6490](NVIDIA#6490) -> `docs/about/release-notes.mdx`: Record diagnostics for custom images missing the managed runtime. - [NVIDIA#6494](NVIDIA#6494) -> `docs/inference/model-capability-audit.mdx`, `docs/about/release-notes.mdx`: Document nonempty tool-call content preservation and placeholder rejection. - [NVIDIA#6497](NVIDIA#6497) -> `docs/get-started/quickstart-langchain-deepagents-code.mdx`, `docs/about/release-notes.mdx`: Document isolated Deep Agents route-probe output. - [NVIDIA#6506](NVIDIA#6506) -> `docs/get-started/quickstart-langchain-deepagents-code.mdx`, `docs/about/release-notes.mdx`: Document observability-preserving managed route probes. - [NVIDIA#6508](NVIDIA#6508) -> `docs/about/release-notes.mdx`: Link the new extension taxonomy and SDK-readiness reference from the release summary. Release-source verification: GitHub reports all 29 cited source PRs as merged with base `main`, and every merge commit is an ancestor of `origin/main` at `17bf9a6a9688b3b1d69cf4b37d3f23110acb055e`. No source-mapping mismatches were found. ## Type of Change - [ ] Code change (feature, bug fix, or refactor) - [ ] Code change with doc updates - [ ] Doc only (prose changes, no code sample modifications) - [x] Doc only (includes code sample changes) ## Quality Gates <!-- Check exactly one tests line and one docs line. Check other lines when applicable. Add every requested justification or approval reference. --> - [ ] Tests added or updated for changed behavior - [ ] Existing tests cover changed behavior — justification: - [x] Tests not applicable — justification: Documentation-only release-prep changes; `npm run docs` validates variants, routes, and Fern content. - [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 <!-- Check each applicable item only when supported by the requested evidence. Run targeted tests once per relevant change set and rerun after later edits or hook autofixes that can affect the tested behavior. Do not rerun hook-covered checks. --> - [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 — command/result or justification: Tests are not applicable to this documentation-only change set. - [ ] 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) — exited 0 with zero errors; Fern reported the existing unauthenticated redirect-check and light-mode contrast 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) --- <!-- DCO sign-off is required in this PR description, and every commit must appear as Verified in GitHub. Run: git config user.name && git config user.email --> Signed-off-by: Charan Jagwani <cjagwani@nvidia.com> --------- Signed-off-by: cjagwani <cjagwani@nvidia.com>
Summary
Confirms that Ollama exposes a newly pulled model before onboarding accepts the route. This is a current-main replacement for #6075 that preserves Ho Lim's original authorship without carrying the conflicted test reshuffle.
Related Issue
Fixes #6038.
Changes
:latestform across pull authorization and post-pull discovery.@ts-nocheckfromproxy.tswhile shrinking that hotspot below its main-branch line count.Type of Change
Quality Gates
Notes
The registration-wait status and post-pull failure message make an existing onboarding contract explicit. The current Ollama docs already describe pull, load, and validation, so this reliability fix adds no new command, option, or workflow.
Verification
npm run build:clinpm run typecheck:climodel-discovery.test.ts+proxy.test.ts— 18/18 passedtest/onboard-selection.test.ts— 64/64 passedproxy.tsshrank from 972 to 969 lines and now passes CLI type-checking without@ts-nocheck\n- [x]npm run test-conditionals:scan -- --top 25\n- [x]npm run test-size:checkSigned-off-by: Ho Lim subhoya@gmail.com
Signed-off-by: cjagwani cjagwani@nvidia.com
Signed-off-by: Carlos Villela cvillela@nvidia.com
Summary by CodeRabbit
New Features
latest) during selection and onboarding.Bug Fixes
Tests