- Cleared an account's persisted runtime skip reason on its next successful request, so a reason with no time-based expiry (notably
token-exhausted) no longer lingers inaccountSkipReasonsand keeps the forecast reporting a working account as unavailable. - Added
recordRuntimeAccountRecovery(index)on the proxy success path: it removes the account's entry fromaccountSkipReasonsandlastPoolExhaustionSkipReasons, is a no-op when nothing is recorded, and ignores non-integer or negative indices.
- Stopped
forecast --livemarking working accounts as unavailable from a stale runtime overlay that persisted a skip reason after its window expired but was never cleared on a subsequent successful request. - Ignored stale time-bounded overlay reasons by cross-referencing disk state:
rate-limitedwhengetRateLimitResetTimeForFamilyfinds no active reset (including model-scoped keys likecodex:5h), andcooling-down:...whencoolingDownUntilis absent or elapsed. - Left non-time-bounded reasons (
circuit-open,token-exhausted,policy-blocked) applied as-is by the forecast; these are cleared at the source on a successful request instead (see Runtime Rotation). - Aligned
doctor'sforecast-runtime-alignmentcheck, which shares the forecast evaluation, so the same stale state no longer raises a spurious warning.