fix(onboard): support reasoning-compatible endpoints - #5948
Conversation
Supersedes the reviewed implementation in #3286 with clean, verified history. Co-authored-by: Deepak Jain <deepujain@gmail.com> Signed-off-by: Deepak Jain <deepujain@gmail.com> Signed-off-by: Carlos Villela <cvillela@nvidia.com>
📝 WalkthroughWalkthroughAdds ChangesCompatible Endpoint Reasoning Mode
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes 🚥 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 in the Show a code coverage summary of the most covered files.
TypeScript / code-coverage/cliThe overall coverage in the Show a code coverage summary of the most covered files.
Updated |
|
🌿 Preview your docs: https://nvidia-preview-pr-5948.docs.buildwithfern.com/nemoclaw |
E2E Advisor RecommendationRequired E2E: Dispatch hint: Auto-dispatched E2E: Full advisor summaryE2E Recommendation AdvisorBase: Required E2E
Optional E2E
New E2E recommendations
Dispatch hint
|
Vitest E2E Scenario RecommendationRequired Vitest E2E scenarios: Dispatch required Vitest E2E scenarios:
Full Vitest E2E advisor summaryVitest E2E Scenario AdvisorBase: Required Vitest E2E scenarios
Optional Vitest E2E scenarios
Relevant changed files
|
PR Review Advisor (Nemotron Ultra) — BlockedMerge posture: Do not merge until addressed Action checklist
Findings index
🚨 Required before mergeAddress these before merging unless a maintainer explicitly overrides the advisor with rationale.
|
PR Review Advisor — Changes requestedMerge posture: Do not merge yet Action checklist
Findings index
Review findings by urgency: 0 required fixes, 1 item to resolve/justify, 0 in-scope improvements
|
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Selective E2E Results — ✅ All requested jobs passedRun: 28338590826
|
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (2)
src/lib/state/onboard-session.ts (1)
103-103: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winNarrow the persisted reasoning flag to its normalized union.
normalizeReasoningFlag()already reduces this value to"true","false", ornull, but the session/update/debug contracts widen it back tostring | null. That makes typos persist to disk and only get silently coerced later on resume. Tightening these fields to the literal union would keep the contract honest end to end.Also applies to: 173-173, 203-203
🤖 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/state/onboard-session.ts` at line 103, Narrow the persisted reasoning flag to the normalized literal union so the session contract stays honest end to end. Update the relevant types around compatibleEndpointReasoning in the onboard session model and the related update/debug contracts to use "true" | "false" | null instead of string | null, and make sure normalizeReasoningFlag remains the single place that converts incoming values into that union.src/lib/onboard/machine/handlers/provider-inference.test.ts (1)
155-158: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAssert the handler result instead of
recordStepCompleteinternals.These expectations couple the test to the current session-write plumbing.
handleProviderInferenceState()already returns the reasoning state, so this is more robust if you assert the returned state/session rather than the mock-call payload.
As per path instructions, "Prefer observable outcomes through the public boundary over source-text, private-shape, or mock-call assertions."Also applies to: 217-223
🤖 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/machine/handlers/provider-inference.test.ts` around lines 155 - 158, The test is asserting `recordStepComplete` mock internals instead of the observable result from `handleProviderInferenceState()`. Update the affected expectations in `provider-inference.test.ts` to verify the handler’s returned state/session outcome (including reasoning fields like `compatibleEndpointReasoning` and `provider`) rather than the payload passed into `recordStepComplete`, and apply the same change to the other matching assertion block.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 `@src/lib/onboard/inference-selection-validation.ts`:
- Around line 188-193: The reasoning-mode check in the inference probe path is
using a raw `process.env.NEMOCLAW_REASONING === "true"` comparison, which
bypasses the shared alias-normalization logic. Update `runOpenAiLikeProbe` setup
in `inference-selection-validation` to read the flag through the existing shared
reasoning helper used elsewhere in the codebase, and then use that normalized
boolean for `requireResponsesToolCalling`, `skipResponsesProbe`, and
`probeStreaming` so this path has a single source of truth.
In `@src/lib/onboard/machine/handlers/provider-inference.ts`:
- Around line 291-294: The provider selection flow in provider-inference should
explicitly clear NEMOCLAW_REASONING whenever the chosen provider is not
"compatible-endpoint", since the current path only preserves
selection.compatibleEndpointReasoning and can leave stale reasoning state
behind. Update the provider-selection handling around
compatibleEndpointReasoning and setupNim so non-compatible selections call the
clearing path (same behavior as the resume bridge) and only compatible-endpoint
retains or configures the flag.
---
Nitpick comments:
In `@src/lib/onboard/machine/handlers/provider-inference.test.ts`:
- Around line 155-158: The test is asserting `recordStepComplete` mock internals
instead of the observable result from `handleProviderInferenceState()`. Update
the affected expectations in `provider-inference.test.ts` to verify the
handler’s returned state/session outcome (including reasoning fields like
`compatibleEndpointReasoning` and `provider`) rather than the payload passed
into `recordStepComplete`, and apply the same change to the other matching
assertion block.
In `@src/lib/state/onboard-session.ts`:
- Line 103: Narrow the persisted reasoning flag to the normalized literal union
so the session contract stays honest end to end. Update the relevant types
around compatibleEndpointReasoning in the onboard session model and the related
update/debug contracts to use "true" | "false" | null instead of string | null,
and make sure normalizeReasoningFlag remains the single place that converts
incoming values into that union.
🪄 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: d80b0fda-816b-48ed-ab02-3351c78b795f
📒 Files selected for processing (28)
ci/platform-matrix.jsondocs/inference/inference-options.mdxdocs/reference/platform-support.mdxsrc/lib/onboard.tssrc/lib/onboard/compatible-endpoint-smoke.test.tssrc/lib/onboard/compatible-endpoint-smoke.tssrc/lib/onboard/inference-selection-validation.tssrc/lib/onboard/machine/core-flow-phases.test.tssrc/lib/onboard/machine/core-flow-phases.tssrc/lib/onboard/machine/flow-context.test.tssrc/lib/onboard/machine/flow-context.tssrc/lib/onboard/machine/flow-phases/agent-policy-finalization.test.tssrc/lib/onboard/machine/flow-phases/preflight-gateway.test.tssrc/lib/onboard/machine/flow-phases/provider-sandbox.test.tssrc/lib/onboard/machine/flow-sequence.test.tssrc/lib/onboard/machine/flow-slices.test.tssrc/lib/onboard/machine/handlers/provider-inference.test.tssrc/lib/onboard/machine/handlers/provider-inference.tssrc/lib/onboard/machine/initial-flow-phases.test.tssrc/lib/onboard/reasoning-mode.test.tssrc/lib/onboard/reasoning-mode.tssrc/lib/onboard/session-updates.tssrc/lib/onboard/setup-nim-selection.test.tssrc/lib/onboard/setup-nim-selection.tssrc/lib/state/onboard-session.test.tssrc/lib/state/onboard-session.tstest/helpers/onboard-final-flow-phases.tstest/package-contract/onboard/compatible-endpoint-reasoning.test.ts
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Vitest E2E Scenario Results — ✅ All requested jobs passedRun: 28338756522
|
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 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/inference/inference-options.mdx`:
- Around line 240-241: The reasoning flag docs mention an unsupported truthy
alias, so align the documentation with `normalizeReasoningFlag()` behavior.
Update the `NEMOCLAW_REASONING` onboarding text to list only the aliases
actually accepted by the normalizer (`true`, `1`, `yes`, `y`), or, if intended,
update `normalizeReasoningFlag()` and its callers to accept `on` as part of the
same change.
🪄 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: d0ed7435-d0af-4319-ae65-14d3f57c18f0
📒 Files selected for processing (4)
docs/inference/inference-options.mdxsrc/lib/onboard/inference-selection-validation.tssrc/lib/onboard/setup-nim-selection.tstest/generate-platform-docs.test.ts
🚧 Files skipped from review as they are similar to previous changes (2)
- src/lib/onboard/inference-selection-validation.ts
- src/lib/onboard/setup-nim-selection.ts
Vitest E2E Scenario Results — ✅ All requested jobs passedRun: 28338756552
|
Selective E2E Results —
|
| Job | Result |
|---|---|
| messaging-compatible-endpoint-e2e | |
| onboard-resume-e2e |
Selective E2E Results —
|
| Job | Result |
|---|---|
| cloud-onboard-e2e | |
| onboard-repair-e2e |
Vitest E2E Scenario Results —
|
| Job | Result |
|---|---|
| onboard-repair-vitest |
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Vitest E2E Scenario Results — ✅ All requested jobs passedRun: 28338925985
|
Vitest E2E Scenario Results — ✅ All requested jobs passedRun: 28338925944
|
Vitest E2E Scenario Results — ✅ All requested jobs passedRun: 28338925937
|
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Selective E2E Results — ✅ All requested jobs passedRun: 28339119308
|
Selective E2E Results —
|
| Job | Result |
|---|---|
| cloud-onboard-e2e | ✅ success |
| messaging-compatible-endpoint-e2e | ✅ success |
| onboard-repair-e2e | |
| onboard-resume-e2e | ✅ success |
Vitest E2E Scenario Results —
|
| Job | Result |
|---|---|
| messaging-compatible-endpoint-vitest | ✅ success |
| onboard-repair-vitest | |
| onboard-resume-vitest | ✅ success |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 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 `@src/lib/onboard/inference-selection-validation.test.ts`:
- Around line 4-12: The afterEach hook in inference-selection-validation.test.ts
is unconditionally deleting NEMOCLAW_REASONING, which can clobber an existing
suite baseline; capture the original process.env.NEMOCLAW_REASONING value in the
test setup and restore that exact value after each test instead of always
deleting it. Update the test cleanup around
createInferenceSelectionValidationHelpers to preserve caller-provided
environment state.
🪄 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: 0d673f82-9832-4a07-83ed-f5589e233dd4
📒 Files selected for processing (3)
docs/inference/inference-options.mdxsrc/lib/onboard/compatible-endpoint-smoke.tssrc/lib/onboard/inference-selection-validation.test.ts
🚧 Files skipped from review as they are similar to previous changes (2)
- src/lib/onboard/compatible-endpoint-smoke.ts
- docs/inference/inference-options.mdx
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
|
Advisor follow-up for final head
Runtime and acceptance follow-ups (
I am not adding a second combined live scenario: the package contract already combines the flag, custom selection, normalization, and probe path, while the required live resume/repair/messaging/cloud scenarios cover the external runtime boundaries. A new scenario would duplicate substantial setup for no distinct state transition. All ordinary PR checks and automated advisor checks pass, all CodeRabbit threads are resolved, local commit/push hooks pass, |
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
There was a problem hiding this comment.
🧹 Nitpick comments (1)
test/package-contract/onboard/compatible-endpoint-reasoning.test.ts (1)
110-110: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winDrop the log-text assertion.
Line 110 checks a specific console phrase instead of behavior. This test already proves the reasoning path through the returned selection and the captured curl invocations, so a harmless rewording would fail it unnecessarily.
As per path instructions, "Prefer observable outcomes through the public boundary over source-text, private-shape, or mock-call assertions."
Suggested change
- assert.ok(payload.lines.some((line: string) => line.includes("tools and streaming")));🤖 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 `@test/package-contract/onboard/compatible-endpoint-reasoning.test.ts` at line 110, Remove the log-text assertion from the compatible-endpoint-reasoning test because it is checking a specific console phrase rather than observable behavior. Update the test in compatible-endpoint-reasoning.test.ts to rely on the returned selection and captured curl invocations only, and drop the payload.lines.some(...includes("tools and streaming")) expectation so wording changes won’t break it.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 `@test/package-contract/onboard/compatible-endpoint-reasoning.test.ts`:
- Line 110: Remove the log-text assertion from the compatible-endpoint-reasoning
test because it is checking a specific console phrase rather than observable
behavior. Update the test in compatible-endpoint-reasoning.test.ts to rely on
the returned selection and captured curl invocations only, and drop the
payload.lines.some(...includes("tools and streaming")) expectation so wording
changes won’t break it.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: abbb89a8-84ba-46b9-bf4f-079814b9a548
📒 Files selected for processing (5)
docs/inference/inference-options.mdxsrc/lib/onboard/machine/handlers/provider-inference.test.tssrc/lib/onboard/setup-nim-selection.test.tssrc/lib/onboard/setup-nim-selection.tstest/package-contract/onboard/compatible-endpoint-reasoning.test.ts
✅ Files skipped from review due to trivial changes (1)
- docs/inference/inference-options.mdx
🚧 Files skipped from review as they are similar to previous changes (2)
- src/lib/onboard/setup-nim-selection.test.ts
- src/lib/onboard/setup-nim-selection.ts
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Selective E2E Results —
|
| Job | Result |
|---|---|
| messaging-compatible-endpoint-e2e | |
| onboard-resume-e2e | ✅ success |
Selective E2E Results — ✅ All requested jobs passedRun: 28345801240
|
Vitest E2E Scenario Results — ✅ All requested jobs passedRun: 28345713436
|
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
Selective E2E Results — ✅ All requested jobs passedRun: 28345712658
|
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/lib/onboard/machine/handlers/provider-inference.test.ts (1)
235-245: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAvoid manufacturing the Dockerfile outcome inside the
setupInferencemock.This assertion is currently proving the behavior of the test's own
patchStagedDockerfile(...)call more than the handler's real resume path. If the production inference flow stopped preservingNEMOCLAW_REASONING, this unit would still pass. Keep this test focused on the cleared env / cleared reasoning state, and cover the Dockerfile contract in a higher-level path that exercises the real setup flow. As per path instructions, "**/*.test.{ts,js,mts,mjs,cts,cjs}: Review tests for behavioral confidence rather than implementation lock-in" and "Flag copied production algorithms, broad mocks that bypass the behavior under test."Also applies to: 259-261
🤖 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/machine/handlers/provider-inference.test.ts` around lines 235 - 245, The `setupInference` mock is too implementation-heavy because it manufactures the Dockerfile state by calling `patchStagedDockerfile(...)`, which makes the test assert the mock’s behavior instead of the handler’s resume path. Remove that Dockerfile mutation from the `setupInference` mock in `provider-inference.test.ts` and keep this unit focused on the cleared `NEMOCLAW_REASONING`/env-state assertions. Verify the Dockerfile contract in a higher-level test that exercises the real setup flow through the handler or the relevant inference path, using the existing `setupInference` and `patchStagedDockerfile` symbols to locate the affected spots.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/onboard/machine/handlers/provider-inference.test.ts`:
- Around line 235-245: The `setupInference` mock is too implementation-heavy
because it manufactures the Dockerfile state by calling
`patchStagedDockerfile(...)`, which makes the test assert the mock’s behavior
instead of the handler’s resume path. Remove that Dockerfile mutation from the
`setupInference` mock in `provider-inference.test.ts` and keep this unit focused
on the cleared `NEMOCLAW_REASONING`/env-state assertions. Verify the Dockerfile
contract in a higher-level test that exercises the real setup flow through the
handler or the relevant inference path, using the existing `setupInference` and
`patchStagedDockerfile` symbols to locate the affected spots.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 2c9a4a1d-c9ac-4c31-bbeb-66b619db8448
📒 Files selected for processing (1)
src/lib/onboard/machine/handlers/provider-inference.test.ts
|
Maintainer follow-up for I am accepting the reduced validation coverage in reasoning mode, with the current warning and tests, rather than adding another confirmation/guard.
I am also keeping the process environment as the single normalized cross-phase handoff. Provider selection restores or clears it before validation and artifact generation; threading a second boolean through the same callers would create parallel state that can diverge. The stitched regression proves the boundary that matters. The platform support matrix remains a summary of tested providers; the mode-specific caveat belongs in the runtime warning and inference-options page, where users encounter the option. Duplicating it in generated support metadata would create another synchronization point. For the remaining Nemotron items: the reasoning tests are now grouped under |
Selective E2E Results — ✅ All requested jobs passedRun: 28346230583
|
Selective E2E Results — ✅ All requested jobs passedRun: 28346217031
|
Vitest E2E Scenario Results — ✅ All selected jobs passedRun: 28346216992
|
## Summary Refreshes the v0.0.70 release docs from the release announcement and the `v0.0.69..v0.0.70` commit range. It also documents the `channels start` policy restoration behavior that was missing from the shared OpenClaw and Hermes command references, and bumps the Fern CLI version used for docs validation. ## Changes - Replaced the stale `v0.0.70` release-notes entry with the actual release themes, including CLI, onboarding, inference, messaging, Windows, documentation, and release-validation changes. - Documented that `channels start` reapplies the matching built-in network policy preset before rebuild and rolls back to disabled if policy restoration fails. - Bumped `fern/fern.config.json` from `5.55.0` to `5.59.0` for the docs refresh. - Source summary: - #5754 -> `docs/about/release-notes.mdx`: Notes Docker Desktop gateway bridge retry behavior during onboarding. - #5930 -> `docs/about/release-notes.mdx`: Links `nemoclaw use` default sandbox selection to the command reference. - #5948 -> `docs/about/release-notes.mdx`: Links reasoning-compatible endpoint validation to inference documentation. - #5950 -> `docs/about/release-notes.mdx`: Links Windows bootstrap WSL recovery behavior to Windows preparation and troubleshooting docs. - #5856 -> `docs/about/release-notes.mdx`: Notes rebuilt policy preset registry repair. - #5882 and #5949 -> `docs/about/release-notes.mdx`: Notes Hermes stale base-image state repair. - #6016 -> `docs/reference/commands.mdx`, `docs/reference/commands-nemohermes.mdx`, and `docs/manage-sandboxes/messaging-channels.mdx`: Documents channel policy restoration and rollback on `channels start`. - #5859 -> `docs/about/release-notes.mdx`: Links quickstart network approval guidance. - #5863 -> `docs/about/release-notes.mdx`: Links Teams allowlist guidance in the messaging page. - #5756, #5926, #6010, and #6011 -> `docs/about/release-notes.mdx`: Summarizes the Vitest E2E validation cutover. ## 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: doc-only prose refresh with no runtime behavior change. - [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] Git hooks passed during commit and push, or `npx prek run --from-ref main --to-ref HEAD` passes - [ ] Targeted tests pass for changed behavior - [ ] Full `npm test` passes (broad runtime changes only) - [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) - [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) `npm run docs` exited 0 and Fern reported one existing light-mode accent contrast warning. `fern check --warnings` confirmed the warning is the site theme contrast ratio, not content introduced by this PR. --- Signed-off-by: Miyoung Choi <miyoungc@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary <!-- 1-3 sentences: what this PR does and why. --> Custom OpenAI-compatible providers can opt into reasoning-mode validation through `NEMOCLAW_REASONING`, preserving that choice through provider handoff and resume. This clean-history replacement supersedes NVIDIA#3286 while retaining Deepak Jain's attribution and all fixes from its review. ## Related Issue <!-- Fixes #NNN or Closes #NNN. Remove this section if none. --> Fixes NVIDIA#3279. Supersedes NVIDIA#3286. ## Changes <!-- Bullet list of key changes. --> - Normalize common reasoning aliases and persist explicit set and clear operations in onboarding session state. - Skip Responses API, tool-call, and streaming probes that reasoning-only compatible endpoints reject. - Retry length-limited `reasoning_content` and `reasoning` smoke responses with a larger output budget, then fail clearly if final content remains empty. - Carry reasoning state through provider selection, resume, flow context, debug summaries, and sandbox creation. - Add focused source and package-contract coverage for aliases, probe selection, persistence, null clearing, resume, and response fallback behavior. - Keep `src/lib/onboard.ts` net-neutral and synchronize generated platform documentation citations. - Validation: CLI build and typecheck, focused source tests, the package-contract test, 18 platform-doc generator tests, full commit hooks, and push hooks pass. `npm run docs` reports zero errors and two pre-existing Fern warnings. ## 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 <!-- Check all that apply. For any "covered by existing tests", "not applicable", or waiver entry, add a brief justification on the same line or in the Changes section. --> - [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: - [x] Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging) - [x] Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification: maintainer salvage review completed; all historical CodeRabbit findings and the resolved thread in NVIDIA#3286 were incorporated and revalidated. - [ ] Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue: ## Verification <!-- Check each item you ran and confirmed. Leave unchecked items you skipped. Doc-only changes do not require npm test unless you ran it. --> - [x] PR description includes the DCO sign-off declaration and every commit appears as `Verified` in GitHub - [x] Git hooks passed during commit and push, or `npx prek run --from-ref main --to-ref HEAD` passes - [x] Targeted tests pass for changed behavior - [ ] Full `npm test` passes (broad runtime changes only) - [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) - [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: Carlos Villela <cvillela@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added a new reasoning mode for compatible OpenAI-style endpoints, with support for saving and restoring this setting during setup. * Compatible-endpoint checks now use a more tailored validation flow when reasoning mode is enabled. * **Bug Fixes** * Improved handling of resumed onboarding so stale reasoning settings are cleared when switching providers. * Increased the default token budget for compatible-endpoint sandbox smoke checks. * **Documentation** * Updated setup and platform docs to cover reasoning mode and refreshed reference links. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Deepak Jain <deepujain@gmail.com> Signed-off-by: Carlos Villela <cvillela@nvidia.com>
## Summary Refreshes the v0.0.70 release docs from the release announcement and the `v0.0.69..v0.0.70` commit range. It also documents the `channels start` policy restoration behavior that was missing from the shared OpenClaw and Hermes command references, and bumps the Fern CLI version used for docs validation. ## Changes - Replaced the stale `v0.0.70` release-notes entry with the actual release themes, including CLI, onboarding, inference, messaging, Windows, documentation, and release-validation changes. - Documented that `channels start` reapplies the matching built-in network policy preset before rebuild and rolls back to disabled if policy restoration fails. - Bumped `fern/fern.config.json` from `5.55.0` to `5.59.0` for the docs refresh. - Source summary: - NVIDIA#5754 -> `docs/about/release-notes.mdx`: Notes Docker Desktop gateway bridge retry behavior during onboarding. - NVIDIA#5930 -> `docs/about/release-notes.mdx`: Links `nemoclaw use` default sandbox selection to the command reference. - NVIDIA#5948 -> `docs/about/release-notes.mdx`: Links reasoning-compatible endpoint validation to inference documentation. - NVIDIA#5950 -> `docs/about/release-notes.mdx`: Links Windows bootstrap WSL recovery behavior to Windows preparation and troubleshooting docs. - NVIDIA#5856 -> `docs/about/release-notes.mdx`: Notes rebuilt policy preset registry repair. - NVIDIA#5882 and NVIDIA#5949 -> `docs/about/release-notes.mdx`: Notes Hermes stale base-image state repair. - NVIDIA#6016 -> `docs/reference/commands.mdx`, `docs/reference/commands-nemohermes.mdx`, and `docs/manage-sandboxes/messaging-channels.mdx`: Documents channel policy restoration and rollback on `channels start`. - NVIDIA#5859 -> `docs/about/release-notes.mdx`: Links quickstart network approval guidance. - NVIDIA#5863 -> `docs/about/release-notes.mdx`: Links Teams allowlist guidance in the messaging page. - NVIDIA#5756, NVIDIA#5926, NVIDIA#6010, and NVIDIA#6011 -> `docs/about/release-notes.mdx`: Summarizes the Vitest E2E validation cutover. ## 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: doc-only prose refresh with no runtime behavior change. - [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] Git hooks passed during commit and push, or `npx prek run --from-ref main --to-ref HEAD` passes - [ ] Targeted tests pass for changed behavior - [ ] Full `npm test` passes (broad runtime changes only) - [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) - [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) `npm run docs` exited 0 and Fern reported one existing light-mode accent contrast warning. `fern check --warnings` confirmed the warning is the site theme contrast ratio, not content introduced by this PR. --- Signed-off-by: Miyoung Choi <miyoungc@nvidia.com>
Summary
Custom OpenAI-compatible providers can opt into reasoning-mode validation through
NEMOCLAW_REASONING, preserving that choice through provider handoff and resume. This clean-history replacement supersedes #3286 while retaining Deepak Jain's attribution and all fixes from its review.Related Issue
Fixes #3279.
Supersedes #3286.
Changes
reasoning_contentandreasoningsmoke responses with a larger output budget, then fail clearly if final content remains empty.src/lib/onboard.tsnet-neutral and synchronize generated platform documentation citations.npm run docsreports zero errors and two pre-existing Fern warnings.Type of Change
Quality Gates
Verification
Verifiedin GitHubnpx prek run --from-ref main --to-ref HEADpassesnpm testpasses (broad runtime changes only)npm run docsbuilds without warnings (doc changes only)Signed-off-by: Carlos Villela cvillela@nvidia.com
Summary by CodeRabbit
New Features
Bug Fixes
Documentation