← Back to behaviour
S2 green High

Provider failures are normalized

Source system-story File wiki/content/stories/SYSTEM-STORIES.md Suites 1 Tests 55 Graph 59 nodes · 114 edges

Behaviour shape

Given
The system story behaviour S2 is declared in wiki/content/stories/SYSTEM-STORIES.md.
When
The QA proof set evaluates 1 declared spec.
Then
  • The system satisfies: Provider failures are normalized.

Proof suites

1 suites · 55 tests
S2 proof suite
Proof set for Provider failures are normalized
proof-s2
55 tests
via audit
TestStatusOpen
critic passes on last provider even if critic fails
@cv/domain · vitest · tests/ai.test.ts
catalogTest
critic rejection falls through to next provider
@cv/domain · vitest · tests/ai.test.ts
catalogTest
does not replay active cooldown for duplicate provider-model keys
@cv/domain · vitest · tests/ai.test.ts
catalogTest
falls through to next provider on error
@cv/domain · vitest · tests/ai.test.ts
catalogTest
handles no retry timing
@cv/domain · vitest · tests/ai.test.ts
catalogTest
includes providers and retry timing in message
@cv/domain · vitest · tests/ai.test.ts
catalogTest
is instanceof Error
@cv/domain · vitest · tests/ai.test.ts
catalogTest
malformed-output on fireworks does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
malformed-output on groq does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
malformed-output on openrouter does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
malformed-output on together does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes malformed-output on fireworks into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes malformed-output on groq into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes malformed-output on openrouter into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes malformed-output on together into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes quota-exhausted on fireworks into RateLimitError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes quota-exhausted on groq into RateLimitError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes quota-exhausted on openrouter into RateLimitError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes quota-exhausted on together into RateLimitError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes refusal on fireworks into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes refusal on groq into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes refusal on openrouter into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes refusal on together into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes server-5xx on fireworks into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes server-5xx on groq into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes server-5xx on openrouter into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes server-5xx on together into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes timeout on fireworks into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes timeout on groq into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes timeout on openrouter into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
normalizes timeout on together into ChainExhaustionError
@cv/domain · vitest · tests/ai.test.ts
catalogTest
notifies the attempt observer as each provider is classified
@cv/domain · vitest · tests/ai.test.ts
catalogTest
provider-neutral shape: same fields populated regardless of which provider failed
@cv/domain · vitest · tests/ai.test.ts
catalogTest
quota-exhausted on fireworks does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
quota-exhausted on groq does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
quota-exhausted on openrouter does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
quota-exhausted on together does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
records provider cooldown attempts after a rate limit
@cv/domain · vitest · tests/ai.test.ts
catalogTest
refusal on fireworks does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
refusal on groq does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
refusal on openrouter does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
refusal on together does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
returns result from first provider on success
@cv/domain · vitest · tests/ai.test.ts
catalogTest
server-5xx on fireworks does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
server-5xx on groq does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
server-5xx on openrouter does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
server-5xx on together does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
throws RateLimitError when all providers are rate-limited
@cv/domain · vitest · tests/ai.test.ts
catalogTest
throws regular error when some providers fail with non-429 errors
@cv/domain · vitest · tests/ai.test.ts
catalogTest
throws when chain is empty
@cv/domain · vitest · tests/ai.test.ts
catalogTest
timeout on fireworks does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
timeout on groq does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
timeout on openrouter does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
timeout on together does not leak the API key
@cv/domain · vitest · tests/ai.test.ts
catalogTest
times out a stalled provider attempt and falls through
@cv/domain · vitest · tests/ai.test.ts
catalogTest