Skip to content

fix(providers): stop an unrelated-provider tiktoken bundling failure from crashing /api/providers - #12355

Merged
diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.51from
hartmark:fix/providers-route-eager-tiktoken-import
Sep 3, 2026
Merged

diegosouzapw merged 1 commit into
diegosouzapw:release/v3.8.51from
hartmark:fix/providers-route-eager-tiktoken-import

Conversation

@hartmark

@hartmark hartmark commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Summary

/api/providers (and every barrel importer of @/lib/providers/validation) 500'd on every single request, caused by an unrelated provider's WASM tokenizer failing to bundle under Turbopack dev mode. Traced live: this cascaded into the combos dashboard appearing to have zero combos despite context_handoffs... er, /api/combos genuinely returning the right data every time.

What was actually happening

  1. src/app/api/providers/route.ts statically imports finalizeValidatedChatGptWebCodexSecrets from chatgptWebCodexAdmin.ts at module scope, even though it's only used inside the one provider === "chatgpt-web-codex" branch.
  2. That module's transitive chain (vendor ChatGPT-Web browser adapter → token-estimate.ts → tiktoken's WASM tokenizer) fails to bundle under Turbopack dev mode -- even with tiktoken already listed in serverExternalPackages (confirmed: the standalone Node require() works fine; only Turbopack's bundling of this specific import graph doesn't).
  3. A static import evaluates that whole chain on every request regardless of which provider is actually being managed, turning an unrelated provider's bundling bug into a route-wide 500 for everyone.
  4. Found the same pattern one layer deeper: validation/chatgptWebCodex.ts (a per-provider validator re-exported through the shared @/lib/providers/validation barrel that every provider validator's callers pull in) also statically imports detectChromeExecutable from the same executors/chatgpt-web-codex.ts module -- crashing anyone who merely imports the barrel, including code with nothing to do with chatgpt-web-codex.

Observed cascading effect: the combos dashboard page's fetchData() awaits four parallel requests (combos, providers, combos/metrics, provider-nodes) sequentially and calls .json() on each before ever calling setCombos(). Next.js dev mode returns an HTML error page (not JSON) for an uncaught exception, so /api/providers's 500 threw inside that sequence and aborted the whole function before the combos fetch's own successful response was ever applied to state -- even though /api/combos itself returned 200 with the correct single combo every single time it was called standalone.

Also fixes a related, independently-discovered SSR/hydration bug in the same page: showUsageGuide's useState lazy initializer read localStorage directly. SSR has no localStorage, so the server always computed "not dismissed" while the client could compute a different real value -- a hydration mismatch that forces React to discard and remount the client tree in dev mode, which could interrupt the fetch effect's in-flight state update. Moved the read into a mount effect instead.

Fix

Made both chatgptWebCodexAdmin.ts and executors/chatgpt-web-codex.ts imports dynamic (await import(...)), loaded only when the chatgpt-web-codex branch actually runs, at both call sites. No behavior change to the validation logic itself.

User Impact

  • /api/providers (and anything importing the shared validation barrel) no longer crashes because of an unrelated provider's bundling issue.
  • The combos dashboard reliably shows existing combos again.
  • The showUsageGuide SSR/hydration mismatch is gone.

Validation

  • Live-verified on a real deployment: root-caused via call_logs/server logs, applied the fix, confirmed /api/providers returns 200 and the combos page shows the existing combo again after a full restart.
  • tests/unit/chatgpt-web-codex.test.ts, tests/unit/providers-route-codex-account-pool.test.ts, tests/unit/providers-route-managed-catalog.test.ts, tests/unit/providers-route-model-autofetch-optin.test.ts, tests/unit/providers-route-patch-method.test.ts, tests/unit/provider-journey.contract.test.ts -- 50/50 pass.
  • Complexity ratchet: no new violations.
  • Reconciled with upstream/release/v3.8.51 tip at branch time.

…from crashing /api/providers

/api/providers statically imported chatgptWebCodexAdmin.ts at module scope
even though it's only used inside the one provider === "chatgpt-web-codex"
branch. That module's transitive chain (the vendor ChatGPT-Web browser
adapter -> token-estimate.ts -> tiktoken's WASM tokenizer) fails to bundle
under Turbopack dev mode even with tiktoken listed in
serverExternalPackages (the standalone Node require works fine; only
Turbopack's bundling of this specific import graph doesn't). A static
import evaluated that whole chain on every request regardless of which
provider was actually being managed, turning an unrelated provider's
bundling bug into a route-wide 500 for everyone.

Found the same pattern one layer deeper: validation/chatgptWebCodex.ts
(a per-provider validator re-exported through the shared
@/lib/providers/validation barrel every provider validator's callers pull
in) also statically imported detectChromeExecutable from the same
executors/chatgpt-web-codex.ts module, crashing anyone who merely
imported the barrel -- including code with nothing to do with
chatgpt-web-codex. Made both imports lazy, loaded only when the
chatgpt-web-codex branch actually runs.

Observed live: this crash cascaded into the combos dashboard page
appearing to have zero combos. The page's fetchData() awaits four
parallel requests sequentially and calls .json() on each before ever
calling setCombos() -- an unrelated /api/providers 500 (Next.js dev mode
returns an HTML error page, not JSON, for an uncaught exception) threw
inside that sequence and aborted the whole function before the combos
fetch's own successful response was ever applied to state, even though
combos itself returned 200 with the correct data every time.

Also fixes a related SSR/hydration bug found investigating the same
symptom: the combos page's showUsageGuide state used a useState lazy
initializer that read localStorage directly. SSR has no localStorage, so
the server always computed "not dismissed" while the client could compute
a different real value -- a hydration mismatch that forces React to
discard and remount the client tree in dev mode, which could interrupt
the fetch effect's in-flight state update. Moved the localStorage read
into a mount effect instead, matching the SSR-safe default on both
passes.
hartmark added a commit to hartmark/OmniRoute that referenced this pull request Sep 1, 2026
…er tiktoken bundling failure from crashing /api/providers) into dev/omniroute-dev-combined
hartmark added a commit to hartmark/OmniRoute that referenced this pull request Sep 2, 2026
…er tiktoken bundling failure from crashing /api/providers) into dev/omniroute-dev-combined
hartmark added a commit to hartmark/OmniRoute that referenced this pull request Sep 2, 2026
…er tiktoken bundling failure from crashing /api/providers) into dev/omniroute-dev-combined
hartmark added a commit to hartmark/OmniRoute that referenced this pull request Sep 2, 2026
…er tiktoken bundling failure from crashing /api/providers) into dev/omniroute-dev-combined
hartmark added a commit to hartmark/OmniRoute that referenced this pull request Sep 2, 2026
…er tiktoken bundling failure from crashing /api/providers) into dev/omniroute-dev-combined
diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
… faster (#12293)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
@diegosouzapw
diegosouzapw merged commit c091534 into diegosouzapw:release/v3.8.51 Sep 3, 2026
16 checks passed
diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
…o the client (#12447)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
…e output_index (#12445)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
…2446)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
…pty output array (#12460)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
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` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
…t scoping, silent-failure logging (#12338)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
diegosouzapw pushed a commit that referenced this pull request Sep 3, 2026
…erf fixes (#12448)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
diegosouzapw pushed a commit that referenced this pull request Sep 4, 2026
…g conversation (#12646)

Validado sobre o tip de `release/v3.8.51`, com duas coisas resolvidas antes do merge.

**A falha de CI era stale.** O job `No new ESLint warnings` deste PR apontava `react-hooks/set-state-in-effect` em `src/app/(dashboard)/dashboard/combos/page.tsx:774` — arquivo que este PR não toca, e o mesmo erro aparecia em #12668 e #12672, que também não o tocam. A linha do tempo: o #12355 introduziu a violação de manhã, os CIs rodaram nessa janela, e o #12607 acrescentou a entrada de supressão à tarde. Medido no tip atual com o comando exato do job: **0 ocorrências não suprimidas**. A supressão sobrevivente é "unpruned", e o script passa `--pass-on-unpruned-suppressions` justamente para isso não bloquear.

**Faltava o teste que a regra do projeto exige** para mudanças em `src/`. Acrescentei `tests/unit/ui/log-detail-conversation-link-12646.test.tsx`, verificado **RED-then-GREEN** em vez de escrito contra o código pronto: revertendo `RequestLoggerDetail.sections.tsx` para o tip, 2 dos 3 casos falham; com a mudança deste PR, 3/3 passam.

Detalhe que valeu a pena descobrir: a seção curto-circuita em `allTurns.length === 0`, então o fixture precisa de um `requestBody` que normalize em pelo menos um turno — sem isso o cabeçalho inteiro nunca monta e as asserções passariam pelo motivo errado. O teste fixa três coisas: o href para um `sessionTag` simples, o percent-encoding para um que não é URL-safe, e a ausência de link quando não há `sessionTag`.

Obrigado, @hartmark.
@hartmark
hartmark deleted the fix/providers-route-eager-tiktoken-import branch September 8, 2026 19:52
hartmark added a commit to hartmark/OmniRoute that referenced this pull request Sep 15, 2026
…pi/providers/[id]

diegosouzapw#12355 fixed a static top-level import of chatgptWebCodexAdmin.ts in
src/app/api/providers/route.ts (the collection route): that module's
transitive chain (the vendor ChatGPT-Web browser adapter ->
token-estimate.ts -> tiktoken's WASM tokenizer) fails to bundle under
Turbopack dev mode even with tiktoken listed in serverExternalPackages
(the standalone Node require works fine; only Turbopack's bundling of
this specific import graph doesn't). A static import evaluated that whole
chain on every request regardless of provider, turning an unrelated
provider's bundling bug into a route-wide 500 for everyone.

diegosouzapw#12355 only touched the collection route and missed the identical pattern
in the by-id route (PUT /api/providers/[id]) -- observed live: renaming a
plain openai-compatible connection's name failed with "Missing
tiktoken_bg.wasm" after 17-50s, having never touched chatgpt-web-codex at
all. diegosouzapw#12355 also shipped with no regression test, which is exactly how
this sibling instance went unnoticed for a week.

Fix: same pattern as diegosouzapw#12355 -- move the import into a lazy
`await import(...)` inside the one `provider === "chatgpt-web-codex"`
branch that actually needs it.

New regression test (tests/unit/providers-chatgpt-web-codex-lazy-import-12355.test.ts)
source-inspects both general provider routes (route.ts and [id]/route.ts)
to assert neither statically imports chatgptWebCodexAdmin.ts, and confirms
the one legitimately-static import (the chatgpt-web-codex-only "doctor"
diagnostic route, where every request already is that provider) is left
alone. Matches the existing tests/unit/instrumentation-import-graph-12074.test.ts
pattern for import-graph invariants that can't be exercised by actually
bundling under Turbopack from this harness. Confirmed it fails against the
pre-fix route.ts (static import present) and passes after the fix.

Evidence:
- node --test tests/unit/providers-chatgpt-web-codex-lazy-import-12355.test.ts: 3/3 pass
- node --test tests/unit/providers-route-patch-method.test.ts tests/unit/codex-connection-edit-6562.test.ts
  tests/unit/chatgpt-web-management-retirement.test.ts tests/unit/provider-patch-ratelimit-protection-11278.test.ts:
  11/11 pass (unaffected)
- eslint on both touched files: clean
- Live-verified against the exact failing request: PUT /api/providers/{id}
  renaming a llama-cpp connection, previously 500 after 17-50s with
  "Missing tiktoken_bg.wasm", now 200 in 0.83s.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bl0ck154 pushed a commit to Bl0ck154/OmniRoute that referenced this pull request Sep 19, 2026
… faster (diegosouzapw#12293)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (diegosouzapw#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (diegosouzapw#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
… faster (diegosouzapw#12293)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (diegosouzapw#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (diegosouzapw#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…from crashing /api/providers (diegosouzapw#12355)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (diegosouzapw#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (diegosouzapw#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…o the client (diegosouzapw#12447)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (diegosouzapw#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (diegosouzapw#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…e output_index (diegosouzapw#12445)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (diegosouzapw#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (diegosouzapw#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…egosouzapw#12446)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (diegosouzapw#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (diegosouzapw#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…pty output array (diegosouzapw#12460)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (diegosouzapw#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (diegosouzapw#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…zapw#12461)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (diegosouzapw#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (diegosouzapw#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…t scoping, silent-failure logging (diegosouzapw#12338)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (diegosouzapw#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (diegosouzapw#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…erf fixes (diegosouzapw#12448)

Validado em lote numa worktree combinada com os 9 PRs desta leva sobre o tip de `release/v3.8.51` (já com a leva anterior dentro): os nove boardaram **sem um único conflito**, `typecheck:core` limpo e **80/80** nos 6 arquivos de teste que os PRs trazem.

O crescimento de arquivo próprio da leva foi rebaselinado num registro datado (`_rebaseline_2026_09_03_hartmark_batch`): `combos/page.tsx` 5012→5018 (diegosouzapw#12355, tratar o estado degradado quando o bundling de tiktoken de um provider sem relação falha) e `open-sse/services/combo.ts` 4023→4036 (diegosouzapw#12338, os fixes do universal-handoff). 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.

Obrigado, @hartmark.
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
…g conversation (diegosouzapw#12646)

Validado sobre o tip de `release/v3.8.51`, com duas coisas resolvidas antes do merge.

**A falha de CI era stale.** O job `No new ESLint warnings` deste PR apontava `react-hooks/set-state-in-effect` em `src/app/(dashboard)/dashboard/combos/page.tsx:774` — arquivo que este PR não toca, e o mesmo erro aparecia em diegosouzapw#12668 e diegosouzapw#12672, que também não o tocam. A linha do tempo: o diegosouzapw#12355 introduziu a violação de manhã, os CIs rodaram nessa janela, e o diegosouzapw#12607 acrescentou a entrada de supressão à tarde. Medido no tip atual com o comando exato do job: **0 ocorrências não suprimidas**. A supressão sobrevivente é "unpruned", e o script passa `--pass-on-unpruned-suppressions` justamente para isso não bloquear.

**Faltava o teste que a regra do projeto exige** para mudanças em `src/`. Acrescentei `tests/unit/ui/log-detail-conversation-link-12646.test.tsx`, verificado **RED-then-GREEN** em vez de escrito contra o código pronto: revertendo `RequestLoggerDetail.sections.tsx` para o tip, 2 dos 3 casos falham; com a mudança deste PR, 3/3 passam.

Detalhe que valeu a pena descobrir: a seção curto-circuita em `allTurns.length === 0`, então o fixture precisa de um `requestBody` que normalize em pelo menos um turno — sem isso o cabeçalho inteiro nunca monta e as asserções passariam pelo motivo errado. O teste fixa três coisas: o href para um `sessionTag` simples, o percent-encoding para um que não é URL-safe, e a ausência de link quando não há `sessionTag`.

Obrigado, @hartmark.
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