perf(onboard): overlap gateway readiness probes - #6324
Conversation
|
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:
📝 WalkthroughWalkthroughThe gateway HTTP readiness probe now accepts an optional AbortSignal and forwards it through onboarding and gateway-binding wrappers. The health-wait loop starts the probe before gateway checks, aborts it on failure, and tests cover call counts, ordering, and abort behavior. ChangesCancellable gateway HTTP readiness
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant onboard.ts
participant waitForGatewayHealth
participant HttpProbe
participant GatewayCommands
onboard.ts->>waitForGatewayHealth: provide isGatewayHttpReady(signal => ...)
loop each poll attempt
waitForGatewayHealth->>HttpProbe: startAbortableGatewayHttpProbe(isGatewayHttpReady)
waitForGatewayHealth->>GatewayCommands: run status/namedInfo/currentInfo checks
GatewayCommands-->>waitForGatewayHealth: status outputs
alt isGatewayHealthy fails
waitForGatewayHealth->>HttpProbe: abort()
waitForGatewayHealth-->>onboard.ts: return false
else healthy
waitForGatewayHealth->>HttpProbe: await ready
HttpProbe-->>waitForGatewayHealth: readiness result
waitForGatewayHealth-->>onboard.ts: return readiness result
end
end
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
a4595d6 to
0a7b82b
Compare
There was a problem hiding this comment.
Pull request overview
This PR reduces onboarding latency by overlapping the host HTTP gateway readiness probe with OpenShell gateway metadata collection during gateway health polling, while adding cancellation support so in-flight probes can be aborted when metadata is unhealthy.
Changes:
- Add
AbortSignalsupport to the production host HTTP readiness probe (isGatewayHttpReady) and wire abort handling into request lifecycle. - Start the HTTP readiness probe earlier in each gateway health polling attempt and abort it when metadata indicates the gateway is unhealthy.
- Add new unit tests covering abort behavior and update existing gateway health wait tests for the new probe-start timing.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| src/lib/onboard/gateway-http-readiness.ts | Adds optional AbortSignal support and ensures aborted/failed probes resolve false cleanly. |
| src/lib/onboard/gateway-http-readiness.test.ts | Adds cancellation-focused tests for the HTTP readiness probe. |
| src/lib/onboard/gateway-health-wait.ts | Overlaps HTTP probe with OpenShell metadata collection and aborts probe when metadata is unhealthy. |
| src/lib/onboard/gateway-health-wait.test.ts | Updates expectations for new probe timing and adds tests for overlap + abort propagation. |
| src/lib/onboard/gateway-binding.ts | Extends the dynamic runtime helper wrapper to optionally forward an AbortSignal to the probe. |
| src/lib/onboard.ts | Plumbs an abortable isGatewayHttpReady wrapper into waitForGatewayHealth. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
0a7b82b to
2672226
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
src/lib/onboard/gateway-binding.ts (1)
235-245: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueRedundant branch:
signal === undefinedcheck has no behavioral effect.
deps.probeGatewayHttpReady's 4th parameter is optional with no default value, so passingsignalasundefinedexplicitly is identical to omitting it. The ternary can be dropped.♻️ Simplify
const isGatewayHttpReady = ( timeoutMs?: number, url?: string, method?: "GET" | "POST", signal?: AbortSignal, ) => { const targetUrl = url ?? `${deps.getDockerDriverGatewayEndpoint(deps.getGatewayPort())}/`; - return signal === undefined - ? deps.probeGatewayHttpReady(timeoutMs, targetUrl, method) - : deps.probeGatewayHttpReady(timeoutMs, targetUrl, method, signal); + return deps.probeGatewayHttpReady(timeoutMs, targetUrl, method, signal); };🤖 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/gateway-binding.ts` around lines 235 - 245, The isGatewayHttpReady helper in gateway-binding.ts has a redundant signal === undefined branch because deps.probeGatewayHttpReady already treats the 4th AbortSignal parameter as optional. Simplify the function by removing the ternary and calling deps.probeGatewayHttpReady directly with timeoutMs, targetUrl, method, and the signal argument so the behavior stays the same while avoiding duplicate logic.src/lib/onboard/gateway-http-readiness.ts (1)
75-131: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winSolid abort implementation — consider Node's native
signalsupport to simplify.The manual
settled/onAbort/listener-cleanup dance is correct (idempotentsettle, early-abort short-circuit, listener removed on every settlement path), but Node'shttp.request()has accepted asignaloption natively since v15.3.0 that destroys the request and rejects with anAbortErrorautomatically. Using it would remove most of the manual bookkeeping here (onAbort,request?.destroy()on abort, explicit listener add/remove).Given the current code is correct and tested, this is optional cleanup rather than a fix.
♻️ Sketch using native `signal` support
return new Promise<boolean>((resolve) => { let settled = false; - let request: http.ClientRequest | null = null; + let request: http.ClientRequest | null = null; const settle = (ready: boolean) => { if (settled) return; settled = true; - signal?.removeEventListener("abort", onAbort); resolve(ready); }; - const onAbort = () => { - request?.destroy(); - settle(false); - }; - if (signal?.aborted) { - settle(false); - return; - } - signal?.addEventListener("abort", onAbort, { once: true }); try { request = http - .request(url, { method }, (res) => { + .request(url, { method, signal }, (res) => { res.resume(); const code = res.statusCode || 0; settle(GATEWAY_HTTP_ALIVE_CODES.has(code)); }) .on("error", () => settle(false)); } catch { settle(false); return; }Please confirm this behaves identically (resolves
falserather than rejecting) with the Node version this repo targets before adopting.🤖 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/gateway-http-readiness.ts` around lines 75 - 131, The abort handling in isGatewayHttpReadyImpl is currently implemented manually with settled/onAbort/listener cleanup, but the comment suggests simplifying it with Node’s native http.request signal support. Update the request creation path in isGatewayHttpReady and isGatewayHttpReadyImpl to use the native signal option only if the repo’s supported Node version behaves identically, and keep the public behavior unchanged so aborted probes still resolve false instead of rejecting.
🤖 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/gateway-http-readiness.test.ts`:
- Around line 12-32: The test helpers in gateway-http-readiness.test.ts
introduced two new conditional branches in closeServer and listen, triggering
the test-conditionals scan. Refactor those checks in the closeServer and listen
helpers to avoid explicit if statements by using expression-based handling (for
example, ternary/non-null assertion style) or move the helpers into a shared
non-test utility so the test-file scan no longer counts them. Keep the behavior
of server.close and server.address handling unchanged while removing the counted
conditionals.
---
Nitpick comments:
In `@src/lib/onboard/gateway-binding.ts`:
- Around line 235-245: The isGatewayHttpReady helper in gateway-binding.ts has a
redundant signal === undefined branch because deps.probeGatewayHttpReady already
treats the 4th AbortSignal parameter as optional. Simplify the function by
removing the ternary and calling deps.probeGatewayHttpReady directly with
timeoutMs, targetUrl, method, and the signal argument so the behavior stays the
same while avoiding duplicate logic.
In `@src/lib/onboard/gateway-http-readiness.ts`:
- Around line 75-131: The abort handling in isGatewayHttpReadyImpl is currently
implemented manually with settled/onAbort/listener cleanup, but the comment
suggests simplifying it with Node’s native http.request signal support. Update
the request creation path in isGatewayHttpReady and isGatewayHttpReadyImpl to
use the native signal option only if the repo’s supported Node version behaves
identically, and keep the public behavior unchanged so aborted probes still
resolve false instead of rejecting.
🪄 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: 22d84b7a-f1be-4ca4-9956-b0bd37fd7fe9
📒 Files selected for processing (6)
src/lib/onboard.tssrc/lib/onboard/gateway-binding.tssrc/lib/onboard/gateway-health-wait.test.tssrc/lib/onboard/gateway-health-wait.tssrc/lib/onboard/gateway-http-readiness.test.tssrc/lib/onboard/gateway-http-readiness.ts
2672226 to
b1c663d
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/lib/onboard/gateway-binding.test.ts (1)
50-58: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winAdd a test that actually exercises signal forwarding.
These updates only add a trailing
undefinedto existing assertions, which passes whether or notsignalforwarding is actually implemented correctly — none of the calls pass a realAbortSignal. Consider adding a case that invokeshelpers.isGatewayHttpReady(timeoutMs, url, method, someSignal)and assertsprobeGatewayHttpReadywas called with that exact signal instance, to give behavioral confidence for the new cancellation contract described in context snippet 1 (gateway-binding.ts:230-267).Based on path instructions for
**/*.test.{ts,js,mts,mjs,cts,cjs}: "Prefer observable outcomes through the public boundary over source-text, private-shape, or mock-call assertions" and "Flag... conditionals that make a test pass without exercising its claim."Also applies to: 68-76, 95-112
🤖 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/gateway-binding.test.ts` around lines 50 - 58, The current assertions in gateway-binding.test only verify trailing undefined values, so they do not prove signal forwarding works. Add a test case around helpers.isGatewayHttpReady (and related gateway helpers if needed) that passes a real AbortSignal into the public API and asserts probeGatewayHttpReady receives that exact signal instance. Use the existing helper names to locate the call path and keep the assertion focused on the observable forwarding behavior rather than unchanged undefined arguments.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/gateway-binding.test.ts`:
- Around line 50-58: The current assertions in gateway-binding.test only verify
trailing undefined values, so they do not prove signal forwarding works. Add a
test case around helpers.isGatewayHttpReady (and related gateway helpers if
needed) that passes a real AbortSignal into the public API and asserts
probeGatewayHttpReady receives that exact signal instance. Use the existing
helper names to locate the call path and keep the assertion focused on the
observable forwarding behavior rather than unchanged undefined arguments.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 0c56259f-078b-444d-9924-ffec90487ebe
📒 Files selected for processing (7)
src/lib/onboard.tssrc/lib/onboard/gateway-binding.test.tssrc/lib/onboard/gateway-binding.tssrc/lib/onboard/gateway-health-wait.test.tssrc/lib/onboard/gateway-health-wait.tssrc/lib/onboard/gateway-http-readiness.test.tssrc/lib/onboard/gateway-http-readiness.ts
🚧 Files skipped from review as they are similar to previous changes (4)
- src/lib/onboard/gateway-binding.ts
- src/lib/onboard/gateway-health-wait.test.ts
- src/lib/onboard/gateway-health-wait.ts
- src/lib/onboard.ts
b1c663d to
e28bd3d
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/lib/onboard/gateway-http-readiness.test.ts (1)
21-35: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueMinor: assertion embedded inside the
listenhelper.The
expect(address).toEqual(...)at Line 29 lives inside a shared setup helper rather than the test body, so a failure here is attributed to helper code rather than the specific test. Not blocking, purely a clarity nit.🤖 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/gateway-http-readiness.test.ts` around lines 21 - 35, The assertion inside the shared listen helper is too indirect and should be moved into the actual test body for clearer failure attribution. Update listen in gateway-http-readiness.test.ts so it only starts the server and returns the address/URL, and keep the address shape check in the specific test that calls listen, using the listen helper’s returned value to assert the port is present.
🤖 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/gateway-http-readiness.test.ts`:
- Around line 21-35: The assertion inside the shared listen helper is too
indirect and should be moved into the actual test body for clearer failure
attribution. Update listen in gateway-http-readiness.test.ts so it only starts
the server and returns the address/URL, and keep the address shape check in the
specific test that calls listen, using the listen helper’s returned value to
assert the port is present.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 438cea69-d68f-4875-b10d-ad75a140cff0
📒 Files selected for processing (7)
src/lib/onboard.tssrc/lib/onboard/gateway-binding.test.tssrc/lib/onboard/gateway-binding.tssrc/lib/onboard/gateway-health-wait.test.tssrc/lib/onboard/gateway-health-wait.tssrc/lib/onboard/gateway-http-readiness.test.tssrc/lib/onboard/gateway-http-readiness.ts
🚧 Files skipped from review as they are similar to previous changes (6)
- src/lib/onboard/gateway-http-readiness.ts
- src/lib/onboard/gateway-health-wait.test.ts
- src/lib/onboard/gateway-binding.ts
- src/lib/onboard/gateway-health-wait.ts
- src/lib/onboard.ts
- src/lib/onboard/gateway-binding.test.ts
e28bd3d to
3c62590
Compare
|
✨ Thanks for the PR. This overlaps gateway readiness probes during onboarding for a performance gain while preserving existing behavior. Ready for maintainer review. Related open issues: Related open issues: |
apurvvkumaria
left a comment
There was a problem hiding this comment.
Exact-head maintainer audit at 3c62590 is complete.
Validated:
- gateway health, binding, and HTTP readiness suites: 33/33 passed;
- Biome check passed for all seven changed files;
- all CodeRabbit/Copilot review threads are resolved;
- the contributor commit is GitHub Verified;
- the scope correctly uses Refs #3775 and does not claim to close the broader issue.
One required contributor gate remains: please add this declaration to the PR description yourself:
Signed-off-by: Ho Lim subhoya@gmail.com
The commit trailer does not replace the required PR-body declaration, and maintainers cannot attest to contributor DCO on the author’s behalf. After that update, the branch needs a current required-check run because the reported CI predates today’s main.
Signed-off-by: Ho Lim <subhoya@gmail.com>
3c62590 to
27ed51a
Compare
Resolved on exact head 27ed51a: the contributor added the PR-body DCO declaration, the commit is Verified, and the newly released full workflow matrix completed with all 29 checks green.
cv
left a comment
There was a problem hiding this comment.
Exact-head independent review at 27ed51a42 is clean. The abortable HTTP readiness probe is started only for the existing gateway-health polling attempt, is cancelled when metadata is unhealthy, and preserves the boolean failure contract; the helper forwards the signal through the production boundary. All 29 checks are green, DCO and the Verified commit pass, CodeRabbit has no unresolved major findings, and the focused gateway health/binding/HTTP readiness coverage passed 33/33.
Signed-off-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Adds the pre-tag v0.0.79 release notes entry to `docs/about/release-notes.mdx` so the release plan can be generated after docs merge. The entry summarizes the merged v0.0.79 release train across inference, diagnostics, runtime hardening, policies, onboarding recovery, and release validation. ## Changes - Added the v0.0.79 release notes section with linked follow-up documentation for OpenRouter onboarding, managed vLLM changes, completion and logging, Deep Agents runtime limits, policy updates, onboarding recovery, and release validation. - Source summary: - #6461 -> `docs/about/release-notes.mdx`: Documents OpenRouter onboarding support and links to inference/provider references. - #6271 and #6272 -> `docs/about/release-notes.mdx`: Documents shell completion and structured logging highlights. - #6465, #6539, #6570, and #6528 -> `docs/about/release-notes.mdx`: Documents status route-drift, orphaned sandbox, gateway cleanup, and DGX Spark express-install diagnostics. - #6523, #6551, #6484, #6488, #6324, and #6542 -> `docs/about/release-notes.mdx`: Documents managed vLLM, Qwen3.6 tool parser, compaction, and timeout/readiness improvements. - #6559, #6538, #6560, #6568, #6552, #6567, and #6587 -> `docs/about/release-notes.mdx`: Documents runtime, credential, proxy, PID namespace, TOML, and provider-state hardening. - #6541, #5415, #6246, #6496, and #6573 -> `docs/about/release-notes.mdx`: Documents GitHub policy, Gmail policy, MCP allowlist, WhatsApp, and messaging-variant updates. - #6253, #6572, #6444, #6536, and #5860 -> `docs/about/release-notes.mdx`: Documents onboarding resume and create-step recovery improvements. - #6508, #6527, #5506, #6588, #6446, #6447, #6582, #6296, #6367, #6397, and #6505 -> `docs/about/release-notes.mdx`: Documents docs, release-risk, and E2E validation updates. ## 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 <!-- 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: Release-note prose only. - [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 not applicable, release-note prose only. - [ ] 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) - [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) Docs validation note: `npm run docs:check-agent-variants && npm run docs:check-routes && git diff --check` passed. Full `npm run docs` is currently blocked before Fern validation because the pinned `fern-api@5.65.2` package is unavailable from npm (`ETARGET No matching version found`). --- <!-- 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: Julie Yaunches <jyaunches@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added release notes for v0.0.79 with a new summary of recent improvements, including onboarding and inference options, operator/CLI diagnostics, sandbox recovery hardening, runtime limits, network policy behavior, and release validation updates. * Added updated references and links for the latest release. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary - start the host HTTP readiness probe while OpenShell gateway metadata is collected during gateway health polling - abort the in-flight HTTP probe when metadata is unhealthy, so dependent work does not continue in the background - add AbortSignal support to the production host HTTP readiness probe and cover cancellation behavior Refs NVIDIA#3775 ## Scope This PR covers the dependency-safe gateway-readiness overlap slice of NVIDIA#3775. It intentionally does not close the broader prompt-cancellation, full resume-flow, or background setup failure criteria from that issue; those remain follow-up work. ## Notes This keeps the existing polling budget and output behavior. The overlap is limited to one dependency-safe probe inside each health polling attempt: HTTP readiness can run while metadata commands collect status/info, but the result is only used after metadata is healthy. ## Tests - PATH=/Users/holim/.nvm/versions/node/v22.22.2/bin:$PATH npx vitest run src/lib/onboard/gateway-health-wait.test.ts src/lib/onboard/gateway-binding.test.ts src/lib/onboard/gateway-http-readiness.test.ts - PATH=/Users/holim/.nvm/versions/node/v22.22.2/bin:$PATH npx @biomejs/biome check src/lib/onboard.ts src/lib/onboard/gateway-binding.ts src/lib/onboard/gateway-binding.test.ts src/lib/onboard/gateway-health-wait.ts src/lib/onboard/gateway-health-wait.test.ts src/lib/onboard/gateway-http-readiness.ts src/lib/onboard/gateway-http-readiness.test.ts - PATH=/Users/holim/.nvm/versions/node/v22.22.2/bin:$PATH npm run build:cli - PATH=/Users/holim/.nvm/versions/node/v22.22.2/bin:$PATH npm run typecheck:cli - git diff --check - git diff origin/main -- src/lib/onboard/gateway-health-wait.test.ts src/lib/onboard/gateway-http-readiness.test.ts | (! rg '^\\+.*\\bif\\s*\\(') <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Gateway HTTP readiness checks now accept an optional cancellation signal to stop probing promptly during startup. * **Bug Fixes** * Gateway health polling now triggers the HTTP readiness probe on every attempt, running it concurrently with other health checks. * If the gateway fails health criteria, any in-flight HTTP readiness probe is canceled and treated as not ready. * **Tests** * Updated probe-call expectations. * Added coverage for probe start order relative to metadata checks and for abort behavior (including ensuring the probe observes the abort). <!-- end of auto-generated comment: release notes by coderabbit.ai --> Signed-off-by: Ho Lim <subhoya@gmail.com> Signed-off-by: Ho Lim <subhoya@gmail.com> Signed-off-by: Carlos Villela <cvillela@nvidia.com> Co-authored-by: Carlos Villela <cvillela@nvidia.com>
<!-- markdownlint-disable MD041 --> ## Summary Adds the pre-tag v0.0.79 release notes entry to `docs/about/release-notes.mdx` so the release plan can be generated after docs merge. The entry summarizes the merged v0.0.79 release train across inference, diagnostics, runtime hardening, policies, onboarding recovery, and release validation. ## Changes - Added the v0.0.79 release notes section with linked follow-up documentation for OpenRouter onboarding, managed vLLM changes, completion and logging, Deep Agents runtime limits, policy updates, onboarding recovery, and release validation. - Source summary: - NVIDIA#6461 -> `docs/about/release-notes.mdx`: Documents OpenRouter onboarding support and links to inference/provider references. - NVIDIA#6271 and NVIDIA#6272 -> `docs/about/release-notes.mdx`: Documents shell completion and structured logging highlights. - NVIDIA#6465, NVIDIA#6539, NVIDIA#6570, and NVIDIA#6528 -> `docs/about/release-notes.mdx`: Documents status route-drift, orphaned sandbox, gateway cleanup, and DGX Spark express-install diagnostics. - NVIDIA#6523, NVIDIA#6551, NVIDIA#6484, NVIDIA#6488, NVIDIA#6324, and NVIDIA#6542 -> `docs/about/release-notes.mdx`: Documents managed vLLM, Qwen3.6 tool parser, compaction, and timeout/readiness improvements. - NVIDIA#6559, NVIDIA#6538, NVIDIA#6560, NVIDIA#6568, NVIDIA#6552, NVIDIA#6567, and NVIDIA#6587 -> `docs/about/release-notes.mdx`: Documents runtime, credential, proxy, PID namespace, TOML, and provider-state hardening. - NVIDIA#6541, NVIDIA#5415, NVIDIA#6246, NVIDIA#6496, and NVIDIA#6573 -> `docs/about/release-notes.mdx`: Documents GitHub policy, Gmail policy, MCP allowlist, WhatsApp, and messaging-variant updates. - NVIDIA#6253, NVIDIA#6572, NVIDIA#6444, NVIDIA#6536, and NVIDIA#5860 -> `docs/about/release-notes.mdx`: Documents onboarding resume and create-step recovery improvements. - NVIDIA#6508, NVIDIA#6527, NVIDIA#5506, NVIDIA#6588, NVIDIA#6446, NVIDIA#6447, NVIDIA#6582, NVIDIA#6296, NVIDIA#6367, NVIDIA#6397, and NVIDIA#6505 -> `docs/about/release-notes.mdx`: Documents docs, release-risk, and E2E validation updates. ## 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 <!-- 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: Release-note prose only. - [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 not applicable, release-note prose only. - [ ] 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) - [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) Docs validation note: `npm run docs:check-agent-variants && npm run docs:check-routes && git diff --check` passed. Full `npm run docs` is currently blocked before Fern validation because the pinned `fern-api@5.65.2` package is unavailable from npm (`ETARGET No matching version found`). --- <!-- 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: Julie Yaunches <jyaunches@nvidia.com> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added release notes for v0.0.79 with a new summary of recent improvements, including onboarding and inference options, operator/CLI diagnostics, sandbox recovery hardening, runtime limits, network policy behavior, and release validation updates. * Added updated references and links for the latest release. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Summary
Refs #3775
Scope
This PR covers the dependency-safe gateway-readiness overlap slice of #3775. It intentionally does not close the broader prompt-cancellation, full resume-flow, or background setup failure criteria from that issue; those remain follow-up work.
Notes
This keeps the existing polling budget and output behavior. The overlap is limited to one dependency-safe probe inside each health polling attempt: HTTP readiness can run while metadata commands collect status/info, but the result is only used after metadata is healthy.
Tests
Summary by CodeRabbit
New Features
Bug Fixes
Tests
Signed-off-by: Ho Lim subhoya@gmail.com