From 889a898e512c3cf1e2fc1439263fb108ac1f286c Mon Sep 17 00:00:00 2001 From: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> Date: Tue, 1 Sep 2026 02:13:22 -0300 Subject: [PATCH] test(sse): align turn-pin suites to the provider-cooldown window gate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The two native-codex-turn-pin suites landed via the #10379 merge wave after PR #12247 forked, so #12247's green CI never saw them: they set up 'provider in global cooldown' with a single recordProviderCooldown call, the pre-#12247 contract. Since the window gate, a provider only counts as cooling after providerFailureThreshold failures inside the window — the setup now loops to the profile threshold (same alignment the tracker's own legacy suite got in Sibling sweep: all 7 suites touching recordProviderCooldown pass (60/60). --- tests/unit/native-codex-turn-pin-10379.test.ts | 9 +++++++-- .../native-codex-turn-pin-model-scoped-fallback.test.ts | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/tests/unit/native-codex-turn-pin-10379.test.ts b/tests/unit/native-codex-turn-pin-10379.test.ts index df469648b7..cfe719da0a 100644 --- a/tests/unit/native-codex-turn-pin-10379.test.ts +++ b/tests/unit/native-codex-turn-pin-10379.test.ts @@ -20,6 +20,7 @@ const { getCircuitBreaker, resetAllCircuitBreakers } = await import("../../src/shared/utils/circuitBreaker.ts"); const { recordProviderCooldown, clearCooldownState } = await import("../../open-sse/services/providerCooldownTracker.ts"); +const { PROVIDER_PROFILES } = await import("../../open-sse/config/constants.ts"); const { resolveResilienceSettings } = await import("../../src/lib/resilience/settings.ts"); const BODY = { @@ -222,9 +223,13 @@ test("isPinnedTargetModelScopedUnusable distinguishes model lockout from provide false ); - // Reset breaker, test provider cooldown + // Reset breaker, test provider cooldown. Since #12247 the global provider + // cooldown honors the PROVIDER_PROFILES window gate: the provider only counts + // as cooling after providerFailureThreshold failures inside the window. cb.reset(); - recordProviderCooldown("antigravity", undefined, resilienceSettings); + for (let i = 0; i < PROVIDER_PROFILES.oauth.providerFailureThreshold; i++) { + recordProviderCooldown("antigravity", undefined, resilienceSettings); + } assert.equal( await isPinnedTargetModelScopedUnusable({ target, diff --git a/tests/unit/native-codex-turn-pin-model-scoped-fallback.test.ts b/tests/unit/native-codex-turn-pin-model-scoped-fallback.test.ts index 314dd3efdb..595161d64e 100644 --- a/tests/unit/native-codex-turn-pin-model-scoped-fallback.test.ts +++ b/tests/unit/native-codex-turn-pin-model-scoped-fallback.test.ts @@ -19,6 +19,7 @@ const { } = await import("../../open-sse/services/combo/nativeCodexTurnPin.ts"); const { recordProviderCooldown, isProviderInCooldown, clearCooldownState } = await import("../../open-sse/services/providerCooldownTracker.ts"); +const { PROVIDER_PROFILES } = await import("../../open-sse/config/constants.ts"); const { getCircuitBreaker, resetAllCircuitBreakers } = await import("../../src/shared/utils/circuitBreaker.ts"); const { resolveResilienceSettings } = await import("../../src/lib/resilience/settings.ts"); @@ -403,7 +404,11 @@ describe("Native Codex Turn Pin model-scoped fallback", () => { allCombos: null, }); - recordProviderCooldown("antigravity", undefined, settings); + // #12247: the window gate needs providerFailureThreshold failures before + // the whole provider counts as cooling. + for (let i = 0; i < PROVIDER_PROFILES.oauth.providerFailureThreshold; i++) { + recordProviderCooldown("antigravity", undefined, settings); + } assert.equal(isProviderInCooldown("antigravity", undefined, settings), true); const attempted: string[] = [];