Repository navigation
fix(provider): retry timed-out status probes - #22794
juliusmarminge wants to merge 3 commits into
Conversation
…at must recover (#7230) Takeover regression tests only; the fix lands separately on this branch. A probe that timed out must be retried before the next periodic refresh, and a probe that keeps timing out must not be retried without bound. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
…t periodic refresh (#7230) A probe that reached the executable but got no verdict (Claude's --version past its deadline, a crashed process) stayed authoritative as an error until the periodic refresh, five minutes by default, or a manual refresh. The managed provider now retries such a probe up to three times, thirty seconds apart, through the existing demand-aware serialized refresh path. A conclusive probe resets the budget; an exhausted budget leaves the periodic refresh in charge, so a provider that keeps failing is not probed without bound. Inconclusive is a structural check on the snapshot (enabled, installed, error status, unknown auth) rather than message text, so Codex's timeout snapshot qualifies too and an unauthenticated verdict never retries. Co-Authored-By: Claude Fable 5.1 <[email protected]>
…terval A health refresh interval of 0 turns background provider refreshes off, but the inconclusive-probe retry only checked refreshOnInterval, so a provider whose probe kept timing out was still probed four times in the first five minutes. The retry now decides under the refresh semaphore right before probing: it checks the effective interval (including a setting changed while it slept), and uses the failure count as a probe generation so a manual refresh that ran meanwhile makes the queued retry a no-op instead of a redundant probe. Also corrects the comment on the retry delay: 30s is shorter than the staged Claude probe and the ACP probe deadlines; overlap is prevented by the semaphore, not the delay. Co-Authored-By: Claude Fable 5.1 <[email protected]>
|
Related: #25499. A Codex status probe there failed because the app-server sent back an error ( |
|
Closing this draft: it has sat unfinished and #7230, which it was for, is closed. |
A single provider status timeout replaces the usable snapshot with an error that remains visible after the executable recovers. This fixes #7230.
Reproduced on 1dfb572871 using an isolated
vp run devserver and a Claude wrapper that sleeps 25 seconds on its first version probe, exceeding the current 20-second deadline. Settings reported Unavailable while later wrapper version calls succeeded; manual Refresh recovered readiness without credential changes.Draft: regression tests first; implementation and review are pending. Intended change: bounded timeout recovery through the existing serialized, demand-aware refresh path.
Evidence: baseline runtime transcript.
Unverified: automatic recovery, Windows, macOS, Codex and other providers, desktop shell and mobile.
Prepared with Claude Opus 5.5 and GPT-6.1-Sol through the T3 Code Codex harness.