proof-s2 zero-budget semantic-index
S2 proof suite
Proof set for Provider failures are normalized
Behaviours 1 Tests 55 Graph 58 nodes · 57 edges Runner - CircleCI - Source wiki/content/stories/SYSTEM-STORIES.md
Test witnesses
These tests belong to the suite. Missing implementation links stay visible until a code-backed graph claim records them.
| Test | Status | Implementation | Open |
|---|---|---|---|
critic passes on last provider even if critic fails @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
critic rejection falls through to next provider @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
does not replay active cooldown for duplicate provider-model keys @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
falls through to next provider on error @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
handles no retry timing @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
includes providers and retry timing in message @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
is instanceof Error @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
malformed-output on fireworks does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
malformed-output on groq does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
malformed-output on openrouter does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
malformed-output on together does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes malformed-output on fireworks into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes malformed-output on groq into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes malformed-output on openrouter into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes malformed-output on together into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes quota-exhausted on fireworks into RateLimitError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes quota-exhausted on groq into RateLimitError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes quota-exhausted on openrouter into RateLimitError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes quota-exhausted on together into RateLimitError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes refusal on fireworks into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes refusal on groq into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes refusal on openrouter into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes refusal on together into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes server-5xx on fireworks into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes server-5xx on groq into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes server-5xx on openrouter into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes server-5xx on together into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes timeout on fireworks into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes timeout on groq into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes timeout on openrouter into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
normalizes timeout on together into ChainExhaustionError @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
notifies the attempt observer as each provider is classified @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
provider-neutral shape: same fields populated regardless of which provider failed @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
quota-exhausted on fireworks does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
quota-exhausted on groq does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
quota-exhausted on openrouter does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
quota-exhausted on together does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
records provider cooldown attempts after a rate limit @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
refusal on fireworks does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
refusal on groq does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
refusal on openrouter does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
refusal on together does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
returns result from first provider on success @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
server-5xx on fireworks does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
server-5xx on groq does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
server-5xx on openrouter does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
server-5xx on together does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
throws RateLimitError when all providers are rate-limited @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
throws regular error when some providers fail with non-429 errors @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
throws when chain is empty @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
timeout on fireworks does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
timeout on groq does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
timeout on openrouter does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
timeout on together does not leak the API key @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |
times out a stalled provider attempt and falls through @cv/domain · vitest · tests/ai.test.ts | catalog | missing implementation link | Test |