Skip to content

fix(quota): drop generic quota cache on upstream 429 - #12325

Merged
diegosouzapw merged 11 commits into
diegosouzapw:release/v3.8.51from
HouMinXi:fix/generic-quota-429-invalidate
Sep 3, 2026
Merged

diegosouzapw merged 11 commits into
diegosouzapw:release/v3.8.51from
HouMinXi:fix/generic-quota-429-invalidate

Conversation

@HouMinXi

@HouMinXi HouMinXi commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

fix(quota): drop generic quota cache on upstream 429

Summary

Codex already invalidates its quota cache on a 429 (invalidateCodexQuotaCache in chatCore). The generic fetcher used by agy / Antigravity / Claude OAuth had invalidateGenericQuotaCache but nothing called it. After a 429, reset-aware scoring could keep using a 60s stale snapshot while accountFallback cooled the connection.

A second layer made a naive cache-delete insufficient: agy retrieveUserQuota and weekly summary caches are 60s–5min. Dropping only the wrapper recaches the same inner snapshot. Invalidation now also force-refreshes the next usage fetch.

Probe-origin 429s are ignored (#9817). Codex keeps its own path.

Tests

  • 60s cache hit still one upstream usage call
  • invalidateGenericQuotaCache recaches with forceRefresh: true
  • invalidateGenericQuotaCacheOnStatus: 200 no-op, 429 drops, probe 429 no-op, missing id no throw
  • chatCore wires invalidateGenericQuotaCacheOnStatus on non-Codex 429
  • sibling agy 429 cooldown + universal quota-aware routing suites pass (58/58)
  • npm run typecheck:core clean

Not in this PR

  • Exposing generic cache TTL in the dashboard (already rejected: the existing Reset-aware quota cache knob is the outer layer, default 0)
  • Changing Codex 429 handling
  • Invalidating agy subscription / credit-probe caches beyond forceRefresh on the usage path

diegosouzapw added a commit to HouMinXi/OmniRoute that referenced this pull request Sep 1, 2026
@HouMinXi
HouMinXi force-pushed the fix/generic-quota-429-invalidate branch from 255ac98 to eeba996 Compare September 2, 2026 06:20
@HouMinXi

HouMinXi commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current release/v3.8.51 tip f41a9bd83.

  • old unique range: 438db55c4..25226f7b3 (6 commits)
  • new unique range: f41a9bd83..d49d4a127 plus eeba9966c
  • git range-diff on the 6 original commits → all =
  • GPG G on every rewritten commit
  • dropped the maintainer merge 255ac98cb (onto 158647618)
  • extra commit eeba9966c: drop unused third binding that CI eslint (@typescript-eslint/no-unused-vars) failed on (tests/unit/generic-quota-fetcher.test.ts:292). The call still runs; the return was unused.
  • focused tests: generic-quota-fetcher + antigravity-429-quota-cooldown 29/29 pass

No production-logic change beyond the unused-binding lint fix.

@HouMinXi
HouMinXi force-pushed the fix/generic-quota-429-invalidate branch from 1e4d94b to e8b25b8 Compare September 2, 2026 08:36
HouMinXi and others added 11 commits September 3, 2026 08:23
### Summary
Codex already invalidates its quota cache on a 429 (`invalidateCodexQuotaCache` in `chatCore`). The generic fetcher used by agy / Antigravity / Claude OAuth had `invalidateGenericQuotaCache` but nothing called it. After a 429, reset-aware scoring could keep using a 60s stale snapshot while `accountFallback` cooled the connection.

A second layer made a naive cache-delete insufficient: agy `retrieveUserQuota` and weekly summary caches are 60s–5min. Dropping only the wrapper recaches the same inner snapshot. Invalidation now also force-refreshes the next usage fetch.

Probe-origin 429s are ignored (`diegosouzapw#9817`). Codex keeps its own path.

### Tests
- 60s cache hit still one upstream usage call
- `invalidateGenericQuotaCache` recaches with `forceRefresh: true`
- `invalidateGenericQuotaCacheOnStatus`: 200 no-op, 429 drops, probe 429 no-op, missing id no throw
- chatCore wires `invalidateGenericQuotaCacheOnStatus` on non-Codex 429
- sibling agy 429 cooldown + universal quota-aware routing suites pass (58/58)
- `npm run typecheck:core` clean

### Not in this PR
- Exposing generic cache TTL in the dashboard (already rejected: the existing Reset-aware quota cache knob is the outer layer, default 0)
- Changing Codex 429 handling
- Invalidating agy subscription / credit-probe caches beyond `forceRefresh` on the usage path

Signed-off-by: Minxi Hou <houminxi@gmail.com>
The 429 invalidation flag used an insertion-order Set cap that dropped
the oldest key under churn. Stamp each flag and drop it after the inner
agy/Claude usage caches (60s–5min) expire. Keep the flag across
convert-null so the next fetch still bypasses those caches.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
Keep the 429 force-refresh flag across convert-null so agy inner caches
are still bypassed, but skip the next fetch for 60s. Sweep pending flags
every minute instead of every five. Log a QUOTA debug line when a non-
Codex 429 drops the generic cache.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
Expiry is lazy on read. The interval only reaps keys nobody fetches
after the 5min TTL, matching codexQuotaFetcher.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
fetchGenericQuota and invalidateGenericQuotaCacheOnStatus now share one
trimmed key. OnStatus returns whether it actually dropped so the QUOTA
debug line cannot fire on a no-op.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
TTL must start when the entry is stored, not when the request began.
A slow usage call was shrinking the 60s window by the round-trip.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
CI eslint no-unused-vars failed on the 60s hammer guard: the
call must run, the return is unused.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
A 429 that lands while fetchUsage is in flight used to be wiped when the
stale snapshot wrote the cache and deleted pendingForceRefresh. Capture
the stamp before await and skip the recache when it changed.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
Concurrent 429 still blocks the pre-429 snapshot. A vanished or 5min-
expired stamp is not a 429, so the wrapper cache is written.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
Extract cache-hit / miss-cooling / concurrent-stamp helpers so the
fetcher stays at 15. chatCore 429 wiring is +9 at the Codex sibling
site; file-size-baseline records that own growth.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
check-file-size.mjs counts split("\n").length, so merged chatCore.ts
is 5985 not wc -l 5984. Add the changelog fragment.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
@HouMinXi
HouMinXi force-pushed the fix/generic-quota-429-invalidate branch from 027c927 to 17ee1e1 Compare September 3, 2026 12:38
@HouMinXi

HouMinXi commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto release/v3.8.51 @ 2c4ad3e55. Dropped the two merge commits that were only syncing the old tip.

File-size conflict on chatCore.ts: kept upstream's rebaseline notes and this PR's #12325 note. Frozen LOC is the measured split("\\n").length of the merged file (5981). Head is now 17ee1e14f.

diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
…12312)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do #12504 + busca do #12495 no mesmo painel), `accountFallback.ts` +6 (o #12566 sobre o rebaseline que o #12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do #12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do #12504 + busca do #12495 no mesmo painel), `accountFallback.ts` +6 (o #12566 sobre o rebaseline que o #12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do #12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
@diegosouzapw
diegosouzapw merged commit 52456a1 into diegosouzapw:release/v3.8.51 Sep 3, 2026
15 of 16 checks passed
diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
…12504)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do #12504 + busca do #12495 no mesmo painel), `accountFallback.ts` +6 (o #12566 sobre o rebaseline que o #12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do #12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do #12504 + busca do #12495 no mesmo painel), `accountFallback.ts` +6 (o #12566 sobre o rebaseline que o #12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do #12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
…12488)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do #12504 + busca do #12495 no mesmo painel), `accountFallback.ts` +6 (o #12566 sobre o rebaseline que o #12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do #12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
#12566)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do #12504 + busca do #12495 no mesmo painel), `accountFallback.ts` +6 (o #12566 sobre o rebaseline que o #12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do #12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do #12504 + busca do #12495 no mesmo painel), `accountFallback.ts` +6 (o #12566 sobre o rebaseline que o #12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do #12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
…odes (#12590)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do #12504 + busca do #12495 no mesmo painel), `accountFallback.ts` +6 (o #12566 sobre o rebaseline que o #12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do #12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
@HouMinXi
HouMinXi deleted the fix/generic-quota-429-invalidate branch September 16, 2026 14:03
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…iegosouzapw#12312)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do diegosouzapw#12504 + busca do diegosouzapw#12495 no mesmo painel), `accountFallback.ts` +6 (o diegosouzapw#12566 sobre o rebaseline que o diegosouzapw#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do diegosouzapw#12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…#12495)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do diegosouzapw#12504 + busca do diegosouzapw#12495 no mesmo painel), `accountFallback.ts` +6 (o diegosouzapw#12566 sobre o rebaseline que o diegosouzapw#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do diegosouzapw#12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do diegosouzapw#12504 + busca do diegosouzapw#12495 no mesmo painel), `accountFallback.ts` +6 (o diegosouzapw#12566 sobre o rebaseline que o diegosouzapw#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do diegosouzapw#12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…iegosouzapw#12504)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do diegosouzapw#12504 + busca do diegosouzapw#12495 no mesmo painel), `accountFallback.ts` +6 (o diegosouzapw#12566 sobre o rebaseline que o diegosouzapw#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do diegosouzapw#12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…apw#12487)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do diegosouzapw#12504 + busca do diegosouzapw#12495 no mesmo painel), `accountFallback.ts` +6 (o diegosouzapw#12566 sobre o rebaseline que o diegosouzapw#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do diegosouzapw#12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…iegosouzapw#12488)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do diegosouzapw#12504 + busca do diegosouzapw#12495 no mesmo painel), `accountFallback.ts` +6 (o diegosouzapw#12566 sobre o rebaseline que o diegosouzapw#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do diegosouzapw#12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
diegosouzapw#12566)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do diegosouzapw#12504 + busca do diegosouzapw#12495 no mesmo painel), `accountFallback.ts` +6 (o diegosouzapw#12566 sobre o rebaseline que o diegosouzapw#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do diegosouzapw#12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…ouzapw#12557)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do diegosouzapw#12504 + busca do diegosouzapw#12495 no mesmo painel), `accountFallback.ts` +6 (o diegosouzapw#12566 sobre o rebaseline que o diegosouzapw#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do diegosouzapw#12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…odes (diegosouzapw#12590)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51`: `typecheck:core` limpo, `check:provider-consistency` OK (273 entradas REGISTRY, **356** providers canônicos), `check-docs-counts-sync` exit 0 e **300/300** nos testes que a leva toca.

O crescimento de arquivo que os PRs empilham uns sobre os outros foi rebaselinado num único registro datado (`_rebaseline_2026_09_03_houminxi_batch`), com a decomposição por arquivo: `providers/page.tsx` +18 (import CSV do diegosouzapw#12504 + busca do diegosouzapw#12495 no mesmo painel), `accountFallback.ts` +6 (o diegosouzapw#12566 sobre o rebaseline que o diegosouzapw#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do diegosouzapw#12325). As violações restantes (`codex.ts`, `stream.ts`) foram medidas também no tip puro e são drift da base, não desta leva.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants