Skip to content

[WRONG BRANCH] chore(release): promote 2.57.0 to main - #4829

Merged
lidge-jun merged 186 commits into
mainfrom
release/2.57.0
Sep 16, 2026
Merged

lidge-jun merged 186 commits into
mainfrom
release/2.57.0

Conversation

@lidge-jun

Copy link
Copy Markdown
Owner

Promotion, not a feature pull request

This promotes the frozen 2.57.0 candidate from dev to main. enforce-target fails here with
"wrong base (main)" — that gate exists for feature pull requests and every promotion carries the
same red mark, exactly as the 2.55.0 promotion #4619 and the 2.56.0 promotion #4687 did.

What is in it

184 commits since v2.56.0. The candidate is d78be30da7, whose product tree is identical to
2b19983bfd — the only delta is the release-train devlog, and nothing in the build, typecheck or
test path reads from devlog/.

package.json reads 2.57.0. dev moves to 2.58.0 in #4827, merged before this publishes, so
release.yml's assert-ahead gate is satisfied.

Why the candidate is trustworthy

dev was red at its tip for five consecutive Cross-platform CI runs. Those were audited commit by
commit and none is a product regression: they are four independent harness and runtime flake
classes, and the largest — a Bun 1.4.2 Windows segfault entering codex-prompt-layers.test.ts — is
fixed by the candidate itself, which pins Bun back to 1.4.0 (#4821). The full forensics, with run
ids, job ids and file:line for every failing test, are in
devlog/_plan/260917_2570_release_train/010_dev_green.md.

Bun 1.4.2 is still the latest stable release and no released version fixes that Windows crash
class, so the 1.4.0 pin stays.

Queue state at the cut

Every open pull request and every recently touched issue was triaged before this cut. No pull
request was merge-ready — heads here typically carry only the four policy checks and no product
test suite — so 2.57.0 ships what was already on dev and nothing else. Two issues were closed
against the commits that fixed them (#4730, #4688) and the rest carry recorded verdicts. See
020_pr_triage.md and 030_issue_triage.md.

Validation

No local suite, typecheck, build or install was run. Evidence is hosted CI at exact SHAs, recorded
in the devlog unit.

luvs01 and others added 30 commits September 14, 2026 13:56
…read

Both consume call sites parsed the upstream answer with resp.json(), which buffers
the whole body before anything checks its size. Every neighbouring reset-credit read
already goes through readResetCreditJson, which short-circuits an oversized declared
length, reads through the shared 64 KiB bounded reader with fatal UTF-8, and rejects
a truncated or empty answer. Only these two were left unbounded.

The background auto-redeemer now treats an unreadable answer the same way its sibling
availability read does and raises. The manual handler marks the operation ambiguous
and answers 502, because the spend may already have landed upstream while its outcome
code is unreadable, and a replay of that id must never be admitted as new work.
…sent candidate

On Windows the candidate-only provenance slice performs no candidate or
configuration filesystem I/O, so it never consults the persisted runtime
selection. When no proof-captured CODEX_CLI_PATH candidate is present it
nevertheless reported reason "candidate_unavailable", asserting that no Codex
CLI candidate exists even though availability was never observed. Operators
whose runtime resolves through persisted "configured" state therefore saw a
missing candidate while the runtime report showed a known version.

Report the deferral that actually occurred instead. The defined
"windows_inspection_deferred" reason already exists but was reachable only with
an environment candidate. POSIX does read persisted state, so its
absent-candidate answer is exact and stays unchanged.

No filesystem access is added: the Windows path still performs zero I/O, and
candidateAvailable, provenance, managed, selectionAttested, versionEvidence and
shim status are unchanged. This intentionally replaces the previous test
statement that pinned the "candidate_unavailable" wording on Windows.
Record the Windows inspection reason distinction in structure/runtime.md, which owns src/codex/, and qualify the direct-launch candidate_unavailable outcome as POSIX-only in all eight locale agent references.
Two windows let one Codex credential refresh delete another live refresh lock.

isRefreshLockStale treated any unreadable lock as stale. The owner creates the file
with openSync(path, "wx") and writes its metadata immediately after, so a live lock
is briefly empty; a waiter that looked during that window deleted the lock and ran a
second concurrent refresh against the same grant. The unreadable case now ages the
file itself and only reports stale past the same 60s window, and a lock that has
already disappeared reports not stale so the waiter simply retries the create.

The release path unlinked by name. If a waiter had reclaimed the path and a second
owner recreated it, the first owner deleted the second owner's live lock on its way
out. Release now compares the fd identity captured before close against the current
path and unlinks only its own file, falling back to the previous behavior when the
identity cannot be read.

Both cases are pinned in tests/codex-integration/codex-account-store.test.ts and
both fail before this change.
…Assist

- Lift blanket rejection on Cloud Code Assist for Gemini models (modelId starting with gemini-)
- Route structured output into generationConfig.responseMimeType and responseJsonSchema inside envelope.request
- Retain explicit fail-closed rejection for non-Gemini models (such as Claude) served through Cloud Code Assist
- Keep existing refusals for image-capable models and schemaless json_schema
- Update structure/providers/google.md and tests/adapters/google/google-structured-output.test.ts
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
#4568)

* test(codex): compare the injected catalog path as a decoded TOML value

The paginated-home regression test asserted that config.toml literally contains the
catalog path. A Windows path is written as a TOML basic string with escaped
separators, so the raw file text holds C:\\Users\\... while the assertion looked for
C:\Users\... . The test failed on every Windows shard and passed everywhere else,
which took the whole windows job down for unrelated pull requests.

What the picker actually reads is the decoded value, so the assertion now decodes the
model_catalog_json basic string and compares that. POSIX behavior is unchanged, since
a path with no backslash decodes to itself.

* test(codex): require root catalog path readback

---------

Co-authored-by: luvs01 <27862058+luvs01@users.noreply.github.com>
…y` (#4660)

* fix(providers): Baseten routed rows must not advertise text.verbosity

Baseten documents its Model APIs as Chat Completions compatible.
`text.verbosity` is an OpenAI Responses parameter, so there is nothing on
that wire for it to become, but the Baseten registry entry carried no
opt-out and every routed row serialized support_verbosity: true with
default_verbosity: "low". Codex seeds its picker from that and sends
text.verbosity on the turn.

Provider-wide rather than per-model, matching the xAI and Ollama
opt-outs: Baseten's catalog is live-discovered, so a slug that arrives
later supports it no more than the seeded ones do.

Closes #4630

* test(catalog): cover the live-discovered baseten slug, not just the seeded one

The opt-out is provider-wide because baseten is liveModels: true — a
per-model pin would leave tomorrow's discovered id advertising the
control again. The original case seeded a static model, so that reasoning
was a comment rather than something the suite checked. This one seeds no
models and lets a stubbed /models response supply the slug.

Raised in review of #4660 by @coderabbitai and @lidge-jun.
Co-authored-by: luvs01 <27862058+luvs01@users.noreply.github.com>
* fix(responses): finalize adopted WebSocket stage records

* fix: finalize websocket stage before cancel usage logging

---------

Co-authored-by: luvs01 <27862058+luvs01@users.noreply.github.com>
lidge-jun and others added 10 commits September 16, 2026 19:54
…vents (#4775, #4743) (#4801)

Maintainer integration for the 2.57.0 stabilization scope. Exact head 14b4d30 has a green aggregate ci check with no failing job. Carries #4775 and #4743 with their review fixes. The #4743 event bound was raised because the original 1,000 counted every held argument delta, so a sizeable client-executed apply_patch could cross it and the leg would discard a legitimate tool call; the count is now derived from the code-unit budget that is the real memory guard, and overflow reports as a proxy-side bound instead of blaming the upstream read. Host-owned merge decision; no local suite, typecheck, build, or install was run.
, #4778) (#4797)

Maintainer integration for the 2.57.0 stabilization scope. The exact head has a green aggregate ci check with no failing job. Selection now drops only accounts whose own confirmed roster definitively omits the requested model, inside the existing eligibility gate and ahead of the priority tier, restoring the full list whenever filtering would leave no candidate; unknown and expired rosters stay unknown, so this cannot make a model vanish the way a fail-closed gate would. A conversation carrying uploaded files keeps its issuing account, which is the one documented invariant change and is recorded in the owning structure section. The operator pin is exempt, because filtering it out beforehand would have re-enabled the tiers the operator excluded rather than merely demoting the account. Host-owned merge decision; no local suite, typecheck, build, or install was run.
…#4796)

Maintainer integration for the 2.57.0 stabilization scope. The exact head has a green aggregate ci check with no failing job. Carries #4785 and folds #4789. The containment half closes the leak in #4762 for future runs. The reclamation half needed correcting before it could ship: as authored, an absent ownership marker fell through to removal, and every directory users have accumulated today was written by a version that stamped nothing, so the rule would have deleted TEMP trees the tool cannot show it created. Reclamation now treats a missing marker as disqualifying and requires the owning pid to be dead. An already-affected workstation is not cleaned by this change; those roots are scanned, skipped and left to the user. Host-owned merge decision; no local suite, typecheck, build, or install was run.
…ence and Retry-After (#4807)

Release-blocker fix for 2.57.0, found by the final cross-change regression audit. Exact head has a green aggregate ci check with no failing job. The 429 reclassification that landed in #4798 guarded the call sites that read a 429 as a rate limit but not the ones that write quota evidence, synthesize Retry-After, or reclassify the status on the way out, so in two places the release as it stood invited the replay the change exists to prevent: passthrough recorded the synthetic 429 as quota evidence and attached a default Retry-After, and native Chat dropped the distinct code. Adapter recovery could also replay a refusal produced by a refetch inside an arm, which the single-retry regression could not catch. The invariant is now stated once and recorded: a refusal this proxy made never acquires a Retry-After and never becomes quota evidence. Host-owned merge decision; no local suite, typecheck, build, or install was run.
…e denial lookup behind the read fence (#4806)

Release-blocker fix for 2.57.0, found by the final cross-change regression audit. Exact head has a green aggregate ci check with no failing job. Uploaded-file retention did not reach native compact initial account resolution or the encrypted-recovery preview, so a file-carrying conversation could still be moved before the post-429 guard ran, or preview and final authentication could pick different accounts — either one reproduces the failure #4778 removed. Both paths now carry the bit, answered from the same object and predicate the post-429 guard uses. Separately the flagship denial lookup crossed the native-main read fence by validating cached rosters through the physical main token; it now honours the fence and answers unknown there, which changes nothing because unknown never excludes an account. Host-owned merge decision; no local suite, typecheck, build, or install was run.
…4813)

Release-blocker fix for 2.57.0 from the second regression audit. Exact head has a green aggregate ci check. A namespaced helper name could donate the bare spelling, so a declaration such as mcp__remote.exec added bare exec to the declared set and an undeclared apply_patch, exec_command or write_stdin was then rewritten to it; the exclusion is now keyed on the name rather than the namespace, and a namespaced exec stays usable as itself. Request preview also computed the native-main read fence without the request-owned credential that final authentication includes, so a thread_spawn request with a forwardable caller bearer could read the physical main token and score main differently from final auth. Host-owned merge decision; no local suite, typecheck, build, or install was run.
… per-entry store reads (#4814)

Release-blocker fix for 2.57.0 from the second regression audit. Exact head has a green aggregate ci check. A transient refresh failure whose description mentioned revoked, invalidated or expired was still classified terminal even when the structured code was server_error, which re-created the false quarantine #2887 exists to prevent; classification now uses the structured code whenever one exists and keeps the substring fallback only for bodies that carry no code at all. Separately a warm flagship request could perform up to 256 synchronous account-store reads because credential identity resolved per cache entry; it now resolves once per denial pass without weakening the check that an entry belongs to the credential it claims. Host-owned merge decision; no local suite, typecheck, build, or install was run.
…lias (#4819)

Release-blocker fix for 2.57.0 from the third regression audit. Exact head has a green aggregate ci check. The helper-name fence that landed in #4813 covered the echo-alias path only; the tool_choice compatibility path still manufactured a bare alias, so a request declaring a namespaced exec and selecting it with a bare selector put bare exec into the declared set and an undeclared helper was rewritten onto it. Sweeping for the rule found a third live copy in the passthrough declared catalog, which fenced exactly one name, so a namespaced exec_command or shell_command could also switch nested-helper normalization off for a catalog that genuinely declared the shell. The rule now lives in one place. The follow-up commit corrects an over-strict first attempt: a bare alias does two jobs, identity restoration and declaration, and only the declaration was ever unsafe, so restoration is preserved and a caller-declared, explicitly selected tool keeps working. Host-owned merge decision; no local suite, typecheck, build, or install was run.
…4.0 (#4821)

Release-blocker fix for 2.57.0. The PR aggregate ci check is green at this exact head, and the lane=all dispatch 35113947092 on the same head passed all six Windows shards individually plus both macOS shards, every test shard, gates, keyring, docker and npm-global; only the optional macos control job was cancelled by concurrency. That dispatch is the evidence the Bun pin works: windows 5/6 had failed three release candidates in a row and 1/6 failed the previous dispatch, and all six pass here with the crash masking removed. The suite had been crashing the Bun runtime on every run since 2026-09-08 while reporting green, because a crashed batch was re-run one file per process, which is a configuration in which the defect cannot occur rather than a retry. That verdict now fails. Host-owned merge decision; no local suite, typecheck, build, or install was run.
Four documents: the roadmap, the CI forensics that cleared dev's red tip, the
pull-request triage, and the issue triage. No product code changes.

Co-authored-by: lidge-jun <lidge-jun@users.noreply.github.com>
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner September 16, 2026 17:27
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 16, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-16T18:20:37.542637Z 1831193 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 404 files, which is 104 over the limit of 300.

To get a review, reduce the PR to 300 files or fewer by splitting it into smaller PRs or changing its base branch.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: e0a32b33-0d86-4590-ad96-569071404f2f

📥 Commits

Reviewing files that changed from the base of the PR and between e4a8539 and 1831193.

⛔ Files ignored due to path filters (2)
  • assets/pr-screenshots/usage-chart-review.png is excluded by !**/*.png
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (404)
  • .github/workflows/ci.yml
  • Dockerfile
  • bin/ocx.mjs
  • devlog/_plan/260915_2560_release_train/040_release_decision.md
  • devlog/_plan/260916_release_2570_stabilization/031_openai_tiers_split.md
  • devlog/_plan/260916_release_2570_stabilization/041_preview_fence_test_is_structural.md
  • devlog/_plan/260917_2570_release_train/000_roadmap.md
  • devlog/_plan/260917_2570_release_train/010_dev_green.md
  • devlog/_plan/260917_2570_release_train/020_pr_triage.md
  • devlog/_plan/260917_2570_release_train/030_issue_triage.md
  • docs-site/astro.config.mjs
  • docs-site/src/content/docs/fr/guides/claude-code.md
  • docs-site/src/content/docs/fr/guides/codex-integration.md
  • docs-site/src/content/docs/fr/reference/adapters.md
  • docs-site/src/content/docs/fr/reference/architecture.md
  • docs-site/src/content/docs/fr/reference/cli.md
  • docs-site/src/content/docs/fr/reference/cli/agents.md
  • docs-site/src/content/docs/fr/reference/cli/lifecycle.md
  • docs-site/src/content/docs/fr/reference/cli/providers-accounts.md
  • docs-site/src/content/docs/guides/claude-code.md
  • docs-site/src/content/docs/guides/codex-integration.md
  • docs-site/src/content/docs/guides/combos.md
  • docs-site/src/content/docs/guides/providers.md
  • docs-site/src/content/docs/guides/response-inspection.md
  • docs-site/src/content/docs/guides/web-dashboard.md
  • docs-site/src/content/docs/ja/guides/codex-integration.md
  • docs-site/src/content/docs/ja/reference/adapters.md
  • docs-site/src/content/docs/ja/reference/architecture.md
  • docs-site/src/content/docs/ja/reference/cli.md
  • docs-site/src/content/docs/ja/reference/cli/agents.md
  • docs-site/src/content/docs/ja/reference/cli/lifecycle.md
  • docs-site/src/content/docs/ja/reference/cli/providers-accounts.md
  • docs-site/src/content/docs/ko/guides/codex-integration.md
  • docs-site/src/content/docs/ko/guides/combos.md
  • docs-site/src/content/docs/ko/reference/adapters.md
  • docs-site/src/content/docs/ko/reference/architecture.md
  • docs-site/src/content/docs/ko/reference/cli.md
  • docs-site/src/content/docs/ko/reference/cli/agents.md
  • docs-site/src/content/docs/ko/reference/cli/lifecycle.md
  • docs-site/src/content/docs/ko/reference/cli/providers-accounts.md
  • docs-site/src/content/docs/ko/reference/proxy-formats.md
  • docs-site/src/content/docs/reference/adapters.md
  • docs-site/src/content/docs/reference/architecture.md
  • docs-site/src/content/docs/reference/cli.md
  • docs-site/src/content/docs/reference/cli/agents.md
  • docs-site/src/content/docs/reference/cli/lifecycle.md
  • docs-site/src/content/docs/reference/cli/providers-accounts.md
  • docs-site/src/content/docs/reference/configuration/routing.md
  • docs-site/src/content/docs/reference/configuration/server.md
  • docs-site/src/content/docs/reference/management-api.md
  • docs-site/src/content/docs/reference/proxy-formats.md
  • docs-site/src/content/docs/ru/guides/codex-integration.md
  • docs-site/src/content/docs/ru/reference/adapters.md
  • docs-site/src/content/docs/ru/reference/architecture.md
  • docs-site/src/content/docs/ru/reference/cli.md
  • docs-site/src/content/docs/ru/reference/cli/agents.md
  • docs-site/src/content/docs/ru/reference/cli/lifecycle.md
  • docs-site/src/content/docs/ru/reference/cli/providers-accounts.md
  • docs-site/src/content/docs/tr/guides/claude-code.md
  • docs-site/src/content/docs/tr/guides/codex-integration.md
  • docs-site/src/content/docs/tr/reference/adapters.md
  • docs-site/src/content/docs/tr/reference/architecture.md
  • docs-site/src/content/docs/tr/reference/cli.md
  • docs-site/src/content/docs/tr/reference/cli/agents.md
  • docs-site/src/content/docs/tr/reference/cli/lifecycle.md
  • docs-site/src/content/docs/tr/reference/cli/providers-accounts.md
  • docs-site/src/content/docs/zh-cn/guides/codex-integration.md
  • docs-site/src/content/docs/zh-cn/reference/adapters.md
  • docs-site/src/content/docs/zh-cn/reference/architecture.md
  • docs-site/src/content/docs/zh-cn/reference/cli.md
  • docs-site/src/content/docs/zh-cn/reference/cli/agents.md
  • docs-site/src/content/docs/zh-cn/reference/cli/lifecycle.md
  • docs-site/src/content/docs/zh-cn/reference/cli/providers-accounts.md
  • docs-site/src/content/docs/zh-tw/guides/claude-code.md
  • docs-site/src/content/docs/zh-tw/guides/codex-integration.md
  • docs-site/src/content/docs/zh-tw/reference/adapters.md
  • docs-site/src/content/docs/zh-tw/reference/architecture.md
  • docs-site/src/content/docs/zh-tw/reference/cli.md
  • docs-site/src/content/docs/zh-tw/reference/cli/agents.md
  • docs-site/src/content/docs/zh-tw/reference/cli/lifecycle.md
  • docs-site/src/content/docs/zh-tw/reference/cli/providers-accounts.md
  • gui/README.md
  • gui/package.json
  • gui/src/i18n/de.ts
  • gui/src/i18n/en.ts
  • gui/src/i18n/fr.ts
  • gui/src/i18n/ja.ts
  • gui/src/i18n/ko.ts
  • gui/src/i18n/ru.ts
  • gui/src/i18n/tr.ts
  • gui/src/i18n/zh-TW.ts
  • gui/src/i18n/zh.ts
  • gui/src/main.tsx
  • gui/src/pages/Usage.tsx
  • gui/src/styles.css
  • gui/src/styles/sidebar-brand.css
  • gui/src/styles/usage-chart-accessibility.css
  • gui/tests/sidebar-version-browser.ts
  • gui/tests/sidebar-version-layout.test.ts
  • gui/tests/usage-chart-interactions.test.tsx
  • gui/tests/usage-custom-range.test.tsx
  • package.json
  • scripts/ci/bun-crash-signatures.sh
  • scripts/ci/run-bun-test-batches.sh
  • scripts/file-size-ratchet.ts
  • scripts/test-layout/layout.json
  • scripts/test-temp.ts
  • scripts/test.ts
  • skills/ocx/references/01_management_surface.md
  • src/adapters/codebuddy/adapter.ts
  • src/adapters/codebuddy/scaffold-guard.ts
  • src/adapters/command-code.ts
  • src/adapters/cursor/envelope-echo.ts
  • src/adapters/google.ts
  • src/adapters/kiro-events.ts
  • src/adapters/kiro/payload.ts
  • src/adapters/kiro/reasoning.ts
  • src/adapters/kiro/stream.ts
  • src/adapters/kiro/wire.ts
  • src/adapters/openai-chat.ts
  • src/adapters/openai-chat/tool-name-registry.ts
  • src/adapters/openai-chat/tool-schema.ts
  • src/adapters/openai-responses/passthrough.ts
  • src/bridge/errors.ts
  • src/bridge/response-json.ts
  • src/bridge/sse.ts
  • src/claude/desktop-profile.ts
  • src/claude/outbound.ts
  • src/cli/account-main.ts
  • src/cli/capabilities.ts
  • src/cli/combo.ts
  • src/cli/index.ts
  • src/cli/registry.ts
  • src/cli/system-command.ts
  • src/clients/config-export.ts
  • src/codex/account-label.ts
  • src/codex/account-store.ts
  • src/codex/account-usability.ts
  • src/codex/auth-api/login-flow.ts
  • src/codex/auth-api/reset-credit-service.ts
  • src/codex/auth-context.ts
  • src/codex/catalog/aggregation.ts
  • src/codex/catalog/model-visibility.ts
  • src/codex/catalog/remote.ts
  • src/codex/catalog/retained-sync.ts
  • src/codex/catalog/routed-gather.ts
  • src/codex/cli-install-provenance.ts
  • src/codex/convergence.ts
  • src/codex/desktop-app/types.ts
  • src/codex/desktop-app/windows.ts
  • src/codex/inject.ts
  • src/codex/inject/restore.ts
  • src/codex/model-entitlements.ts
  • src/codex/pool-refresh-backoff.ts
  • src/codex/quota-rejection.ts
  • src/codex/routing.ts
  • src/codex/routing/cache-affinity.ts
  • src/codex/routing/cooldown-math.ts
  • src/codex/routing/selection.ts
  • src/codex/routing/thread-affinity.ts
  • src/codex/routing/transient-hold-dispatch.ts
  • src/codex/warmup.ts
  • src/combos/failover.ts
  • src/combos/request.ts
  • src/combos/types.ts
  • src/config/pending-teardown.ts
  • src/images/loop.ts
  • src/lib/errors.ts
  • src/lib/request-execution-budget.ts
  • src/lib/spend-reservation-ledger.ts
  • src/lib/state-store-registrations.ts
  • src/lib/test-home-guard.ts
  • src/lib/upstream-retry.ts
  • src/lib/windows-elevation.ts
  • src/oauth/index.ts
  • src/oauth/key-providers.ts
  • src/providers/kiro-models.ts
  • src/providers/label.ts
  • src/providers/model-discovery.ts
  • src/providers/registry/entries-core.ts
  • src/providers/registry/entries-extended.ts
  • src/providers/registry/model-seeds.ts
  • src/responses/reasoning-envelope.ts
  • src/routing/identity-domains.ts
  • src/routing/probe-lease.ts
  • src/server/chat-completions.ts
  • src/server/chat-native.ts
  • src/server/index.ts
  • src/server/index/live-sideband.ts
  • src/server/index/websocket-handler.ts
  • src/server/inspection-tee.ts
  • src/server/live.ts
  • src/server/management/combo-routes.ts
  • src/server/relay-eager.ts
  • src/server/relay.ts
  • src/server/request-log.ts
  • src/server/response-log-body.ts
  • src/server/responses-undeclared-tool-guard.ts
  • src/server/responses/account-change-state.ts
  • src/server/responses/adapter-continuation.ts
  • src/server/responses/adapter-delivery.ts
  • src/server/responses/adapter-dispatch.ts
  • src/server/responses/codex-ws-wire.ts
  • src/server/responses/collaboration.ts
  • src/server/responses/combo-session-recall.ts
  • src/server/responses/compact.ts
  • src/server/responses/core-auth.ts
  • src/server/responses/core-codex-account.ts
  • src/server/responses/core-combo.ts
  • src/server/responses/core-errors.ts
  • src/server/responses/core-replay.ts
  • src/server/responses/core.ts
  • src/server/responses/encrypted-payload.ts
  • src/server/responses/input-admission.ts
  • src/server/responses/passthrough-delivery.ts
  • src/server/responses/passthrough-dispatch.ts
  • src/server/responses/passthrough-error.ts
  • src/server/responses/request-prepare.ts
  • src/server/responses/request-send-budget.ts
  • src/server/responses/request-spend.ts
  • src/server/responses/request-transport.ts
  • src/server/responses/run-turn-execution.ts
  • src/server/responses/sidecar-execution.ts
  • src/server/responses/terminal-guard.ts
  • src/service.ts
  • src/service/windows-ops.ts
  • src/service/windows-scheduler.ts
  • src/types.ts
  • src/types/config.ts
  • src/types/request.ts
  • src/types/tools.ts
  • src/update/index.ts
  • src/update/stop-contract.d.mts
  • src/update/stop-contract.mjs
  • src/update/stop-decision.d.mts
  • src/update/stop-decision.mjs
  • src/usage/log.ts
  • src/vision/anthropic-describe.ts
  • src/vision/describe.ts
  • src/web-search/anthropic-executor.ts
  • src/web-search/exa-executor.ts
  • src/web-search/executor.ts
  • src/web-search/gemini-executor.ts
  • src/web-search/loop.ts
  • src/web-search/ollama-executor.ts
  • src/web-search/parse.ts
  • src/web-search/passthrough-bridge.ts
  • src/web-search/xai-executor.ts
  • structure/adapters/compatibility-contracts.md
  • structure/adapters/registry.md
  • structure/catalog.md
  • structure/clients/claude-desktop.md
  • structure/clients/integrations.md
  • structure/codex-home.md
  • structure/config.md
  • structure/data-planes/images.md
  • structure/data-planes/inbound-compat.md
  • structure/gui-and-management-api.md
  • structure/manifest.json
  • structure/ops/docs-and-release.md
  • structure/ops/service-and-sidecars.md
  • structure/overview.md
  • structure/providers/chat-compat.md
  • structure/providers/cursor.md
  • structure/providers/google.md
  • structure/providers/kiro.md
  • structure/providers/openai-tiers.md
  • structure/providers/xai-grok.md
  • structure/runtime.md
  • structure/subagents.md
  • structure/transports/byte-accounting.md
  • structure/transports/inventory.md
  • structure/transports/responses.md
  • structure/transports/streaming-health.md
  • tests/adapters/bridge.test.ts
  • tests/adapters/google/google-structured-output.test.ts
  • tests/adapters/openai/openai-chat-bounded-tool-names.test.ts
  • tests/ci-workflows/ci-bun-crash-classifier.test.ts
  • tests/ci-workflows/ci-workflows.test.ts
  • tests/ci-workflows/file-size-ratchet.test.ts
  • tests/ci-workflows/install-scripts.test.ts
  • tests/ci-workflows/macos-serial-lanes.test.ts
  • tests/ci-workflows/test-home-guard.test.ts
  • tests/ci-workflows/test-runner.test.ts
  • tests/claude-integration/claude-model-info.test.ts
  • tests/claude-integration/claude-outbound.test.ts
  • tests/cli/cli-headless-parity.test.ts
  • tests/cli/cli-native-profile.test.ts
  • tests/clients/desktop-3p.test.ts
  • tests/clients/desktop-app-restart-posix.test.ts
  • tests/clients/desktop-app-restart.test.ts
  • tests/clients/desktop-profile.test.ts
  • tests/codex-integration/catalog-duplicate-slug-dedup.test.ts
  • tests/codex-integration/catalog-input-modality-enum.test.ts
  • tests/codex-integration/catalog-modelalias-unique-sync.test.ts
  • tests/codex-integration/catalog-remote-pull.test.ts
  • tests/codex-integration/catalog-slug-uniqueness-boundary.test.ts
  • tests/codex-integration/catalog-verbosity-default.test.ts
  • tests/codex-integration/client-injection-guard.test.ts
  • tests/codex-integration/codex-account-label.test.ts
  • tests/codex-integration/codex-account-selection-preferences.test.ts
  • tests/codex-integration/codex-account-store-refresh-classification.test.ts
  • tests/codex-integration/codex-account-store.test.ts
  • tests/codex-integration/codex-auth-api.test.ts
  • tests/codex-integration/codex-cli-install-provenance.test.ts
  • tests/codex-integration/codex-composed-acceptance.test.ts
  • tests/codex-integration/codex-entitlement-identity-read-fence.test.ts
  • tests/codex-integration/codex-inject-integration.test.ts
  • tests/codex-integration/codex-metadata-integrity.test.ts
  • tests/codex-integration/codex-model-entitlements.test.ts
  • tests/codex-integration/codex-pool-refresh-backoff.test.ts
  • tests/codex-integration/codex-quota-rejection.test.ts
  • tests/codex-integration/codex-warmup.test.ts
  • tests/codex-integration/combos.test.ts
  • tests/codex-integration/issue-914-transport-attribution.test.ts
  • tests/codex-integration/reserve-dispatch.test.ts
  • tests/codex-integration/selected-models.test.ts
  • tests/config/client-config-export-new-clients.test.ts
  • tests/config/client-config-new-clients.test.ts
  • tests/fixtures/file-size-baseline.json
  • tests/fixtures/realtime-voice-sideband/audio.json
  • tests/fixtures/realtime-voice-sideband/connect.json
  • tests/fixtures/realtime-voice-sideband/session.json
  • tests/fixtures/realtime-voice-sideband/shutdown.json
  • tests/fixtures/realtime-voice-sideband/tools.json
  • tests/fixtures/realtime-voice-sideband/transcript.json
  • tests/fixtures/test-layout-expected.json
  • tests/helpers/codex-warmup-rate-limit.ts
  • tests/helpers/combo-context-headroom-cases.ts
  • tests/helpers/combo-context-overflow-cases.ts
  • tests/helpers/combo-forced-effort-cases.ts
  • tests/helpers/combo-provider.ts
  • tests/helpers/home-destruction-scan.ts
  • tests/helpers/isolated-codex-home.ts
  • tests/helpers/remove-tree.ts
  • tests/helpers/reset-credit-consume-validation.ts
  • tests/helpers/responses-core-source.ts
  • tests/helpers/temp-home.ts
  • tests/helpers/test-budget.ts
  • tests/lab/core-lab-boundary.test.ts
  • tests/lib/execution-budget-permits.test.ts
  • tests/lib/remove-tree-helper.test.ts
  • tests/lib/transient-budget-scope-source.test.ts
  • tests/lib/upstream-retry.test.ts
  • tests/oauth/state-store-sweeper.test.ts
  • tests/preload.ts
  • tests/providers/codebuddy-adapter.test.ts
  • tests/providers/cursor/cursor-envelope-echo-retry.test.ts
  • tests/providers/deepseek-reasoning-replay.test.ts
  • tests/providers/flash-route-image-modalities.test.ts
  • tests/providers/kimi-responses-adjacency.test.ts
  • tests/providers/kiro/kiro-adapter.test.ts
  • tests/providers/kiro/kiro-reasoning-roundtrip.test.ts
  • tests/providers/provider-model-discovery-contract.test.ts
  • tests/providers/provider-registry-parity.test.ts
  • tests/providers/rate-limit-retry.test.ts
  • tests/providers/upstream-transient-retry.test.ts
  • tests/providers/xai/grok-lifecycle.test.ts
  • tests/responses/bare-echo-alias.test.ts
  • tests/responses/chat-completions-deferred-tools.test.ts
  • tests/responses/chat-completions-endpoint.test.ts
  • tests/responses/empty-completion-core.test.ts
  • tests/responses/passthrough-abort.test.ts
  • tests/responses/responses-4546-incident-regression.test.ts
  • tests/responses/responses-account-change-scrub.test.ts
  • tests/responses/responses-account-label.test.ts
  • tests/responses/responses-bare-echo-helper-fence.test.ts
  • tests/responses/responses-core-modules.test.ts
  • tests/responses/responses-parser.test.ts
  • tests/responses/responses-preview-main-read-fence.test.ts
  • tests/responses/responses-send-budget-counts.test.ts
  • tests/responses/responses-send-budget-errors.test.ts
  • tests/responses/responses-spend-ledger-wiring.test.ts
  • tests/responses/ws-failure-stage.test.ts
  • tests/routing/combo-management-api.test.ts
  • tests/routing/probe-lease-dispatch-wiring.test.ts
  • tests/routing/probe-lease.test.ts
  • tests/routing/router-combo-failover-classification.test.ts
  • tests/routing/routing-policy-fallback.test.ts
  • tests/routing/subagent-fallback-handle-responses.test.ts
  • tests/routing/subagent-fallback-preview-sites.test.ts
  • tests/server/input-admission.test.ts
  • tests/server/management-client-config-route.test.ts
  • tests/server/model-discovery-management-api.test.ts
  • tests/server/response-log-inspection.test.ts
  • tests/server/retry-after-429.test.ts
  • tests/server/server-combo-failover-e2e.test.ts
  • tests/server/server-combo-reasoning-replay-eligibility.test.ts
  • tests/server/server-key-failover-e2e.test.ts
  • tests/server/server-live-realtime-fixtures.test.ts
  • tests/server/server-live.test.ts
  • tests/server/server-management-auth.test.ts
  • tests/server/server-search.test.ts
  • tests/server/server-xai-oauth-401-replay.test.ts
  • tests/server/terminal-guard.test.ts
  • tests/service/stop-deferred-teardown.test.ts
  • tests/update/update-stop-classification.test.ts
  • tests/usage/key-attribution.test.ts
  • tests/usage/request-log-nonstream.test.ts
  • tests/vision/vision-fail-closed.test.ts
  • tests/web-search/web-search-parse.test.ts
  • tests/web-search/web-search-progress-stream.test.ts
  • tests/windows/windows-elevation-spawn.test.ts
  • tests/windows/windows-scheduler-install-verification.test.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the chore Maintenance, CI, tests, refactors, or build changes (not a user-facing bug or feature). label Sep 16, 2026
@github-actions github-actions Bot changed the title chore(release): promote 2.57.0 to main [WRONG BRANCH] chore(release): promote 2.57.0 to main Sep 16, 2026
@github-actions

github-actions Bot commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

⏳ DRAFT

  • wrong target branch (main); retarget to dev. UI screenshot required.

What to do

  • Retarget this PR to dev — all contributions go to dev.
  • Add a screenshot of the UI change to the PR description.

Its title has been prefixed with [WRONG BRANCH].
Automatic draft conversion failed (token cannot change draft status). Please convert this pull request to a draft manually. The required enforce-target check will keep failing until every issue above is resolved.

@github-actions
github-actions Bot marked this pull request as draft September 16, 2026 17:28
@lidge-jun

Copy link
Copy Markdown
Owner Author

리뷰 · 우선순위 76 / 80

이 PR은 기능을 새로 넣는 요청이 아니다. release/2.57.0 브랜치를 main으로 올리는 2.57.0 프로모션이다. 지금 로컬에서 갱신한 dev HEAD는 d78be30da7a0abed0f647f2bf5e097b44d30bae0이고, 이 PR의 head SHA도 그와 같다. 즉 프로모션 tip은 현재 dev tip과 한 점이다. package.json은 release/dev 쪽이 2.57.0, main은 아직 2.56.0이다. 본문이 말하는 대로 v2.56.0 이후 커밋은 약 184개이고, 파일 수는 API 기준 405개(+20377/-1646)라 gh pr diff가 300파일 한도에 걸린 것도 정상이다.

제품 트리는 tip의 직전 후보 2b19983bfd(#4821 Bun 1.4.0 핀)와 같다. 그 위에 올라간 것은 #4828 릴리스 트레인 문서뿐이라, 2b19983bfd..d78be30da diff는 devlog/_plan/260917_2570_release_train/ 네 장뿐이다. 빌드·타입체크·테스트 경로가 devlog/를 읽지 않으므로, 문서 tip이 후보 tip을 밀어 버리지 않았다는 본문 주장은 현재 dev와 맞다. Bun 핀도 checkout에서 확인했다: package.json의 bun/@types/bun과 Dockerfile의 oven/bun이 모두 1.4.0이다.

제목에 [WRONG BRANCH]가 붙어 있고 enforce-target은 FAILURE다. 이건 버그가 아니라 프로모션의 약속된 빨간 표시다. 게이트는 기능 PR이 dev를 base로 쓰게 막는 장치라서, main을 base로 쓰는 프로모션은 매번 같은 빨간 표를 받는다. 본문이 가리키는 2.55.0(#4619)·2.56.0(#4687) 패턴과도 같다. 그래서 enforce-target 하나만으로 이 PR을 닫거나 rebase하라고 하면 안 된다.

본문이 고지한 전제 하나가 아직 열려 있다. publish 전에 dev를 2.58.0으로 여는 #4827이 먼저 머지돼야 release.ymlassert-ahead가 만족한다고 적혀 있는데, 지금 #4827은 아직 OPEN이다. 또한 CI rollup에는 enforce-target 외에 여러 product/test 잡이 IN_PROGRESS/QUEUED 상태다. 프로모션 본문은 “로컬 suite는 안 돌렸고 hosted CI exact SHA 증거가 devlog에 있다”고 하므로, merge 직전에도 그 증거가 tip SHA와 여전히 맞는지 한 번 더 확인하는 편이 안전하다. mergeable 값은 MERGEABLE로 보이지만 mergeable_state가 blocked로 잡힌 순간이 있었으니, 필수 체크가 다 끝나기 전에 강제 머지하면 안 된다.

types.ts/config.ts 스플릿 캠페인은 기능 PR 판정에는 중요하지만, 이번 같은 release chore에는 거의 해당 없다. 이미 dev에 쌓인 트리를 main으로 옮기는 일이고, 새 레지스트리 엔트리를 넣는 PR이 아니다. 열린 큐에 더 실을 제품 PR은 없다는 #4828 트레인 문서의 판정도 그대로 이어진다.

라인 단위로 “이 줄이 틀렸다”고 찍을 제품 패치는 없다. 아래는 경로·게이트·전제 위주의 점검이다.

경로 release/2.57.0 → main - 프로모션 base/head가 맞고, head SHA가 현재 dev tip과 동일하다.
경로 package.json - release/dev=2.57.0, main=2.56.0. 버전 bump 방향은 프로모션으로 맞다.
경로 package.json / Dockerfile - bun·@types/bun·oven/bun이 1.4.0으로 핀되어 본문의 #4821 설명과 일치한다.
경로 2b19983..d78be30 - 제품 코드 델타 없음. devlog 릴리스 트레인 문서(#4828)만 추가.
게이트 enforce-target - FAILURE는 예상된 WRONG BRANCH 표시. 기능 PR 기준로 해석하면 오판.
전제 #4827 - 아직 OPEN. assert-ahead/publish 순서가 본문 약속과 어긋나면 릴리스 워크플로가 막힐 수 있다.
CI rollup - product/test·CodeQL 일부가 아직 진행 중. 완료·증거 재확인 전에 머지하지 말 것.

메인테이너의 판단이 필요한 지점

  • chore(release): open dev at 2.58.0 before releasing 2.57.0 #4827(2.58.0 open-dev)을 이 PR publish보다 먼저 머지할지, 아니면 순서를 문서/워크플로에서 다시 고정할지.
  • tip d78be30da의 hosted CI 증거(특히 Cross-platform / Bun 핀 이후)를 publish 직전에 한 번 더 볼지.
  • enforce-target 빨간 표를 무시하고 프로모션을 진행할지(이전 2.55/2.56와 동일 패턴).
  • 프로모션 머지 후 태그/릴리스 디스패치와 npm publish 확인을 누가 소유할지.

너의 추천
#4827을 먼저(또는 본문이 정한 순서대로) 처리한 뒤, 필수 product CI가 tip SHA에서 안정되면 이 프로모션을 머지한다. enforce-target FAILURE만으로 닫거나 rebase하지 않는다. types/config 스플릿 캠페인 이유로 이 chore를 반려할 필요는 없다. 머지 후에는 v2.57.0 태그·release 워크플로·registry 반영을 바로 확인한다.

이 댓글은 grok-bot이 작성했습니다

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d78be30da7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/codex/routing.ts
// Conclude the half-open recovery trial BEFORE the admissibility gate below (#4701): an
// outcome that gate drops still ended this request, and a lease nobody hands back leaves the
// next trial waiting out its deadline. The settle carries its own fences, so this is safe here.
settleTransientProbeForOutcome(accountId, meta, classifyCodexUpstreamOutcome(outcome, meta.denial));

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Ignore stale transient-probe outcomes before updating health

When a probe takes longer than its 30-second lease, a replacement probe can be granted and record a newer failure before the original request completes. Although settleTransientProbeForOutcome rejects the original lease as stale or expired, its result is discarded here, so the old outcome continues through recordCodexUpstreamOutcome; a late 2xx can then clear the newer failure state and route traffic back to the unhealthy account. Propagate the settlement result and skip account-health mutations for stale or expired probe outcomes.

Useful? React with 👍 / 👎.

Comment on lines +31 to +33
return `k${createHash("sha256").update(JSON.stringify([
"ocx-key-account-v1", provider, selection.entryId ?? null, selection.reference,
])).digest("hex").slice(0, 32)}`;
Comment thread src/bridge/errors.ts
headers.set("Retry-After", retryAfter);
}
return new Response(JSON.stringify({ error }), {
const response = new Response(JSON.stringify({ error }), {
…easures (#4830)

The first proxy child in native-profile-startup.test.ts published its port at
50.7s against a 45s SPAWN_BUDGET_MS while the next spawn in the same file was
ready in 1.8s. Gate the budget to 90s on win32 only, the same way
BULK_DURABLE_IO_BUDGET_MS already is.

Co-authored-by: lidge-jun <lidge-jun@users.noreply.github.com>
@lidge-jun

Copy link
Copy Markdown
Owner Author

CodeQL: reviewed, not a blocker

The CodeQL check here fails with "10 new alerts including 8 high severity security vulnerabilities". That count overstates the delta: eight of the ten carry the same alert numbers already open on main, and #184 is the same data flow as main's #175 at a shifted line.

Exactly one alert is genuinely new: #183, js/insufficient-password-hash at src/codex/account-label.ts:31. It is a false positive — the SHA-256 there produces a stable 128-bit label for API-key selection in logs. It is not password storage and not an authenticator, so the rule's premise does not hold.

Of the rest, six are in test files (tests/routing/subagent-fallback-handle-responses.test.ts, tests/server/server-combo-failover-e2e.test.ts, tests/server/server-key-failover-e2e.test.ts, tests/ci-workflows/test-runner.test.ts) where the flagged substring checks are mock-fetch routing conditions rather than hostname admission, and none is in the published package. #86 is the same SHA-256-as-identifier shape in src/oauth/store.ts:532 and is already open on main.

One finding is real and pre-existing rather than introduced here: src/bridge/errors.ts returns a caught filesystem Error.message to the caller, which can leak host paths (main #175, PR #184). It is filed for the next release, where the fix is to return a generic client error and keep the detailed message server-side.

Verdict: GO on the security question for 2.57.0.

@lidge-jun

Copy link
Copy Markdown
Owner Author

Go decision for 2.57.0

Candidate 1831193294, package.json 2.57.0.

Merging as a merge commit, matching the 2.56.0 promotion #4694. enforce-target and CodeQL are red here by design and by review respectively.

@lidge-jun
lidge-jun marked this pull request as ready for review September 16, 2026 18:15
@lidge-jun
lidge-jun merged commit 44de45d into main Sep 16, 2026
52 of 55 checks passed
@lidge-jun
lidge-jun deleted the release/2.57.0 branch September 16, 2026 18:15

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

if (recovery === undefined) classifyPoolRecoveryDispatch("initial");

P1 Badge Admit transient retries through the pool limiter

When many passthrough requests receive transient 5xx responses, this callback records each first attempt but sends every subsequent recovery attempt without calling classifyPoolRecoveryDispatch("retry"). The only retry admission call elsewhere covers Codex account moves, so ordinary fetchWithTransientRetry traffic—the primary retry-storm path—still bypasses the new process-wide recovery ratio and can amplify an upstream outage. Check the limiter before dispatching every non-initial attempt and return the established local retry refusal when it denies admission.


// Once at ingress, spend observer included: a combo child inherits the parent's holder.
sendBudget: options.sendBudget ?? createRequestExecutionBudget(undefined, undefined, attachRequestSpendTracker(req, logCtx)),

P2 Badge Attribute combo reservations to the active child

For combo requests, the tracker created here closes over the parent logCtx, while executeComboResponses dispatches each target with a separate childLog and does not copy that context back until the target finishes. Consequently, every reservation made during a child send reads the parent's provider: "combo" and usually no accountLogLabel, so durable spend is booked against the synthetic combo pool rather than the provider/account that incurred it; per-pool and per-identity accounting or ceilings therefore cannot identify the real spender. Pass the active child context to the observer, or update the tracker's scope at each physical dispatch.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore Maintenance, CI, tests, refactors, or build changes (not a user-facing bug or feature).

Projects

None yet

Development

Successfully merging this pull request may close these issues.