Skip to content

fix(inference): make shared route changes explicit - #6773

Merged
ericksoa merged 13 commits into
mainfrom
fix/6315-sandbox-inference-routing/ae
Jul 14, 2026
Merged

fix(inference): make shared route changes explicit#6773
ericksoa merged 13 commits into
mainfrom
fix/6315-sandbox-inference-routing/ae

Conversation

@ericksoa

@ericksoa ericksoa commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Summary

OpenShell exposes one live inference route per gateway, so onboarding another sandbox could silently change the route used by existing sandboxes. This change keeps one gateway, warns immediately before a valid shared provider/model route change, fails closed before replacing provider-global identity used by another sandbox, and makes each sandbox's recorded route and any live-route drift explicit in status.

Related Issue

Fixes #6315

Changes

  • Allow provider/model time-sharing only when any same-name provider has the same normalized custom endpoint, API family, and credential environment-variable name; otherwise fail before provider or route mutation.
  • Warn under the gateway route mutation lock immediately before onboarding re-points the shared route, including each affected sandbox's recorded provider and model.
  • Make connect use the same provider-global compatibility decision and only offer it as status remediation when it can restore the recorded route safely.
  • Preserve schema-version 1 JSON model and provider as live-first fields, and add explicit recordedRoute, liveRoute, and routeDrift.canConnect fields.
  • Update inference, command, and troubleshooting documentation for the single-gateway time-sharing contract.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • 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:
  • Tests not applicable — justification:
  • 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: Author review confirmed endpoint, API-family, and credential environment-variable mismatches now fail before provider upsert or route mutation; provider/model-only changes remain time-shared, and status derives canConnect from the same compatibility check. Focused regression coverage exercises the pre-mutation failure and status remediation decisions.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Verification

  • PR description includes the DCO sign-off declaration and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run check:diff passed when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: 90 focused compatibility, onboarding, status, and lifecycle tests passed; 20 compiled status integration tests passed.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result: Not applicable to this focused inference-route change; npm run check:diff, CLI typecheck, CLI build, and directly affected suites passed on the current-main combined tree.
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only) — command passed with 0 errors; Fern reported 2 existing suppressed warnings.
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: Aaron Erickson aerickson@nvidia.com

Summary by CodeRabbit

  • New Features
    • Time-sharing: the gateway’s single live inference route can be re-pointed across sandboxes with different valid provider/model targets.
    • status --json and sandbox status now expose recorded vs live routing provenance (recordedRoute, liveRoute, routeDrift with canConnect).
  • Bug Fixes
    • Advisory route mismatches are now non-fatal (warn and proceed); only scenarios that would strand other sandboxes remain fail-closed.
    • Drift warnings and JSON output more explicitly include both recorded and live provider/model and canConnect behavior.
  • Documentation
    • Updated shared-gateway, command, and troubleshooting guidance to match the warning + repointing + drift details.
  • Tests
    • Updated status/connect/onboarding tests for new output and non-fatal warning flows.

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@ericksoa ericksoa added area: inference Inference routing, serving, model selection, or outputs bug-fix PR fixes a bug or regression labels Jul 13, 2026
@ericksoa ericksoa self-assigned this Jul 13, 2026
@github-code-quality

github-code-quality Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage remains at 96%, unchanged from the main branch.

TypeScript / code-coverage/cli

The overall coverage in the fix/6315-sandbox-inf... branch remains at 79%, unchanged from the main branch.

Show a code coverage summary of the most impacted files.
File main 4683ce4 fix/6315-sandbox-inf... a7fd3d2 +/-
src/lib/policy/tiers.ts 94% 80% -14%
src/lib/agent/dashboard-ui.ts 91% 85% -6%
src/lib/onboard...shboard-port.ts 94% 89% -5%
src/lib/messagi...nes/template.ts 100% 95% -5%
src/lib/adapter.../docker/pull.ts 86% 83% -3%
src/lib/messagi.../persistence.ts 86% 89% +3%
src/lib/messagi...n-validation.ts 96% 100% +4%
src/lib/adapter...shell/client.ts 83% 88% +5%
src/lib/adapter...ocker/volume.ts 70% 85% +15%
src/lib/core/pr...mpt-activity.ts 67% 92% +25%

Updated July 14, 2026 18:32 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The shared gateway route contract now distinguishes advisory provider/model differences from hard conflicts. Onboarding and connect flows warn and repoint valid routes, while status reports recorded routes and live-route drift through text and JSON output. Documentation and tests reflect these behaviors.

Changes

Shared route contract

Layer / File(s) Summary
Compatibility classification and warnings
src/lib/inference/gateway-route-compatibility.ts, src/lib/inference/gateway-route-compatibility.test.ts
Gateway conflicts include recorded routes, credential identity checks, advisory classification, and impact warnings.
Onboarding and connect route handling
src/lib/actions/sandbox/..., src/lib/onboard/...
Valid peer-route differences continue with warnings and route mutation; incomplete metadata and invalid bindings remain fatal.
Recorded and live route status
src/lib/actions/sandbox/status-*.ts, test/cli/*status*
Status uses recorded provider/model values, probes the live route, and exposes route drift through text and JSON.
Shared route documentation
docs/inference/*.mdx, docs/reference/*.mdx
Documentation describes shared-route warnings, repointing, drift reporting, and hard-error cases.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant SandboxOnboarding
  participant GatewayRouteCompatibility
  participant SharedGateway
  participant SandboxStatus
  SandboxOnboarding->>GatewayRouteCompatibility: check requested provider/model route
  GatewayRouteCompatibility-->>SandboxOnboarding: advisory conflict and affected sandboxes
  SandboxOnboarding->>SharedGateway: repoint live inference route
  SandboxStatus->>SharedGateway: probe live route
  SharedGateway-->>SandboxStatus: live provider/model
  SandboxStatus-->>SandboxStatus: compare live and recorded routes
Loading

Possibly related PRs

  • NVIDIA/NemoClaw#4323: Both changes extend sandbox status JSON with route-related metadata.
  • NVIDIA/NemoClaw#4611: Both changes modify connect-time handling of mismatched recorded and live routes.
  • NVIDIA/NemoClaw#5869: Both changes use durable provider metadata to determine route compatibility and restoration.

Suggested labels: area: cli, area: docs

Suggested reviewers: laitingsheng, yimoj, jyaunches, apurvvkumaria, sandl99

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 30.43% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The PR addresses #6315 by warning on cross-sandbox route changes and exposing recorded vs live route drift in code, status output, docs, and tests.
Out of Scope Changes check ✅ Passed The changes stay focused on shared-route containment, status reporting, and related documentation/tests with no clear unrelated scope creep.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly reflects the main change: making shared inference route changes explicit.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/6315-sandbox-inference-routing/ae

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

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Informational

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

Model lanes

  • GPT-5.6 Terra (primary): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions
  • Model comparison: normalized findings match; normalized E2E selections differ; severity counts match.

Nemotron output stays in workflow artifacts and does not change the assessment above.

E2E guidance

Advisory only. E2E / PR Gate selects and runs jobs independently.

Recommended E2E: cloud-onboard, inference-routing, network-policy, onboard-repair, onboard-resume, state-backup-restore, upgrade-stale-sandbox

4 optional E2E recommendations
  • double-onboard
  • concurrent-gateway-ports
  • gateway-drift-preflight
  • onboard-negative-paths

Workflow run details

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

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
docs/reference/commands.mdx (1)

1-1: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

connect's warning behavior is inconsistently documented — sometimes omitted entirely.

docs/reference/commands.mdx's connect section (lines 822-825) explicitly states connect warns and re-points the shared route. Four other places describing the same connect re-pointing behavior omit the "warns" part, implying a silent re-point — which contradicts the PR's stated goal of eliminating silent cross-sandbox route changes (#6315).

  • docs/reference/commands.mdx#L2838-2844: line 2843 says "Connecting to a sandbox re-points the route..." — add "warns and" to match lines 822-825 in the same file.
  • docs/inference/switch-models.mdx#L61-70: line 67 says "Connecting to a sandbox later re-points the route..." — state that connect also warns first.
  • docs/inference/switch-providers.mdx#L101-112: line 106 says connect "re-points it again" — state that connect warns before re-pointing.
  • docs/reference/troubleshooting.mdx#L358-370: line 362 says connect "re-points it" — state that connect warns before re-pointing.
🤖 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 `@docs/reference/commands.mdx` at line 1, Update the four documentation
descriptions of connect’s route behavior in commands.mdx, switch-models.mdx,
switch-providers.mdx, and troubleshooting.mdx to explicitly state that connect
warns before re-pointing the shared route. Match the existing wording in the
connect section of commands.mdx, preserving the surrounding documentation.
🧹 Nitpick comments (1)
src/lib/onboard/machine/handlers/provider-inference-route-containment.ts (1)

46-76: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Update the docstring to reflect the new advisory/unconstrained behavior.

The comment // Reject structurally unsafe peer metadata, then exact-check complete route identities. no longer fully describes the function: it now also short-circuits on advisory conflicts (Line 60-62) and always discards the preflight-derived requiredModel/requiredEndpointUrl/requiredInferenceApi values in favor of unconstrainedGatewayRouteDiscovery() (Line 76), even on a successful (ok: true) preflight. This is validated by the new "does not constrain fresh selection to a valid peer route" test, so the behavior itself looks intentional, but the stale doc comment could mislead future readers into thinking real constraints are still propagated.

📝 Suggested docstring update
-/** Reject structurally unsafe peer metadata, then exact-check complete route identities. */
+/**
+ * Reject structurally unsafe peer metadata, then exact-check complete route
+ * identities. Advisory conflicts (and the successful preflight path) return
+ * unconstrained discovery constraints; the actual repoint/warning happens at
+ * route mutation time (see setup-inference.ts).
+ */
🤖 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-route-containment.ts`
around lines 46 - 76, Update the docstring for
guardProviderInferenceRouteSelection to describe advisory conflicts
short-circuiting to unconstrained discovery and the function always returning
unconstrainedGatewayRouteDiscovery(), rather than propagating preflight-derived
constraints. Keep the existing validation behavior unchanged.
🤖 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/switch-models.mdx`:
- Around line 61-70: The “Account for Shared Gateways” section should explicitly
document that connecting to a sandbox warns before re-pointing the shared route
to its recorded model. Update the sentence about connecting near the shared
gateway behavior description, preserving the existing re-pointing behavior and
matching the warning terminology used by the connect command documentation.

In `@docs/inference/switch-providers.mdx`:
- Around line 101-112: Update the shared-gateway documentation around the
statement that `$$nemoclaw <name> connect` re-points the route to explicitly
state that connect warns about affected sandboxes before re-pointing it,
matching the documented behavior in the connect command reference.

In `@docs/reference/commands.mdx`:
- Around line 2838-2844: Update the onboarding contract text around “Connecting
to a sandbox” to state that NemoClaw warns before re-pointing the shared route
when another sandbox has a different valid route, matching the established
connect behavior and warning details. Keep the existing recorded provider/model
and live-route drift statements unchanged.

In `@docs/reference/troubleshooting.mdx`:
- Around line 358-370: The troubleshooting documentation should state that
`$$nemoclaw <name> connect` warns before re-pointing the shared live route,
matching the documented behavior in the connect command section. Update the
affected sentence without changing the surrounding route, status, or onboarding
guidance.

In `@src/lib/actions/sandbox/status-snapshot.ts`:
- Around line 298-304: Update the currentModel and currentProvider selection in
the sandbox status snapshot so that when sb exists, each missing recorded field
renders as "unknown" rather than falling back to the live route; only use
live.model and live.provider when sb is absent. Add a regression test covering a
sandbox with partial provider/model metadata and verify routeDrift remains null.

In `@src/lib/inference/gateway-route-compatibility.ts`:
- Around line 346-348: Update the shared warning formatter around the target
assignment to use operation-neutral wording instead of “Onboarding,” so warnings
from both onboarding and connect flows are accurate. Preserve the safe
sandbox-name formatting and fallback behavior for unnamed runs.

---

Outside diff comments:
In `@docs/reference/commands.mdx`:
- Line 1: Update the four documentation descriptions of connect’s route behavior
in commands.mdx, switch-models.mdx, switch-providers.mdx, and
troubleshooting.mdx to explicitly state that connect warns before re-pointing
the shared route. Match the existing wording in the connect section of
commands.mdx, preserving the surrounding documentation.

---

Nitpick comments:
In `@src/lib/onboard/machine/handlers/provider-inference-route-containment.ts`:
- Around line 46-76: Update the docstring for
guardProviderInferenceRouteSelection to describe advisory conflicts
short-circuiting to unconstrained discovery and the function always returning
unconstrainedGatewayRouteDiscovery(), rather than propagating preflight-derived
constraints. Keep the existing validation behavior unchanged.
🪄 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: dc17b9ac-4264-4574-9b89-2e54abf2bf1c

📥 Commits

Reviewing files that changed from the base of the PR and between 3de1de6 and eafbef4.

📒 Files selected for processing (23)
  • docs/inference/switch-models.mdx
  • docs/inference/switch-providers.mdx
  • docs/inference/view-active-inference-route.mdx
  • docs/reference/commands.mdx
  • docs/reference/troubleshooting.mdx
  • src/lib/actions/sandbox/connect-inference-gateway.ts
  • src/lib/actions/sandbox/connect-route-containment.test.ts
  • src/lib/actions/sandbox/status-flow.test.ts
  • src/lib/actions/sandbox/status-inference.test.ts
  • src/lib/actions/sandbox/status-snapshot-route-drift.test.ts
  • src/lib/actions/sandbox/status-snapshot.ts
  • src/lib/actions/sandbox/status-text.ts
  • src/lib/inference/gateway-route-compatibility.test.ts
  • src/lib/inference/gateway-route-compatibility.ts
  • src/lib/onboard/machine/handlers/provider-inference-route-containment.test.ts
  • src/lib/onboard/machine/handlers/provider-inference-route-containment.ts
  • src/lib/onboard/machine/handlers/provider-inference.ts
  • src/lib/onboard/machine/handlers/sandbox-route-mutation-lock.test.ts
  • src/lib/onboard/machine/handlers/sandbox.ts
  • src/lib/onboard/setup-inference-route-containment.test.ts
  • src/lib/onboard/setup-inference.ts
  • test/cli/sandbox-status-json.test.ts
  • test/support/status-flow-test-harness.ts

Comment thread docs/inference/switch-models.mdx
Comment thread docs/inference/switch-providers.mdx
Comment thread docs/reference/commands.mdx
Comment thread docs/reference/troubleshooting.mdx Outdated
Comment thread src/lib/actions/sandbox/status-snapshot.ts Outdated
Comment thread src/lib/inference/gateway-route-compatibility.ts
ericksoa added 2 commits July 13, 2026 08:45
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@ericksoa
ericksoa enabled auto-merge (squash) July 13, 2026 18:15
@github-actions

Copy link
Copy Markdown
Contributor

E2E Target Results — ✅ All requested tests passed

Run: 29273924877
Workflow ref: fix/6315-sandbox-inference-routing/ae
Requested targets: (default — all supported)
Requested test IDs: cloud-onboard,inference-routing,network-policy,onboard-repair,onboard-resume,state-backup-restore,upgrade-stale-sandbox,sandbox-operations
Summary: 8 passed, 0 failed, 0 cancelled, 0 skipped, 0 unknown

Test Result
cloud-onboard ✅ success
inference-routing ✅ success
network-policy ✅ success
onboard-repair ✅ success
onboard-resume ✅ success
sandbox-operations ✅ success
state-backup-restore ✅ success
upgrade-stale-sandbox ✅ success

@cjagwani cjagwani left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The exact-head CI and eight-target live run are green, but this head is not safe to merge yet.

  1. [P1] The shared-route state accepted by onboarding is not connectable. setup-inference.ts:242-258 treats peer custom-endpoint/custom-API conflicts as advisory and proceeds, while connect-inference-gateway.ts:44-52 accepts only provider/model conflicts and throws before reading the live route. status-text.ts:255-272 nevertheless tells the user that connect will realign it. After onboarding endpoint B beside endpoint A, the documented follow-up command can therefore fail even when B is already live. Either reject this state during onboarding or make connect restore the full custom route, and emit remediation only when it is actually executable.

  2. [P1] Shared provider endpoint/credential mutation is incomplete and non-transactional. The compatibility request at setup-inference.ts:242-250 omits credentialEnv, and gateway-route-compatibility.test.ts:239-258 explicitly treats KEY_A versus KEY_B as compatible. The provider path then updates endpoint/credential (providers.ts:424-435) before remote.ts:345-378 runs inference set; a later failure leaves the gateway-global provider on the new endpoint/key with no rollback or route reservation. The impact warning also shows only provider/model, so endpoint/API/credential rotation is invisible. Include a credential-free provider fingerprint (endpoint, API family, and whether credential rotation occurs), fail closed or roll back atomically, and add credential-rotation/apply-failure regressions.

  3. [P2] status --json changes the existing model and provider fields from live-route values to recorded-route values (status-snapshot.ts:297-305, 415-425) while retaining schemaVersion: 1. Existing consumers can now associate live health with the wrong route. Preserve the old fields and add explicit recordedRoute/liveRoute, or version the JSON contract.

The focused 102-test suite passes, which confirms these states are currently outside the regression coverage.

@cjagwani cjagwani self-assigned this Jul 13, 2026
@cjagwani cjagwani added v0.0.83 and removed v0.0.82 labels Jul 13, 2026
ericksoa added 5 commits July 13, 2026 16:39
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
…rence-routing/ae

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
…rence-routing/ae

Signed-off-by: Aaron Erickson <aerickson@nvidia.com>
@cv cv assigned cv and unassigned ericksoa and cjagwani Jul 14, 2026

@cv cv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] src/lib/inference/gateway-route-compatibility.ts:287-318 — keep incomplete custom peers out of the advisory path. Custom-route completeness is checked only when the recorded provider equals the requested provider. If an existing same-gateway sandbox records compatible-endpoint plus a model but lacks endpoint or API metadata, onboarding a different provider classifies that peer only as provider-model. isAdvisoryGatewayRouteConflict() then allows the shared route to be re-pointed, but the legacy sandbox cannot restore its route because connect rejects the incomplete requested custom route before any read or mutation. This strands the peer and contradicts the documented contract that incomplete custom-route metadata remains a hard error. Validate every configured custom peer is restorable before reducing cross-provider differences to advisory, and add a regression with an incomplete compatible-endpoint peer plus a different requested provider.

@jyaunches jyaunches added v0.0.84 and removed v0.0.83 labels Jul 14, 2026
@cv
cv dismissed cjagwani’s stale review July 14, 2026 20:30

Addressed

@ericksoa
ericksoa merged commit ea143b8 into main Jul 14, 2026
53 checks passed
@ericksoa
ericksoa deleted the fix/6315-sandbox-inference-routing/ae branch July 14, 2026 20:31
jyaunches added a commit that referenced this pull request Jul 14, 2026
## Summary

Add v0.0.83 release notes to `docs/about/release-notes.mdx` for pre-tag
release prep.

## Source Summary

- #6773 -> `docs/about/release-notes.mdx`: Shared inference route
changes are explicit and fail-safe; status shows recorded route, live
route, and drift.
- #6875 -> `docs/about/release-notes.mdx`: DGX Station GB300 express
setup restored; vLLM storage preflight narrowed.
- #6770 -> `docs/about/release-notes.mdx`: Risky Spark vLLM server
warning during onboarding.
- #6856 -> `docs/about/release-notes.mdx`: Re-onboard reuse preserves
tier-default brave/tavily presets.
- #6867 -> `docs/about/release-notes.mdx`: Unreachable custom endpoint
routed through transport-recovery path.
- #6860 -> `docs/about/release-notes.mdx`: Rebuild preflight uses
model-aware token field for o-series/GPT-5.
- #6845 -> `docs/about/release-notes.mdx`: Corporate CA anchored for
image build TLS.
- #6833 -> `docs/about/release-notes.mdx`: SSH ControlMaster-delegated
forwards recognized in fallback.
- #6837 -> `docs/about/release-notes.mdx`: Hermes light skin writes via
stdin on macOS.

## 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 release notes
- [x] Docs updated for user-facing behavior changes
- [ ] Docs not applicable — justification:
- [ ] Sensitive paths changed
- [ ] Non-success, skipped, or missing CI check accepted by maintainer

## 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
- [x] `npm run docs` passes with 0 errors

Signed-off-by: Jessica Yaunches <jyaunches@nvidia.com>

Signed-off-by: Jessica Yaunches <jyaunches@nvidia.com>
cv pushed a commit that referenced this pull request Jul 16, 2026
<!-- markdownlint-disable MD041 -->
## Summary

Adds the canonical `docs/changelog/2026-07-15.mdx` entry with the exact
`## v0.0.84` heading for the release candidate range from `v0.0.83`
through `710d2b36b9eebcb6bca3c2b2f796a1bdb69c3a31`.
Fills two owner-page gaps for model-aware local inference health and
pre-write OpenClaw candidate validation.

## Changes

- Add the complete shared Fern changelog entry for `v0.0.84`, with
literal CLI names and root-absolute OpenClaw and Hermes routes.
- Document that sandbox status and doctor compare the configured Ollama
or vLLM model with provider inventory without issuing a completion.
- Document that host-side OpenClaw `config set` validates the complete
candidate before replacing live config or reaching gateway restart.
- Reconcile the `v0.0.84` release label with the commit range. PR #6773
is already contained in `v0.0.83` and remains documented there; CI,
test-harness, docs-infrastructure, and `.js` to `.mts` migration-only
changes require no additional user guidance.

### Source summary

- [#6882](#6882) ->
`docs/manage-sandboxes/backup-restore.mdx`,
`docs/changelog/2026-07-15.mdx`: Explain that OpenClaw runtime identity
and pairing state are excluded from snapshots and ignored during
restore.
- [#6873](#6873) ->
`docs/inference/set-up-ollama.mdx`, `docs/changelog/2026-07-15.mdx`:
Record the Ollama requested-model environment fallback and interactive
default.
- [#6835](#6835) ->
`docs/changelog/2026-07-15.mdx`: Include the sandbox name in the
documented rebuild resume-recovery behavior.
- [#6886](#6886) ->
`docs/inference/custom-endpoint-security.mdx`,
`docs/inference/set-up-openai-compatible-endpoint.mdx`,
`docs/changelog/2026-07-15.mdx`: Explain the exact-host trusted-private
endpoint opt-in and retained SSRF boundaries.
- [#6887](#6887) ->
`docs/reference/commands.mdx`, `docs/changelog/2026-07-15.mdx`: Document
Telegram channel health verdicts, summary behavior, and exit status.
- [#6863](#6863) ->
`docs/manage-sandboxes/lifecycle.mdx`, `docs/changelog/2026-07-15.mdx`:
Add the missing model-inventory behavior for local status and doctor
checks.
- [#6902](#6902) ->
`docs/manage-sandboxes/runtime-controls.mdx`,
`docs/changelog/2026-07-15.mdx`: Add the missing pre-write OpenClaw
candidate-validation contract.
- [#6916](#6916) ->
`docs/changelog/2026-07-15.mdx`: Preserve the failed-session
fresh-install recovery correction in the release entry.
- [#6934](#6934) ->
`docs/reference/commands.mdx`, `docs/reference/troubleshooting.mdx`,
`docs/security/credential-storage.mdx`, `docs/changelog/2026-07-15.mdx`:
Summarize completed-prompt checkpointing and validated credential reuse
during OpenClaw resume.
- [#6898](#6898) ->
`docs/inference/switch-models.mdx`,
`docs/inference/switch-providers.mdx`,
`docs/reference/troubleshooting.mdx`, `docs/changelog/2026-07-15.mdx`:
Explain Hermes dashboard convergence after in-place inference changes.
- [#6711](#6711) ->
`docs/manage-sandboxes/run-sandboxes.mdx`,
`docs/manage-sandboxes/uninstall-nemoclaw.mdx`,
`docs/reference/architecture.mdx`, `docs/reference/commands.mdx`,
`docs/changelog/2026-07-15.mdx`: Summarize port-scoped host state and
uninstall preservation.
- [#6767](#6767) ->
`docs/inference/configure-model-limits.mdx`,
`docs/inference/set-up-ollama.mdx`,
`docs/reference/troubleshooting.mdx`, `docs/changelog/2026-07-15.mdx`:
Record the Hermes `64000`-token Ollama floor and unchanged OpenClaw
floor.
- [#6862](#6862) ->
`docs/get-started/quickstart.mdx`,
`docs/inference/verify-inference-route.mdx`,
`docs/changelog/2026-07-15.mdx`: Explain retryable not-ready
finalization for unhealthy inference routes.
- [#6766](#6766) ->
`docs/security/tcb-boundary.mdx`, `docs/changelog/2026-07-15.mdx`:
Document definitive stale transition-lock recovery and fail-closed
ambiguous cases.
- [#6948](#6948) ->
`docs/manage-sandboxes/manage-mcp-servers.mdx`,
`docs/changelog/2026-07-15.mdx`: Include Hermes MCP apply-state race
recovery in the release entry without changing the established user
workflow.
- [#6964](#6964) ->
`docs/reference/troubleshooting.mdx`, `docs/changelog/2026-07-15.mdx`:
Record complete agent-specific fresh-install and resume recovery
commands.
- [#6883](#6883) ->
`docs/get-started/quickstart.mdx`, `docs/inference/set-up-vllm.mdx`,
`docs/reference/platform-support.mdx`, `docs/changelog/2026-07-15.mdx`:
Summarize the DGX Station Nemotron Ultra express path and pinned
managed-vLLM recipe.
- [#6985](#6985) ->
`docs/inference/set-up-vllm.mdx`, `docs/reference/commands.mdx`,
`docs/changelog/2026-07-15.mdx`: Capture the final automated and
interactive storage-warning behavior.

## 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 —
`test/changelog-docs.test.ts` validates the dated-entry structure, exact
version heading, and preserved history.
- [ ] 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` (6 passed)
- [ ] Applicable broad gate passed — `npm test` for broad
runtime/test-harness changes; `npm run check` for repo-wide
validation/coverage changes — not run for this doc-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) —
completed with 0 errors; Fern reported the unchanged unauthenticated
redirect-check and light-theme 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)
— the native changelog entry uses the required parser-safe MDX SPDX
comment and intentionally has no frontmatter.

---
Signed-off-by: Prekshi Vyas <prekshiv@nvidia.com>


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

## Summary by CodeRabbit

* **Documentation**
* Added the v0.0.84 changelog entry covering setup, endpoint onboarding,
model handling, sandbox readiness, recovery, channel status, and
configuration safeguards.
* Clarified that sandbox health checks validate configured models
against local Ollama and vLLM provider inventories without generating
completions or consuming tokens.
* Documented that invalid runtime configuration changes are rejected
while preserving the existing working configuration.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: inference Inference routing, serving, model selection, or outputs bug-fix PR fixes a bug or regression

Projects

None yet

5 participants