You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
| 400 | Unknown model slug | Model unavailable; pick another |
241
291
| 401 | Invalid or revoked key | Key rejected; re-enter or create a new one |
242
292
| 402 | Out of credits | Out of credits; add credits or pick a free model |
243
-
| 404 | Unknown model slug | Model unavailable; pick another |
244
293
| 429 | Rate limited | Free-model daily limit reached, or too many requests |
245
294
246
295
The 402 and 429 cases are the ones users on free models will actually hit, so their copy
247
296
should name the free-model limits explicitly and point at the free-model filter in the
248
-
picker. Only the 401 mapping is verified; OpenRouter checks auth before model validity,
249
-
so 402/404/429 could not be provoked with an invalid key. Confirm each during Phase 2.
297
+
picker. 400 and 401 are verified live. 402 and 429 remain unverified, since provoking
298
+
them means exhausting an account.
250
299
251
300
8.**Rate metadata.** Delete header-based rate parsing entirely rather than porting it.
252
301
Verified: OpenRouter exposes only `content-type` and `cf-ray` to browser JavaScript via
@@ -412,10 +461,10 @@ those 21 advertise tool support.
412
461
| Browser CORS on `/api/v1/models`| Resolved | Verified: accessible cross-origin, no key required |
413
462
| Free models lack tool support | Resolved | Verified: 18 of 21 free models advertise `tools` in `supported_parameters`|
414
463
| Rate-limit headers unreadable in browser | Resolved | Verified: only `content-type` and `cf-ray` exposed. Drop header parsing; use `/api/v1/key` if needed |
415
-
| SSE keepalive comments break the stream reader |Open | Needs a funded key. First task of Phase 2 |
416
-
| 402/404/429 mappings unconfirmed |Open | Auth is checked first, so these need a valid key to provoke. Confirm during Phase 2 |
| Repository-independent chat hits untested paths |Open | Audit list above; local-mode specs with no PAT |
464
+
| SSE keepalive comments break the stream reader |Resolved | Verified live with a funded key; keepalive comments are ignored and stream completion is handled correctly|
465
+
| 402/404/429 mappings unconfirmed |Partial | 400 invalid model behavior is verified; 402 out-of-credits and 429 rate-limit remain to be validated against exhausted-account conditions|
466
+
|`syncAiChatTokenVisibility` split leaves gaps |Resolved | Chat visibility is decoupled from PAT gating; PR surface visibility remains PAT-scoped|
467
+
| Repository-independent chat hits untested paths |Partial | Core no-repository behavior is implemented and covered by focused tests; broader cross-browser matrix coverage remains|
419
468
| Pinned default free slug goes away | Open | 404 on default falls back to the picker; periodic sanity check |
420
469
| 50 req/day free limit feels broken to users | Open | Explicit 429 copy naming the limit and the credits threshold |
421
470
| Key in `localStorage` is XSS-exposed | Accepted | Same threat model as the existing PAT; document it, and note the OpenRouter key is scoped to inference spend only, unlike the PAT which can write repositories |
0 commit comments