Skip to content

perf(onboard): replace fixed readiness polls with deadline waits#7274

Open
amata-human wants to merge 10 commits into
mainfrom
3768-perf-onboard-deadline-readiness-polls
Open

perf(onboard): replace fixed readiness polls with deadline waits#7274
amata-human wants to merge 10 commits into
mainfrom
3768-perf-onboard-deadline-readiness-polls

Conversation

@amata-human

@amata-human amata-human commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Summary

Replace the remaining fixed-count onboarding readiness loops with fast, deadline-based polling that backs off to a capped interval. Fast systems now continue immediately, while slow systems receive the full configured deadline and timeout messages report the budget that was actually used.

Related Issue

Fixes #3768

Changes

  • Add a shared readiness-wait option builder for deadline budgets, capped backoff, legacy poll-budget conversion, zero-budget test behavior, and deadline formatting. Sandbox, dashboard, and gateway onboarding consumers need the same timing contract; keeping it shared prevents their retry semantics and timeout messages from drifting. readiness-wait.test.ts protects immediate, retry, timeout, short-budget, and zero-budget behavior.
  • Apply deadline waits to sandbox creation, dashboard readiness, gateway startup and recovery, and agent gateway startup. Preserve NEMOCLAW_HEALTH_POLL_COUNT and NEMOCLAW_HEALTH_POLL_INTERVAL by deriving the same total budget rather than adding another configuration path.
  • Keep sandbox phase debounce and stable-ready observation semantics while making ordinary readiness cadence adaptive and bounded by NEMOCLAW_SANDBOX_READY_TIMEOUT. Preserve the compatibility recreate path’s original two-second stable-ready confirmation interval, with regression coverage for the timing invariant.
  • Update command and troubleshooting documentation so debounce guidance describes observation counts and the authoritative overall deadline.

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: Local nine-category review completed. The change only alters bounded polling schedules and timeout reporting; it adds no credential, authorization, command-construction, dependency, network-policy, or configuration exposure. Boundary and timeout tests cover the changed control flow.
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit: Not applicable; scripts/prepare-dgx-station-host.sh is unchanged.
  • Station profile/scenario: Not applicable.
  • Result: Not applicable.
  • Supporting evidence: Not applicable.

Verification

  • PR description includes a Signed-off-by: line 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: vitest run --project cli over the eight affected readiness/onboard test files after merging current main: 81 passed, 1 skipped.
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result: Not required for this scoped runtime change. A full CLI run reached 9,546 passed and 1 skipped; two unrelated base-image.test.ts 5-second timeouts reproduced in isolation.
  • 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)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: Angel Mata amata@nvidia.com

Summary by CodeRabbit

  • Improvements
    • Standardized gateway and sandbox readiness waiting with faster initial polling, adaptive backoff, and consistent deadline-based outcomes.
    • Added support for tolerating transient readiness errors via a configurable debounce window, while still failing immediately for terminal failure phases.
    • Enhanced gateway startup and recovery to detect early exits and clearly differentiate healthy vs timeout results.
  • New Features
    • Introduced a reusable readiness-wait utility used across onboarding and readiness tracing.
  • Documentation
    • Updated readiness polling/troubleshooting docs with precise debounce/timeout semantics and examples.
  • Tests
    • Added/updated readiness, gateway, and tracing tests to match the new timing behavior.

@amata-human amata-human added area: docs Documentation, examples, guides, or docs build area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow area: performance Latency, throughput, resource use, benchmarks, or scaling labels Jul 21, 2026
@amata-human amata-human self-assigned this Jul 21, 2026
@github-actions

Copy link
Copy Markdown
Contributor

@github-code-quality

github-code-quality Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Overview

Languages: TypeScript

TypeScript / code-coverage/plugin

The overall coverage in commit b886cc8 in the 3768-perf-onboard-de... branch remains at 96%, unchanged from commit dbac677 in the main branch.

TypeScript / code-coverage/cli

The overall coverage in commit b886cc8 in the 3768-perf-onboard-de... branch is 81%. The coverage in commit dbac677 in the main branch is 80%.

Show a code coverage summary of the most impacted files.
File main dbac677 3768-perf-onboard-de... b886cc8 +/-
src/lib/state/m...-acquisition.ts 89% 87% -2%
src/lib/onboard...way-recovery.ts 93% 92% -1%
src/lib/onboard.ts 31% 31% 0%
src/lib/onboard...-health-wait.ts 90% 90% 0%
src/lib/onboard/tracing.ts 80% 85% +5%
src/lib/agent/onboard.ts 72% 84% +12%
src/lib/onboard...ness-tracing.ts 75% 92% +17%
src/lib/onboard...adiness-wait.ts 0% 100% +100%
src/lib/onboard...ay-readiness.ts 0% 100% +100%
src/lib/agent/g...ay-readiness.ts 0% 100% +100%

Updated July 25, 2026 17:51 UTC

@coderabbitai

coderabbitai Bot commented Jul 21, 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 change replaces fixed readiness polling with shared deadline-based waits, adaptive backoff, zero-budget handling, and formatted deadlines across agent, gateway, sandbox, and dashboard onboarding flows. Tests, traces, timeout messages, and readiness documentation are updated accordingly.

Changes

Onboarding readiness waits

Layer / File(s) Summary
Shared readiness scheduler
src/lib/onboard/readiness-wait.ts, src/lib/onboard/readiness-wait.test.ts
Adds shared deadline-budget, adaptive-interval, zero-budget, and deadline-formatting utilities with focused tests.
Agent gateway readiness
src/lib/agent/gateway-readiness.ts, src/lib/agent/gateway-readiness.test.ts, src/lib/agent/onboard.ts, src/lib/agent/onboard.test.ts
Adds waitForAgentGatewayReady and replaces inline agent health polling with deadline-based waiting and injectable clock/sleep hooks.
Gateway health and recovery
src/lib/onboard.ts, src/lib/onboard/gateway-health-wait.ts, src/lib/onboard/gateway-recovery.ts, src/lib/onboard/docker-driver-gateway-readiness.ts, src/lib/onboard/*gateway*.test.ts
Routes gateway startup and recovery through shared wait options while preserving health, TCP, process, and bridge checks; timeout messages report configured limits.
Sandbox and dashboard readiness
src/lib/onboard/sandbox-readiness-tracing.ts, src/lib/onboard/sandbox-readiness-tracing.test.ts, src/lib/onboard/tracing.ts, docs/reference/commands.mdx, docs/reference/troubleshooting.mdx
Converts sandbox and dashboard loops to deadline-based waits, adds Error-phase debounce handling and tracing updates, and documents the resulting polling and timeout behavior.

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

Suggested labels: refactor

Suggested reviewers: dfernandez365-rgb

Sequence Diagram(s)

sequenceDiagram
  participant Onboarding
  participant ReadinessWait
  participant GatewayOrSandbox
  participant Diagnostics
  Onboarding->>ReadinessWait: create deadline-based wait options
  ReadinessWait->>GatewayOrSandbox: poll readiness with adaptive intervals
  GatewayOrSandbox-->>ReadinessWait: readiness or phase result
  ReadinessWait-->>Onboarding: success or deadline outcome
  Onboarding->>Diagnostics: record traces and failure details
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% 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
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: replacing fixed readiness polls with deadline-based waits.
Linked Issues check ✅ Passed The changes cover the linked issue scope by updating sandbox, dashboard, gateway recovery, agent gateway, and tests to use deadline-based waits.
Out of Scope Changes check ✅ Passed The docs and test updates are directly tied to the readiness-wait refactor and do not indicate unrelated scope creep.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 3768-perf-onboard-deadline-readiness-polls

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

@github-actions

github-actions Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Informational

Advisor assessment: Informational / medium 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 · medium confidence · 0 blockers · 0 warnings · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 3 warnings · 0 suggestions
  • Model comparison: normalized findings differ; normalized E2E selections differ; Nemotron reported the same number of blockers, 3 more warnings, the same number of suggestions.

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: full-e2e, hermes-e2e, onboard-repair, onboard-resume, cloud-onboard

1 optional E2E recommendation
  • gateway-health-honest

Workflow run details

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

@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: 1

🧹 Nitpick comments (3)
src/lib/onboard.ts (1)

2108-2158: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚖️ Poor tradeoff

Consider extracting the Docker-driver gateway readiness loop later.

This block mixes several concerns inline (child-exit tracking, endpoint registration, health/TCP checks, sandbox-bridge verification) inside the large onboard.ts entrypoint. A dedicated module alongside the existing docker-driver-gateway-* helpers would improve testability, matching the pattern already used for gateway-recovery.ts. As per path instructions, this repo's guidance for src/lib/onboard.ts is to keep PRs "thin" and mechanical and defer such moves to a later, separate change rather than doing it in this migration PR, so this is a deferred suggestion only.

🤖 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.ts` around lines 2108 - 2158, No code change is required for
this deferred suggestion; leave the Docker-driver gateway readiness loop inline
in onboard.ts. Consider extracting the logic into a dedicated
docker-driver-gateway helper module in a separate follow-up change.

Source: Path instructions

src/lib/onboard/gateway-recovery.ts (1)

230-237: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Misleading failure message for legacy zero-interval recovery config.

formatReadinessDeadline(waitBudgetMs) is a plain ms/s formatter. For a legacy recoveryPollInterval=0/recoveryPollCount>0 config, waitBudgetMs computes to 0, so the thrown message reads "...within the configured 0ms recovery deadline" even though the loop actually ran up to recoveryPollCount immediate probes (via the zeroBudgetAttempts path). This can mislead an operator diagnosing a failed recovery into thinking no attempts occurred. formatGatewayHealthWaitLimit (used for the equivalent case in src/lib/onboard.ts) already special-cases this by reporting "N immediate health probes" — consider reusing that same distinction here for consistent diagnostics.

♻️ Possible approach
-  throw new Error(
-    `Gateway '${gatewayName}' did not become ready within the configured ${formatReadinessDeadline(
-      waitBudgetMs,
-    )} recovery deadline (${recoveryPollInterval}s poll interval)`,
-  );
+  const deadlineDescription =
+    recoveryPollInterval === 0 && recoveryPollCount > 0
+      ? `${recoveryPollCount} immediate health ${recoveryPollCount === 1 ? "probe" : "probes"}`
+      : `${formatReadinessDeadline(waitBudgetMs)} recovery deadline (${recoveryPollInterval}s poll interval)`;
+  throw new Error(
+    `Gateway '${gatewayName}' did not become ready within the configured ${deadlineDescription}`,
+  );
🤖 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-recovery.ts` around lines 230 - 237, Update the
failure message in the gateway recovery timeout path to use the same zero-budget
distinction as formatGatewayHealthWaitLimit: when recoveryPollInterval is zero
and zeroBudgetAttempts applies, report the configured number of immediate probes
instead of a 0ms recovery deadline. Preserve the existing
deadline-and-poll-interval wording for nonzero budgets and normal
configurations.
src/lib/onboard/sandbox-readiness-tracing.ts (1)

375-429: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Dashboard zero-budget path skips the not_ready/terminal trace emitted by the other two waiters.

When budgetMs is 0, waitOptions is null and ready short-circuits to false without ever calling waitUntil, but no addTraceEvent is emitted here — unlike pollSandboxReady (Line 124: options.trace?.("not_ready", ...)) and waitForCreatedSandboxReadyWithTrace (Line 256: addTraceEvent("not_ready", ...)), which both explicitly trace the zero-budget short-circuit. Only the console.warn fires, so operators relying on tracing to diagnose a misconfigured zero timeout for dashboard readiness get no signal.

♻️ Proposed fix to trace the zero-budget short-circuit
   return withDashboardReadinessTrace(sandboxName, port, timeoutSecs, () => {
     let attempt = 0;
     const waitOptions = createReadinessWaitOptions({
       budgetMs,
       maxIntervalMs: 2_000,
       now: options.now,
       sleep: (ms) => sleep(ms / 1000),
     });
+    if (!waitOptions) {
+      addTraceEvent("not_ready", { attempts: 0, deadline_ms: budgetMs });
+    }
     const ready =
       waitOptions !== null &&
       waitUntil(() => {
🤖 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/sandbox-readiness-tracing.ts` around lines 375 - 429, Update
waitForDashboardReadyWithTrace so the zero-budget path (when waitOptions is
null) emits the same terminal "not_ready" trace event as the other readiness
waiters before returning false. Preserve the existing probe, success, warning,
and nonzero-budget behavior.
🤖 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/reference/troubleshooting.mdx`:
- Around line 1504-1511: Correct the example in the troubleshooting guidance
following the “fail fast” instruction: update
NEMOCLAW_SANDBOX_READY_ERROR_DEBOUNCE to 1 and remove the contradictory comment
about tolerating 60 observations, while leaving the surrounding timeout guidance
unchanged.

---

Nitpick comments:
In `@src/lib/onboard.ts`:
- Around line 2108-2158: No code change is required for this deferred
suggestion; leave the Docker-driver gateway readiness loop inline in onboard.ts.
Consider extracting the logic into a dedicated docker-driver-gateway helper
module in a separate follow-up change.

In `@src/lib/onboard/gateway-recovery.ts`:
- Around line 230-237: Update the failure message in the gateway recovery
timeout path to use the same zero-budget distinction as
formatGatewayHealthWaitLimit: when recoveryPollInterval is zero and
zeroBudgetAttempts applies, report the configured number of immediate probes
instead of a 0ms recovery deadline. Preserve the existing
deadline-and-poll-interval wording for nonzero budgets and normal
configurations.

In `@src/lib/onboard/sandbox-readiness-tracing.ts`:
- Around line 375-429: Update waitForDashboardReadyWithTrace so the zero-budget
path (when waitOptions is null) emits the same terminal "not_ready" trace event
as the other readiness waiters before returning false. Preserve the existing
probe, success, warning, and nonzero-budget behavior.
🪄 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: bdd98380-a809-42cf-a56d-6a2169fe3750

📥 Commits

Reviewing files that changed from the base of the PR and between d5fa194 and 0ba29dd.

📒 Files selected for processing (15)
  • docs/reference/commands.mdx
  • docs/reference/troubleshooting.mdx
  • src/lib/agent/gateway-readiness.test.ts
  • src/lib/agent/gateway-readiness.ts
  • src/lib/agent/onboard.ts
  • src/lib/onboard.ts
  • src/lib/onboard/gateway-health-wait.test.ts
  • src/lib/onboard/gateway-health-wait.ts
  • src/lib/onboard/gateway-recovery.test.ts
  • src/lib/onboard/gateway-recovery.ts
  • src/lib/onboard/readiness-wait.test.ts
  • src/lib/onboard/readiness-wait.ts
  • src/lib/onboard/sandbox-readiness-tracing.test.ts
  • src/lib/onboard/sandbox-readiness-tracing.ts
  • src/lib/onboard/tracing.ts

Comment thread docs/reference/troubleshooting.mdx
Signed-off-by: Angel Mata <amata@nvidia.com>
Signed-off-by: Angel Mata <amata@nvidia.com>
Signed-off-by: Angel Mata <amata@nvidia.com>
@amata-human

Copy link
Copy Markdown
Contributor Author

CI blocker note: reviewed-npm-audit fails on newly reported vulnerabilities in the reviewed archive graph (tar critical and axios high). This PR does not change package.json, either lockfile, or ci/reviewed-npm-audit.json (git diff origin/main...HEAD is empty for all five inputs), and the audit reproduces locally under the exact workflow Node 22.22.2. All eight CLI shards, merged CLI coverage, static checks, build/typecheck, CodeQL, growth guardrails, and the other required jobs pass. The downstream checks and E2E coordination failures are consequences of that audit prerequisite.

@dfernandez365-rgb dfernandez365-rgb left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Exact-head review: 44926b00efa4b96b3cded6f6d539ce112d063d95.

The deadline conversion shortens the GPU compatibility stale-row confirmation window from 2 seconds to 250 ms. waitForCreatedSandboxReadyWithTrace() deliberately receives stableReadyPolls: 2 on the compatibility recreate path because OpenShell can retain the old container's Ready row before publishing the replacement supervisor's Error -> Ready transition. On d5fa1942, the confirmation poll is separated by sleep(2). This head routes the same check through createReadinessWaitOptions() with the default 250 ms initial interval (sandbox-readiness-tracing.ts:249-253), so two reads of the same stale row can now satisfy the safeguard before re-registration becomes visible.

I reproduced the exact-head behavior with a deterministic clock and an always-Ready list: the function returned {ready:true} after a single 0.25 second sleep. The existing stability test remains green because it asserts only call counts, not the temporal invariant.

Please preserve a minimum two-second confirmation window for the compatibility stableReadyPolls path (or replace the count with an explicit stability duration), and add a regression test that proves a stale Ready row lasting longer than 250 ms cannot reach the GPU proof prematurely. The general fast first retry can remain for readiness paths that do not carry this stale-registration contract.

@jyaunches

Copy link
Copy Markdown
Contributor

Addressed the exact-head readiness-stability finding in 3d1d911.

The ordinary readiness paths still start at 250 ms and back off adaptively. The compatibility recreate path (stableReadyPolls greater than 1) now retains the original 2-second confirmation interval, and the stability regression test asserts that first delay explicitly.

Local verification:

  • 30 focused CLI tests passed (1 existing skip)
  • Biome passed for the four changed files
  • npm run build:cli passed
  • npm run typecheck:cli passed

Please re-review the updated head.

jyaunches and others added 2 commits July 23, 2026 10:37
@amata-human

Copy link
Copy Markdown
Contributor Author

Updated head bbdb0e28883e235d7c2bcd94d9bbab1b07bce293 merges current main and retains the readiness-stability fix from 3d1d911431f1fa8267280e907e428048ab92f832.

Fresh local verification on the merged head:

  • 81 focused readiness/onboard tests passed (1 existing skip)
  • npm run check:diff passed, including prek pre-commit/pre-push hooks and CLI typechecking

The prior E2E failure was a cold sandbox build exceeding the performance budget; the refreshed head now includes current main runner routing and retry changes.

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

@amata-human, I’ll re-review the updated head, including the retained readiness-stability behavior and the merged main changes.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@amata-human

Copy link
Copy Markdown
Contributor Author

CI follow-up on refreshed head bbdb0e28883e235d7c2bcd94d9bbab1b07bce293:

  • All ordinary PR checks passed, including all 8 CLI shards, aggregate CLI coverage, build/typecheck, static checks, npm audit, CodeQL, sandbox image tests, macOS E2E, DCO, docs receipt, and both automated review-advisor lanes. CodeRabbit completed with no new actionable findings.
  • Selected onboard-repair and onboard-resume E2E scenarios passed.
  • hermes-e2e failed before test execution because the ubuntu-latest runner could not provision its requested swap. The failed-job rerun reproduced this as Hermes E2E swap provisioning failed: 0 of 34359738368 bytes active.
  • full-e2e completed onboarding successfully on both attempts, but cold sandbox-image construction exceeded the existing absolute performance budget: 199.6s initially and 189.5s on rerun versus 171s. The readiness waits themselves completed successfully.

These two remaining E2E failures are hosted-runner capacity/performance failures and are not safely addressable by this readiness-polling PR. The branch is clean, current with main, and awaiting maintainer re-review/CI disposition.

@apurvvkumaria apurvvkumaria added the v0.0.96 Release target label Jul 25, 2026
@apurvvkumaria apurvvkumaria self-assigned this Jul 25, 2026
Signed-off-by: Apurv Kumaria <akumaria@nvidia.com>

# Conflicts:
#	docs/reference/commands.mdx
@apurvvkumaria

Copy link
Copy Markdown
Collaborator

Synced the contributor branch normally to current main in signed, GitHub-verified merge commit b886cc8f41dfa3b55a5036a3e11fbb9d8a129ef0; the original author commits and credit remain intact.

The prior requested stability invariant is preserved at the exact head: stableReadyPolls > 1 keeps a 2-second initial confirmation interval, and the regression test asserts that first 2-second sleep. The resolved CodeRabbit findings also remain covered: zero-interval recovery reports immediate probe counts, zero-budget dashboard readiness emits not_ready, and the troubleshooting fail-fast example uses debounce 1.

Validation on the merged tree:

  • focused readiness/deadline tests: 8 files, 83 passed, 1 skipped
  • plugin build: passed
  • CLI build and CLI typecheck: passed
  • strict docs validation: passed
  • pre-commit and pre-push hooks: passed
  • documentation-writer review: no additional docs needed

@dfernandez365-rgb please re-review the exact head when available.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: docs Documentation, examples, guides, or docs build area: onboarding Onboarding FSM, provider setup, sandbox launch, or first-run flow area: performance Latency, throughput, resource use, benchmarks, or scaling v0.0.96 Release target

Projects

None yet

Development

Successfully merging this pull request may close these issues.

perf(onboard): replace remaining fixed readiness polls with deadline-based waits

4 participants