Skip to content

feat(quota): Moonshot Open Platform balance and TPD lock for custom nodes - #12590

Merged
diegosouzapw merged 13 commits into
cheaper-inference:release/v3.8.51from
HouMinXi:feat/moonshot-native-quota
Sep 3, 2026
Merged

diegosouzapw merged 13 commits into
cheaper-inference:release/v3.8.51from
HouMinXi:feat/moonshot-native-quota

Conversation

@HouMinXi

@HouMinXi HouMinXi commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Custom OpenAI-compatible nodes aimed at api.moonshot.cn / api.moonshot.ai showed no balance on the dashboard. TPD and empty-wallet 429s also failed to stick, so combo strict-random kept drawing prepaid keys that were already dead for the day.

This change treats those hosts as Moonshot Open Platform: GET /v1/users/me/balance, classify TPD and insufficient-balance 429s as quota, and lock the connection until the node daily-reset clock (IANA timezone + hour) or a Reset header. No clock and no header uses the short 429 cooldown. The TPD ceiling is read from limit: N in the error text.

Test plan

DISABLE_SQLITE_AUTO_BACKUP=true node --import tsx/esm \
  --import ./open-sse/utils/setupPolyfill.ts \
  --import ./tests/_setup/isolateDataDir.ts \
  --test --test-force-exit \
  tests/unit/moonshot-open-platform.test.ts \
  tests/unit/classify429.test.ts \
  tests/unit/daily-quota-reset.test.ts \
  tests/unit/account-fallback-service.test.ts \
  tests/unit/moonshot-quota-fetcher.test.ts \
  tests/unit/provider-quota-visibility.test.ts \
  tests/unit/qoder-usage-quota.test.ts \
  tests/unit/provider-node-daily-reset-schema.test.ts \
  tests/unit/moonshot-quota-writeback.test.ts \
  tests/unit/api-key-self-service.test.ts

135/135 pass on upstream/release/v3.8.51 @ 2a6d45abe. Dropping providerSpecificData from self-service, or forcing USD on .cn, turns the two new tests red.

Notes for reviewers

  • Custom node ids are uuids. Quota support is host-based (api.moonshot.cn / api.moonshot.ai), not a static provider-id list.
  • Migration 172 adds nullable daily_quota_reset_timezone / daily_quota_reset_hour on provider_nodes. An empty clock is valid.
  • File-size ratchet bump is own growth at existing chokepoints. Host predicates, the reset clock, and the fetcher are new files under cap.
  • .cn balance is labeled CNY; .ai stays USD.

Not in this PR

  • Expanding combo strict-random to one target per key (account pick stays in auth)
  • Hardcoding a 1.5M TPD ceiling
  • Guessing host midnight when the node clock is empty

@diegosouzapw

Copy link
Copy Markdown
Collaborator

sweep-reds / babysit: own reds fixed in 2faeb14676 (did not merge origin/release/v3.8.51):

  • ESLint: import shared toNumber instead of a local definition
  • FQG: extract helpers in moonshotQuotaFetcher.ts / nodes.ts; add tests/unit/moonshot-quota-writeback.test.ts to stryker.conf.json tap.testFiles
  • Docs: migration count 168 → 169 in README/AGENTS/llm.txt
  • Units 2/4 + 3/4: i18n key parity for providers.dailyQuotaReset* + docs-counts

HouMinXi and others added 11 commits September 3, 2026 08:26
Identify prepaid Open Platform keys by api.moonshot.cn / api.moonshot.ai
on the connection baseUrl. Custom compatible-node uuids stay out of the
static usage tables. Coding Plan (api.kimi.com/coding) is not this host.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
Organization TPD rate limit is a daily cap, not a short 429. Put it
in both QUOTA_PATTERNS and TERMINAL_QUOTA_PATTERNS so a Retry-After
hint cannot downgrade it. Engine overloaded stays rate_limit.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
IANA timezone + local hour, no default. Convert via Intl parts so the
endpoint is the operator's wall clock, not process-local midnight.
parseTpdLimitFromText reads limit: from the 429 body.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
Custom openai-compatible-* ids used to skip creditsExhausted. Open
Platform empty-wallet text now still marks the account exhausted.
TPD cooldown uses the node clock or Reset header; without either it
falls through to short 429 instead of process-local midnight.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
GET {origin}/v1/users/me/balance before the usage switch so custom
compatible-node uuids do not fall through to 'not implemented'.
Register moonshot/kimi fetchers at chat and instrumentation startup.
Origin stays on the connection host (.cn vs .ai).

Signed-off-by: Minxi Hou <houminxi@gmail.com>
supportsProviderQuota now matches Open Platform hosts, not just the
static usage list. Provider Limits and the home widget use that
predicate so mnative uuid connections appear. Apikey allowlist stays
for other providers.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
Add provider_nodes.daily_quota_reset_timezone/hour (migration 172).
Operator fills IANA timezone + local hour in the compatible-node editor.
Unknown timezone and hour 24 are rejected. Empty clock stays valid.

Signed-off-by: HouMinXi <houminxi@gmail.com>
Signed-off-by: Minxi Hou <houminxi@gmail.com>
Startup scans provider_nodes and registers id+prefix fetchers when
the baseUrl host is api.moonshot.cn/.ai. Create/update re-register.
markAccountUnavailable forwards the node daily-reset clock into
checkFallbackError so TPD cools until the configured hour.

Signed-off-by: HouMinXi <houminxi@gmail.com>
Signed-off-by: Minxi Hou <houminxi@gmail.com>
Self-service dropped providerSpecificData, so uuid nodes always
looked unsupported. Keep the host on the connection, await fetcher
register on node create, label .cn balance as CNY.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
Own growth at existing chokepoints: migration 172 guard, Moonshot
fetcher registration, TPD node-clock lock, and TPD tests.

Signed-off-by: Minxi Hou <houminxi@gmail.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
@HouMinXi
HouMinXi force-pushed the feat/moonshot-native-quota branch from 2faeb14 to ec7492a Compare September 3, 2026 12:31
check:docs-sync requires docs/i18n/*/llm.txt to be strict copies of root
llm.txt (locale header preserved). The previous commit updated the root
file and left the 41 mirrors stale.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
@HouMinXi

HouMinXi commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto release/v3.8.51 @ 2c4ad3e55. Linear replay of the 11 commits.

Left the follow-up docs(i18n): resync llm.txt locale mirrors after migration-count bump that was pushed onto this branch after that rebase. Head remains 4fb14f760.

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 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
…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
diegosouzapw merged commit 831ea04 into cheaper-inference:release/v3.8.51 Sep 3, 2026
3 checks passed
@HouMinXi
HouMinXi deleted the feat/moonshot-native-quota branch September 16, 2026 13:44
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…heaper-inference#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 cheaper-inference#12504 + busca do cheaper-inference#12495 no mesmo painel), `accountFallback.ts` +6 (o cheaper-inference#12566 sobre o rebaseline que o cheaper-inference#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do cheaper-inference#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
…rence#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 cheaper-inference#12504 + busca do cheaper-inference#12495 no mesmo painel), `accountFallback.ts` +6 (o cheaper-inference#12566 sobre o rebaseline que o cheaper-inference#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do cheaper-inference#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
…ce#12325)

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 cheaper-inference#12504 + busca do cheaper-inference#12495 no mesmo painel), `accountFallback.ts` +6 (o cheaper-inference#12566 sobre o rebaseline que o cheaper-inference#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do cheaper-inference#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
…heaper-inference#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 cheaper-inference#12504 + busca do cheaper-inference#12495 no mesmo painel), `accountFallback.ts` +6 (o cheaper-inference#12566 sobre o rebaseline que o cheaper-inference#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do cheaper-inference#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
…nference#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 cheaper-inference#12504 + busca do cheaper-inference#12495 no mesmo painel), `accountFallback.ts` +6 (o cheaper-inference#12566 sobre o rebaseline que o cheaper-inference#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do cheaper-inference#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
…heaper-inference#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 cheaper-inference#12504 + busca do cheaper-inference#12495 no mesmo painel), `accountFallback.ts` +6 (o cheaper-inference#12566 sobre o rebaseline que o cheaper-inference#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do cheaper-inference#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
cheaper-inference#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 cheaper-inference#12504 + busca do cheaper-inference#12495 no mesmo painel), `accountFallback.ts` +6 (o cheaper-inference#12566 sobre o rebaseline que o cheaper-inference#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do cheaper-inference#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
…r-inference#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 cheaper-inference#12504 + busca do cheaper-inference#12495 no mesmo painel), `accountFallback.ts` +6 (o cheaper-inference#12566 sobre o rebaseline que o cheaper-inference#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do cheaper-inference#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 (cheaper-inference#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 cheaper-inference#12504 + busca do cheaper-inference#12495 no mesmo painel), `accountFallback.ts` +6 (o cheaper-inference#12566 sobre o rebaseline que o cheaper-inference#12590 já registrou — os dois tocam `checkFallbackError`) e `chatCore.ts` +3 (invalidez de cache de quota no 429 do cheaper-inference#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