Skip to content

fix(cli): label the global status inference row as configured - #10471

Open
yanyunl1991 wants to merge 5 commits into
mainfrom
fix/status-configured-inference-label-10221
Open

fix(cli): label the global status inference row as configured#10471
yanyunl1991 wants to merge 5 commits into
mainfrom
fix/status-configured-inference-label-10221

Conversation

@yanyunl1991

@yanyunl1991 yanyunl1991 commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Summary

Bare nemoclaw status printed each sandbox's configured route under a bare
Inference: label — the same field name nemoclaw <name> status uses for its
live route probe (Inference: healthy (<endpoint>)). One field name carrying
two different meanings reads as a broken rendering. This PR qualifies the
global row as Inference (configured): and reports the upstream endpoint the
registry already records, without adding any probe.

Closes #10221.

Reproduction

Executed on our Ubuntu 24.04 x86_64 test host (no GPU), matching the second
platform in the reporter's scope.

  1. Onboard against NVIDIA Endpoints with the reporter's model:
    nemoclaw onboard --name repro-10221 --non-interactive --yes --no-gpu
    with NEMOCLAW_PROVIDER=build,
    NEMOCLAW_MODEL=nvidia/nemotron-3-super-120b-a12b.
  2. nemoclaw status (no sandbox name)
  3. nemoclaw repro-10221 status (same sandbox, by name)
  4. Compare the Inference line between the two.

Environment

  • Test machine: our Ubuntu 24.04 x86_64 test host (no GPU)
  • Reproduced on both version-matrix entries: the reporter's exact tag
    v0.0.114 (ffb09d2596fb2658f8dff881d5e1e425dd1767d6) and main at
    7d98145868ba65e326c4db1b6451d96ced5fb6e4 (v0.0.114-174-g7d9814586).
    git log confirms src/lib/inventory/index.ts has not changed this
    rendering path between the two.
  • Sandbox: repro-10221, agent OpenClaw, provider nvidia-prod, model
    nvidia/nemotron-3-super-120b-a12b, OpenShell 0.0.106 (docker)

Observed on main (before fix)

  Global status (registered sandboxes and host services):
  Sandboxes:
    repro-10221 * (nvidia/nemotron-3-super-120b-a12b) :18789
      Inference: nvidia-prod / nvidia/nemotron-3-super-120b-a12b
      SSH sessions: none

Per-sandbox status for the identical sandbox, in the same run:

  Sandbox-scoped status for 'repro-10221':
  Sandbox: repro-10221
    Model:    nvidia/nemotron-3-super-120b-a12b
    Provider: nvidia-prod
    Inference: healthy (https://inference.local/v1/models)
    Inference (route reachability): reachable (https://inference.local/v1/models)
    Inference (upstream): not probed (NVIDIA Endpoints health requires NVIDIA_INFERENCE_API_KEY; skipping model-invocation probe instead of reporting endpoint reachability as healthy.)

Observed on fix/... (after fix)

  Global status (registered sandboxes and host services):
  Sandboxes:
    repro-10221 * (nvidia/nemotron-3-super-120b-a12b) :18789
      Inference (configured): nvidia-prod / nvidia/nemotron-3-super-120b-a12b (https://integrate.api.nvidia.com/v1)
      SSH sessions: none

status --json, same run:

{
  "name": "repro-10221",
  "model": "nvidia/nemotron-3-super-120b-a12b",
  "provider": "nvidia-prod",
  "agent": "openclaw",
  "dashboardPort": 18789,
  "isDefault": true,
  "endpointUrl": "https://integrate.api.nvidia.com/v1"
}

Per-sandbox output is byte-identical before and after (verified by diffing the
Inference lines of both runs), so the probe format is untouched.

Analysis

Two renderers print a field literally named Inference, and they answer
different questions:

So the global view was not dropping a health word — it never had one. But
nothing in its output said so, and the unlabeled hop in the per-sandbox view
uses the identical field name, so the global row read as a degraded version of
the per-sandbox row. That ambiguity is the defect.

Reporting real reachability here would mean one SSH-plus-inference probe per
registered sandbox in a command documented as the host-wide summary that defers
live health to nemoclaw <name> status. That is a behavioral and performance
change, not a rendering fix, so this PR does not do it.

Separately, the registry already stores endpointUrl per sandbox
(src/lib/state/registry.ts; nvidia-prod resolves to
https://integrate.api.nvidia.com/v1 via src/lib/onboard/providers.ts), and
the global view discarded it — the reporter's "no endpoint URL" observation was
accurate about a real information gap.

Fix

  • Qualify the global row as Inference (configured):, reusing the per-sandbox
    Inference (<probe>): parenthetical convention rather than inventing a
    second vocabulary, so each view now names what it is reporting.
  • Append the registry's upstream endpoint when one is recorded.
  • resolveConfiguredEndpoint is the single source of truth for that value and
    is shared by the text renderer and buildStatusSandboxRow, so --json gains
    the same endpointUrl field — the text/JSON parity contract from fix(cli): report the sandbox agent in global list and status JSON #8710.

Boundaries the helper enforces:

Tests lock the qualified label plus every boundary above, and assert the global
view never emits the word healthy — the regression lock that keeps this view
out of the probe's vocabulary.

Changes

Type of Change

  • Code change with doc updates
  • Code change (feature, bug fix, or refactor)
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Verification

  • npx prek run --all-files passes
  • npm test passes (touched files at minimum)
  • Tests added or updated for new or changed behavior
  • No secrets, API keys, or credentials committed
  • Docs updated for user-facing behavior changes
  • make docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

AI Disclosure

  • AI-assisted — tool: Claude Code

Signed-off-by: Yanyun Liao yanyunl@nvidia.com

Summary by CodeRabbit

  • New Features

    • Global status now labels configured inference routes clearly.
    • Displays the recorded upstream endpoint when available, with credentials redacted.
    • Omits stale or unavailable endpoints to prevent misleading information.
    • Configured status does not perform an inference health check; use sandbox-specific status for live reachability.
    • Text and JSON status views now provide consistent configured-route information.
  • Documentation

    • Updated command reference to explain configured route and endpoint reporting.

Bare `nemoclaw status` printed each sandbox's registry route under a bare
`Inference:` label, the same field name `nemoclaw <name> status` uses for
its live route probe (`Inference: healthy (<endpoint>)`). One field name
carrying two different meanings reads as a broken rendering, which is how
it was reported: the global view looked like it had dropped the health
word and the endpoint.

Qualify the global row as `Inference (configured):`, following the
per-sandbox `Inference (<probe>):` convention, and append the upstream
endpoint the registry already records so the row says which upstream it
is routed at. The endpoint is redacted, is omitted when the registry has
none, and is suppressed for the default sandbox when the live gateway
route has drifted off the stored provider, since the stored endpoint no
longer describes the route in use. `status --json` reports the same value
as `endpointUrl` per sandbox row.

This view still runs no inference probe; reachability remains the job of
`nemoclaw <name> status`.

Fixes #10221

Signed-off-by: Yanyun Liao <yanyunl@nvidia.com>
@github-code-quality

github-code-quality Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall line coverage in commit 9043147 in the fix/status-configure... branch remains at 96%, unchanged from commit 83fd95b in the main branch.

TypeScript / code-coverage/cli

The overall line coverage in commit 9043147 in the fix/status-configure... branch remains at 83%, unchanged from commit 83fd95b in the main branch.

Show a line coverage summary of the most impacted files.
File main 83fd95b fix/status-configure... 9043147 +/-
src/lib/onboard...eate-journal.ts 90% 85% -5%
src/lib/onboard...vider/docker.ts 88% 85% -3%
src/lib/state/gateway.ts 96% 94% -2%
src/lib/onboard...uild-context.ts 74% 74% 0%
src/lib/inventory/index.ts 91% 91% 0%
src/lib/onboard...ure-evidence.ts 88% 88% 0%
src/lib/onboard...trap/adapter.ts 70% 71% +1%
src/lib/onboard...ndbox-create.ts 88% 89% +1%
src/lib/onboard...cker-journal.ts 73% 75% +2%
src/lib/onboard...er-gpu-patch.ts 79% 81% +2%

Updated August 28, 2026 07:34 UTC

@github-actions

Copy link
Copy Markdown
Contributor

@coderabbitai

coderabbitai Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 8046a787-a701-4e45-8e2a-7d4833e7e7c4

📥 Commits

Reviewing files that changed from the base of the PR and between 73f4e1b and a71244c.

📒 Files selected for processing (1)
  • docs/reference/commands.mdx

Included review availability: Your plan provides up to 12 included reviews per hour; 3 remain after this review.


📝 Walkthrough

Walkthrough

Global status now reports configured inference routes with redacted endpoints when applicable. It omits endpoints for missing or provider-drifted routes. Tests and documentation cover text and JSON output.

Changes

Configured inference status

Layer / File(s) Summary
Provider-aware endpoint resolution
src/lib/inventory/index.ts
Status rows now include configured endpoints. URL credentials are redacted, and endpoints are omitted when providers differ.
Configured status rendering and validation
src/lib/inventory/index.ts, src/lib/inventory/status-configured-inference.test.ts, src/lib/inventory/index.test.ts, docs/reference/commands.mdx
Global status uses Inference (configured):. Tests and documentation cover endpoint display, omission, redaction, provider drift, JSON output, and the absence of health claims.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to a7124

This PR clarifies that the global status row reports configured inference details and safely includes the recorded endpoint without adding a health probe; no actionable merge-blocking risk remains after normal checks and review.

Suggested reviewers: aasthajh

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 3 files. (1 skipped: 1… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the primary change: labeling the global status inference row as configured.
Linked Issues check ✅ Passed The changes satisfy issue #10221 by distinguishing configured inference data from live reachability, showing the recorded endpoint when valid, redacting credentials, and leaving health probing to sand…
Out of Scope Changes check ✅ Passed The documentation, implementation, tests, and JSON output changes are directly related to the configured inference status behavior described in issue #10221.
Full details: Linked Issues check

Explanation

The changes satisfy issue #10221 by distinguishing configured inference data from live reachability, showing the recorded endpoint when valid, redacting credentials, and leaving health probing to sandbox-specific status.

Full details: Docstring Coverage

Explanation

Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 3 files. (1 skipped: 1 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/status-configured-inference-label-10221

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

@github-actions

Copy link
Copy Markdown
Contributor

PR Review Advisor finished for commit 3799152. Include the Advisor findings in the complete PR feedback collection. Verify and group valid findings before repair.

All previous runs

@yanyunl1991 yanyunl1991 added area: cli Command line interface, flags, terminal UX, or output bug-fix PR fixes a bug or regression v0.0.115 labels Aug 27, 2026
@coderabbitai

coderabbitai Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@github-actions github-actions Bot added v0.0.117 Release target and removed v0.0.116 labels Aug 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: cli Command line interface, flags, terminal UX, or output bug-fix PR fixes a bug or regression v0.0.117 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bare nemoclaw status shows provider/model instead of the documented healthy(endpoint) Inference format

2 participants