Skip to content

[WRONG BRANCH] release: promote 2.47.0-preview.20260908 to preview - #3928

Merged
lidge-jun merged 151 commits into
previewfrom
codex/release-247-preview
Sep 7, 2026
Merged

[WRONG BRANCH] release: promote 2.47.0-preview.20260908 to preview#3928
lidge-jun merged 151 commits into
previewfrom
codex/release-247-preview

Conversation

@lidge-jun

@lidge-jun lidge-jun commented Sep 7, 2026

Copy link
Copy Markdown
Owner

Summary

Promote the 2.47.0 release candidate to preview for 2.47.0-preview.20260908. The owner explicitly authorized preview/main promotions and publication after independent Astra PABCD regression validation.

This promotion depends on #3927 landing on dev. The prepared tree matches reviewed candidate 48ab3e1 exactly except package.json version. Dev was moved to 2.48.0 via #3925. Sponsor placement PRs #3914/#3915 are excluded.

Verification

  • Independent Astra runtime, Orca/security, and UI/usage re-audits passed after reproduced defects were fixed in fix: close regression findings before the 2.47.0 release #3927. Known baseline issues and two nonblocking residuals are explicitly recorded there, not claimed fixed.
  • Candidate root typecheck, GUI typecheck/lint, privacy scan, focused negative/positive tests and pinned React Doctor passed.
  • Five browser scenarios using actual components/CSS with mocked APIs passed: fallback failure/retry and invalid/exact usage interval receipts.
  • Git tree comparison: only the deliberate channel version differs from candidate 48ab3e1.
  • This PR remains draft until fix: close regression findings before the 2.47.0 release #3927 is on dev and its own head checks pass. Publication requires the actual promotion SHA's successful push-event Cross-platform CI, Service lifecycle, all six Windows shards and macOS control via lane=all, plus Release dry-run before live publication.
  • Any admin merge is the owner's explicitly requested release-specific promotion decision, not the dev-only integration exception or an independent maintainer approval. No direct protected-branch push or rule changes.

GUI verification (mocked failure path, unchanged component tree)

Subagent roster survives auxiliary settings failure

Checklist

  • Scope stays focused and avoids unrelated cleanup.
  • Docs or release notes were updated when needed; the release workflow generates channel release notes.
  • Security-sensitive changes were reviewed for secrets, auth, and unsafe defaults.

Final candidate recheck: 48ab3e1. Main-relative pinned React Doctor scanned 44 changed files with no issues; independent UI guard review passed 109 tests and two sentinel/cache probes. Browser smoke was refreshed on this exact source with the five fault/retry scenarios plus blank/valid poll input. All displayed screenshots now label the final candidate.

Promotion target-check disposition: enforce-target is expected to reject main/preview because its ALLOWED_BASES contains only dev and its only coded exception is a stacked child. The repository AGENTS.md explicitly permits maintainer release promotions and the owner requested these two targets. As with preceding release PRs #3851/#3852, this is an explicitly authorized admin PR-only promotion exception. The failing target-policy check is NOT reported as passing; all runtime/security/release gates still must pass. No checks, branch protections, or target branches are modified to hide it.

Summary by CodeRabbit

  • New Features

    • Added OrcaRouter API-key and OAuth sign-in options.
    • Added model price overrides through the dashboard and CLI.
    • Added custom usage date ranges in the dashboard and CLI.
    • Added sub-agent fallback model configuration and custom model-picker ordering.
    • Added an opt-in “Open Codex without signing in” setting.
    • Added configurable reasoning-effort pins and improved quota auto-refresh behavior.
    • Added safer code-mode guidance, recovery hints, and bounded sidecar responses.
  • Bug Fixes

    • Improved OAuth cancellation, startup responsiveness, compaction fallback, pricing accuracy, and session affinity.
  • Documentation

    • Expanded integration guidance, sponsorship information, provider references, and localized documentation.

github-actions Bot and others added 30 commits September 7, 2026 03:34
chore(release): open dev at 2.47.0 before releasing 2.46.0
… first call

Routed models in Codex code mode learned apply_patch argument shape, the marker rule, the isolate import ban and session_id polling only by failing (xai/grok-4.6, 2026-09-07). State them once in exec-tool-result-normalize.ts beside the echo rule and inject at the three existing code-mode sites: shared nudge, Cursor guidance, native routed Responses instructions.
…a host failure string

Post-hoc half of the host contract. Exec-bridge results carrying "expects a string input", "The first/last line of the patch must be", or "Unsupported import in exec" gain one recovery line on the native routed Responses, Kiro and Cursor result paths. Responses and Kiro additionally require the verified code-mode catalog; Cursor matches the exact exec name under its opencodex-responses provider and keeps its isError policy. Flat shell bridges, foreign namespaces, whitespace/failed-wrapper grouping and replayed annotations are untouched.
Document the pre-call nested-helper contract and post-hoc host-failure annotation in the transports SoT and the Codex integration guide. This change does not rewrite model JavaScript or patch payloads.
fix(code-mode): state the host contract for nested helpers and annotate host failures
(cherry picked from commit e5bbd79)

Co-authored-by: Ingwannu <186453546+Ingwannu@users.noreply.github.com>
`debugProviderDiagnostic` already returns early when provider debug is off,
but its argument object is built by the caller first. The Kiro request path
therefore ran `new TextEncoder().encode(body).length` over the entire
serialized request body on every request, including when diagnostics were
disabled, and then discarded the result inside the callee.

Wrap the diagnostic call in `isDebugEnabled()` so the details are only
constructed when they can actually be emitted. `src/adapters/openai-chat.ts`
already guards its diagnostics the same way.

The regression asserts that building a request performs no `TextEncoder`
encode over the serialized payload while diagnostics are off; it fails
without the guard and passes with it.

(cherry picked from commit d5d711a)

Co-authored-by: luvs01 <27862058+luvs01@users.noreply.github.com>
… [skip ci]

Carries PR #3840 (head 9a21452, 5 commits squashed onto current dev):
gpt-6-astra, Grok and MAI models on GitHub Copilot default to the Responses
wire instead of Chat Completions, which returned unsupported_api_for_model.
Docs scope the per-wire model lists and the discovery fallback test covers
legacy overrides.

(carried from #3840)

Co-authored-by: chilung-cgu <215337896+chilung-cgu@users.noreply.github.com>
…ate reads [skip ci]

Resolves the maintainer objection on #3837 (discussion_r3945935220): the
shared setup cleared only OCX_DEBUG_FRAMES, so an inherited OCX_DEBUG=1 or a
runtime debug override made the encoder-spy test fail legitimately. Snapshot
OCX_DEBUG, OCX_DEBUG_FRAMES and the runtime override in beforeEach, clear
them, and restore the exact previous values in afterEach.

Co-authored-by: luvs01 <27862058+luvs01@users.noreply.github.com>
(cherry picked from commit 8ef77f7)

Co-authored-by: luvs01 <27862058+luvs01@users.noreply.github.com>
…er marker in the same delta [skip ci]

Resolves the unresolved major finding on #3843 (discussion_r3946034145):
lastIndexOf selected the later START, its END made the whole-string strip
pair the first START with that END, and the malformed text vanished. Walk
START-delimited segments independently so a superseded or over-bound span is
emitted verbatim and only a bounded trailing span is held for the next delta.

Co-authored-by: luvs01 <27862058+luvs01@users.noreply.github.com>
…ip ci]

(cherry picked from commit 73abec9)

Co-authored-by: luvs01 <27862058+luvs01@users.noreply.github.com>
GET and PUT /api/sidecar-settings return webSearch.model/backend/stream flags
but omitted webSearch.enabled, so the dashboard could not tell whether the
sidecar master switch was off. Serialize the effective value (unset reads
as enabled) on both responses.

Reimplements #2033 on current dev
(the original branch is 1364 commits behind and its test moved to
tests/vision/ under the test-layout split).

Co-authored-by: louis-tepe <161487332+louis-tepe@users.noreply.github.com>
docs(devlog): make CI completion check fail closed (carry #3532)
fix(copilot): route Responses-only GPT, Grok and MAI models correctly (carry #3840)
fix(kiro): gate request diagnostics behind the debug check (carry #3837)
fix(responses): bound the streaming citation marker span (carry #3843)
fix(providers): refuse keychain restore across provider ownership (carry #3845)
fix(management): expose the effective web-search sidecar enabled state (reimplements #2033)
(cherry picked from commit 0da9f2c)

Co-authored-by: terrytan95 <10609214+terrytan95@users.noreply.github.com>
(cherry picked from commit 5d01860)

Co-authored-by: terrytan95 <10609214+terrytan95@users.noreply.github.com>
…ption for canonical URLs

(cherry picked from commit 3830862)

Co-authored-by: hualiny <82697947+hualiny@users.noreply.github.com>
Co-authored-by: hualiny <82697947+hualiny@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Team

Run ID: 09458ec4-201b-4e1e-9977-c78798107f5d

📥 Commits

Reviewing files that changed from the base of the PR and between 9ef2aaf and d2ec06b.

⛔ Files ignored due to path filters (2)
  • docs-site/public/pr-screenshots/subagent-fallback-settings.png is excluded by !**/*.png
  • docs/pr-assets/codex-desktop-opt-in.jpg is excluded by !**/*.jpg
📒 Files selected for processing (260)
  • .github/workflows/release.yml
  • README.md
  • SPONSORS.md
  • devlog/_fin/260905_always_on_429_failover/090_outcome.md
  • devlog/_fin/260905_always_on_429_failover/091_post_merge_audit.md
  • devlog/_plan/260907_code_mode_host_contract/000_plan.md
  • devlog/_plan/260907_code_mode_host_contract/001_host_probe_evidence.md
  • devlog/_plan/260907_code_mode_host_contract/010_pre_call_contract.md
  • devlog/_plan/260907_code_mode_host_contract/020_post_hoc_annotation.md
  • devlog/_plan/260907_code_mode_host_contract/030_docs_and_delivery.md
  • devlog/_plan/260907_code_mode_host_contract/040_delivery_record.md
  • devlog/_plan/260907_lane_c/000_plan.md
  • devlog/_plan/260907_lane_c/010_web_search.md
  • devlog/_plan/260907_lane_c/020_vision.md
  • devlog/_plan/260907_lane_c/030_health.md
  • devlog/_plan/260907_lane_c/040_desktop.md
  • devlog/_plan/260907_lane_c/050_fallback.md
  • devlog/_plan/260907_lane_d/000_plan.md
  • devlog/_plan/260907_lane_d/001_roadmap_audit.md
  • devlog/_plan/260907_lane_d/010_thinking.md
  • devlog/_plan/260907_lane_d/020_receipt.md
  • devlog/_plan/260907_lane_d/030_account_prices.md
  • devlog/_plan/260907_lane_d/040_price_editor.md
  • devlog/_plan/260907_lane_d/050_usage_ranges.md
  • devlog/_plan/260907_lane_d/060_delivery.md
  • devlog/_plan/260907_next_release_recommendations/000_plan.md
  • devlog/_plan/260907_next_release_recommendations/010_recommendations.md
  • devlog/_plan/260907_release_train/000_plan.md
  • devlog/_plan/260907_release_train/010_wp1_execution.md
  • devlog/_plan/260907_release_train/090_readiness.md
  • devlog/_plan/260907_release_train_b/000_plan.md
  • devlog/_plan/260907_release_train_b/010_carry.md
  • devlog/_plan/260907_release_train_b/020_carry.md
  • devlog/_plan/260907_sponsor_branches/000_plan.md
  • devlog/_plan/260907_sponsor_branches/010_phase1.md
  • devlog/_plan/260907_sponsor_branches/020_phase2.md
  • devlog/_plan/260907_sponsor_branches/030_phase3.md
  • 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/guides/integrations.md
  • docs-site/src/content/docs/fr/guides/pi.md
  • docs-site/src/content/docs/fr/guides/providers.md
  • docs-site/src/content/docs/fr/reference/configuration/providers.md
  • docs-site/src/content/docs/getting-started/how-it-works.mdx
  • docs-site/src/content/docs/guides/claude-code.md
  • docs-site/src/content/docs/guides/codex-integration.md
  • docs-site/src/content/docs/guides/integrations.md
  • docs-site/src/content/docs/guides/model-ordering.md
  • docs-site/src/content/docs/guides/pi.md
  • docs-site/src/content/docs/guides/providers.md
  • docs-site/src/content/docs/guides/web-dashboard.md
  • docs-site/src/content/docs/ja/getting-started/how-it-works.mdx
  • docs-site/src/content/docs/ja/guides/claude-code.md
  • docs-site/src/content/docs/ja/guides/codex-integration.md
  • docs-site/src/content/docs/ja/guides/pi.md
  • docs-site/src/content/docs/ja/guides/providers.md
  • docs-site/src/content/docs/ja/reference/configuration/providers.md
  • docs-site/src/content/docs/ja/reference/proxy-formats.md
  • docs-site/src/content/docs/ko/getting-started/how-it-works.mdx
  • docs-site/src/content/docs/ko/guides/claude-code.md
  • docs-site/src/content/docs/ko/guides/codex-integration.md
  • docs-site/src/content/docs/ko/guides/pi.md
  • docs-site/src/content/docs/ko/guides/providers.md
  • docs-site/src/content/docs/ko/reference/configuration/providers.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/cli/agents.md
  • docs-site/src/content/docs/reference/cli/providers-accounts.md
  • docs-site/src/content/docs/reference/configuration/agents.md
  • docs-site/src/content/docs/reference/configuration/providers.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/getting-started/how-it-works.mdx
  • docs-site/src/content/docs/ru/guides/claude-code.md
  • docs-site/src/content/docs/ru/guides/codex-integration.md
  • docs-site/src/content/docs/ru/guides/pi.md
  • docs-site/src/content/docs/ru/guides/providers.md
  • docs-site/src/content/docs/ru/reference/configuration/providers.md
  • docs-site/src/content/docs/ru/reference/proxy-formats.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/guides/pi.md
  • docs-site/src/content/docs/tr/guides/providers.md
  • docs-site/src/content/docs/tr/reference/configuration/providers.md
  • docs-site/src/content/docs/zh-cn/getting-started/how-it-works.mdx
  • docs-site/src/content/docs/zh-cn/guides/claude-code.md
  • docs-site/src/content/docs/zh-cn/guides/codex-integration.md
  • docs-site/src/content/docs/zh-cn/guides/pi.md
  • docs-site/src/content/docs/zh-cn/guides/providers.md
  • docs-site/src/content/docs/zh-cn/reference/configuration/providers.md
  • docs-site/src/content/docs/zh-cn/reference/proxy-formats.md
  • docs-site/src/content/docs/zh-tw/guides/codex-integration.md
  • docs-site/src/content/docs/zh-tw/guides/pi.md
  • docs-site/src/content/docs/zh-tw/guides/providers.md
  • docs-site/src/content/docs/zh-tw/reference/configuration/providers.md
  • gui/src/components/AddProviderModal.tsx
  • gui/src/components/ModelDisplayNameDialog.tsx
  • gui/src/components/ModelPickerOrderEditor.tsx
  • gui/src/components/ModelPriceDialog.tsx
  • gui/src/components/add-provider-oauth-pane.tsx
  • gui/src/components/subagents-workspace/SubagentDelegationSection.tsx
  • gui/src/components/subagents-workspace/SubagentsWorkspace.tsx
  • gui/src/components/use-add-provider-oauth.ts
  • 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/model-picker-order.ts
  • gui/src/oauth-cancellation-barrier.ts
  • gui/src/pages/Models.tsx
  • gui/src/pages/Subagents.tsx
  • gui/src/pages/Usage.tsx
  • gui/src/pages/dashboard-overview-sections.tsx
  • gui/src/pages/dashboard-shared.ts
  • gui/src/pages/models-shared.ts
  • gui/src/pages/use-dashboard-data.ts
  • gui/src/pages/use-providers-oauth.ts
  • gui/src/pages/use-subagent-delegation.ts
  • gui/src/provider-icons.ts
  • gui/src/styles-models-workspace.css
  • gui/src/styles-subagents-workspace.css
  • gui/src/usage-time-range.ts
  • gui/tests/add-provider-oauth-url-leak.test.tsx
  • gui/tests/fr-localization.test.ts
  • gui/tests/locale-parity.test.ts
  • gui/tests/model-picker-order-editor.test.tsx
  • gui/tests/model-picker-order.test.ts
  • gui/tests/models-display-name-editor.test.tsx
  • gui/tests/models-price-editor.test.tsx
  • gui/tests/models-status-toast.test.tsx
  • gui/tests/multi-agent-guidance.test.tsx
  • gui/tests/subagents-fallback.test.tsx
  • gui/tests/subagents-ultra-mode.test.tsx
  • gui/tests/usage-custom-range.test.tsx
  • gui/tests/usage-time-range.test.ts
  • gui/tests/vision-sidecar-dashboard.test.tsx
  • package.json
  • readme/README.fr.md
  • readme/README.ja.md
  • readme/README.ko.md
  • readme/README.ru.md
  • readme/README.tr.md
  • readme/README.zh-CN.md
  • readme/README.zh-TW.md
  • scripts/privacy-scan.ts
  • scripts/test-layout/layout.json
  • skills/ocx/references/01_management_surface.md
  • src/adapters/cursor/protobuf-request.ts
  • src/adapters/cursor/tool-guidance.ts
  • src/adapters/cursor/tool-result-normalize.ts
  • src/adapters/exec-tool-result-normalize.ts
  • src/adapters/kiro.ts
  • src/adapters/responses-code-mode.ts
  • src/adapters/tool-catalog-nudge.ts
  • src/bridge.ts
  • src/claude/inbound.ts
  • src/claude/outbound.ts
  • src/cli/capabilities.ts
  • src/cli/integrations.ts
  • src/cli/models-runtime-subcommands.ts
  • src/cli/models-runtime.ts
  • src/cli/observe.ts
  • src/cli/usage-report.ts
  • src/clients/config-export.ts
  • src/codex/auth-api.ts
  • src/codex/catalog/provider-fetch.ts
  • src/codex/quota-auto-refresh-state.ts
  • src/codex/quota-auto-refresh.ts
  • src/codex/warmup.ts
  • src/config.ts
  • src/config/provider-validation.ts
  • src/lib/json-byte-size.ts
  • src/lib/provider-outbound.ts
  • src/oauth/index.ts
  • src/oauth/orcarouter.ts
  • src/providers/key-store.ts
  • src/providers/registry.ts
  • src/responses/citation-markers.ts
  • src/responses/reasoning-envelope.ts
  • src/server/auth-cors.ts
  • src/server/chat-completions.ts
  • src/server/chat-native.ts
  • src/server/claude-messages.ts
  • src/server/effort-policy.ts
  • src/server/management/agent-settings-routes.ts
  • src/server/management/config-routes.ts
  • src/server/management/logs-usage-routes.ts
  • src/server/management/model-routes.ts
  • src/server/management/model-rows.ts
  • src/server/management/provider-routes.ts
  • src/server/management/route-registry.ts
  • src/server/management/usage-aggregate-cache.ts
  • src/server/responses/compact.ts
  • src/server/responses/core.ts
  • src/server/startup-health-cache.ts
  • src/types/config.ts
  • src/types/provider.ts
  • src/usage/cost.ts
  • src/usage/summary.ts
  • src/usage/time-range.ts
  • src/usage/user-cost-overlays.ts
  • src/vision/anthropic-describe.ts
  • src/web-search/anthropic-executor.ts
  • src/web-search/parse.ts
  • structure/03_catalog-and-subagents.md
  • structure/04_transports-and-sidecars.md
  • structure/05_gui-and-management-api.md
  • structure/08_openai-provider-tiers.md
  • tests/adapters/exec-tool-result-normalize.test.ts
  • tests/adapters/tool-catalog-nudge.test.ts
  • tests/ci-workflows/ci-workflows.test.ts
  • tests/ci-workflows/privacy-scan-meta-key.test.ts
  • tests/claude-integration/claude-outbound.test.ts
  • tests/cli/cli-headless-parity.test.ts
  • tests/cli/cli-models-price.test.ts
  • tests/cli/cli-models-runtime-dispatch.test.ts
  • tests/cli/cli-usage-report.test.ts
  • tests/clients/prime-client.test.ts
  • tests/codex-integration/codex-inject.test.ts
  • tests/codex-integration/codex-quota-auto-refresh-main-admission.test.ts
  • tests/codex-integration/codex-quota-auto-refresh.test.ts
  • tests/codex-integration/codex-warmup.test.ts
  • tests/codex-integration/effort-policy.test.ts
  • tests/codex-integration/model-pinned-effort.test.ts
  • tests/config/client-config-export.test.ts
  • tests/config/model-pinned-effort-config.test.ts
  • tests/fixtures/provider-outbound-mihomo.ts
  • tests/fixtures/test-layout-expected.json
  • tests/gui/provider-workspace-auth.test.ts
  • tests/providers/cursor/cursor-tool-definitions.test.ts
  • tests/providers/cursor/cursor-toolresult-normalize.test.ts
  • tests/providers/github-copilot/github-copilot-wire-defaults.test.ts
  • tests/providers/kiro/kiro-adapter.test.ts
  • tests/providers/kiro/kiro-stream.test.ts
  • tests/providers/opencode-go-session-header.test.ts
  • tests/providers/orcarouter-provider.test.ts
  • tests/providers/provider-account-quota.test.ts
  • tests/providers/provider-key-store.test.ts
  • tests/providers/provider-outbound.test.ts
  • tests/providers/provider-quota.test.ts
  • tests/providers/provider-registry-parity.test.ts
  • tests/responses/citation-markers.test.ts
  • tests/responses/openai-responses-passthrough.test.ts
  • tests/responses/reasoning-envelope.test.ts
  • tests/responses/responses-compaction-routing.test.ts
  • tests/server/api-usage.test.ts
  • tests/server/model-costs-management-api.test.ts
  • tests/service/autostart-health.test.ts
  • tests/usage/usage-aggregate-cache.test.ts
  • tests/usage/usage-cost.test.ts
  • tests/usage/usage-summary.test.ts
  • tests/usage/usage-time-range.test.ts
  • tests/vision/sidecar-settings-vision-controls.test.ts
  • tests/vision/vision-anthropic.test.ts
  • tests/web-search/web-search-anthropic.test.ts

📝 Walkthrough

Walkthrough

This PR is a large release train combining many independent changes: release-workflow publication gating, SPONSORS.md and README sponsor sections, a code-mode host contract for routed tools, OAuth login cancellation, a model picker order editor, manual model pricing, subagent fallback chains, custom usage time windows, Codex quota auto-refresh improvements, reasoning-effort pinning with translator-budget accounting, the OrcaRouter provider, a citation-marker streaming fix, Mihomo IPv6 outbound handling, and extensive documentation and localization updates.

Changes

Release, Sponsors, and Documentation

Layer / File(s) Summary
Release publication gating
.github/workflows/release.yml, tests/ci-workflows/ci-workflows.test.ts
Publish step emits a receipt; post-publish smoke test and release creation are gated on it, with a bounded retry smoke check.
Sponsor docs and privacy allowlist
SPONSORS.md, README.md, readme/README.*.md, package.json, scripts/privacy-scan.ts
New sponsorship rules, README sponsor sections, and a scoped privacy-scan allowlist for the contact address.
Devlog planning records
devlog/_plan/*, devlog/_fin/*
Documentation-only plan/audit/delivery records for release-train lanes A-E, the host-contract feature, and sponsor branches.
Docs-site multilingual guides
docs-site/src/content/docs/**/*
Documentation across all locales for claude-code troubleshooting, code-mode host contract, Pi affinity, provider catalogs, config reference, auto-activation, and API references.

Code-mode Host Contract, OAuth Cancellation, and Model Management

Layer / File(s) Summary
Code-mode host contract
src/adapters/exec-tool-result-normalize.ts, tool-catalog-nudge.ts, cursor/*, kiro.ts, responses-code-mode.ts
Pre-call contract sentence and post-hoc failure annotation wired into Cursor, Kiro, and Responses code-mode paths.
OAuth cancellation barrier
gui/src/oauth-cancellation-barrier.ts, use-add-provider-oauth.ts, use-providers-oauth.ts
Shared barrier cancels in-flight OAuth logins on unmount, pagehide, or explicit action.
Model picker order editor
gui/src/components/ModelPickerOrderEditor.tsx, model-picker-order.ts, pages/Models.tsx
Drag/keyboard reorder editor for the routed model picker with save/reload lifecycle.
Manual model pricing
gui/src/components/ModelPriceDialog.tsx, src/server/management/model-routes.ts, src/cli/models-runtime.ts
GUI dialog, server route, and CLI commands for per-model pricing overrides.
Subagent fallback chain
gui/src/components/subagents-workspace/*, pages/Subagents.tsx
Ordered fallback-model chain and V2-compatibility warnings for native ChatGPT parents.
Custom usage time windows
src/usage/time-range.ts, usage/summary.ts, server/management/logs-usage-routes.ts, gui/src/pages/Usage.tsx
Since/until custom windows across CLI, API, and dashboard with per-window aggregate caching.

Backend Features and Fixes

Layer / File(s) Summary
Codex quota auto-refresh
src/codex/auth-api.ts, quota-auto-refresh*.ts, warmup.ts, startup-health-cache.ts
In-memory scheduling, bounded stale-metadata refresh, reauth quarantine, and non-blocking settings snapshot.
Reasoning effort pinning and translator budget
src/server/effort-policy.ts, config.ts, responses/reasoning-envelope.ts, claude/*, bridge.ts
Operator-owned effort pins resolved before caps, plus transient budget accounting for reasoning-envelope encode/decode.
OrcaRouter provider
src/oauth/orcarouter.ts, oauth/index.ts, providers/registry.ts
New PKCE OAuth and API-key provider with model discovery and self-hosted support.
Citation-marker streaming fix
src/responses/citation-markers.ts
Segment-walk classification fixes malformed/superseded/oversized citation spans.
Mihomo IPv6 outbound handling
src/lib/provider-outbound.ts
Admits canonical TUN exceptions for IPv6 fake-IP while preserving direct-route addresses.
Miscellaneous fixes
src/providers/key-store.ts, server/responses/compact.ts, vision/anthropic-describe.ts, usage/cost.ts, registry.ts
Keychain ownership guard, compaction 404 fallback, sidecar response bounding, cost-provider namespace fix, Copilot model additions.
GUI localization strings
gui/src/i18n/*.ts
Translation keys across all locales for the new GUI features.

Estimated code review effort: 5 (Critical) | ~180 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Model as Routed model
  participant Adapter as Adapter (Responses/Kiro/Cursor)
  participant Host as Codex code-mode host

  Adapter->>Model: Inject CODE_MODE_HOST_CONTRACT_SENTENCE
  Model->>Host: apply_patch / exec call
  Host-->>Adapter: exec result (may contain host failure string)
  Adapter->>Adapter: isCodexCodeModeExecResult(toolName, namespace)
  alt result matches known host failure marker
    Adapter->>Adapter: annotateCodeModeHostFailure appends recovery hint
  else no match
    Adapter->>Adapter: pass result through unchanged
  end
  Adapter->>Model: annotated or original exec result
Loading
sequenceDiagram
  participant GUI as Add-Provider Modal
  participant Hook as useAddProviderOAuth
  participant Barrier as oauth-cancellation-barrier
  participant Server as /api/oauth/login

  GUI->>Hook: loginOAuth(provider)
  Hook->>Barrier: afterOAuthCancellation(apiBase, provider, start)
  Barrier->>Server: POST /api/oauth/login
  Server-->>Barrier: login URL / status
  Barrier-->>Hook: result
  GUI->>Hook: cancelLoginOAuth(provider) (unmount/pagehide/explicit)
  Hook->>Barrier: cancelOAuthLogin(apiBase, provider)
  Barrier->>Server: POST /api/oauth/login/cancel (keepalive)
  Server-->>Barrier: cancellation acknowledged
Loading
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/release-247-preview

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.

@lidge-jun lidge-jun added the maintainer-sponsored Maintainer sponsors this change to an auth, workflow, release, or dependency surface label Sep 7, 2026
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@github-actions github-actions Bot changed the title release: promote 2.47.0-preview.20260908 to preview [WRONG BRANCH] release: promote 2.47.0-preview.20260908 to preview Sep 7, 2026
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

⏳ DRAFT

  • wrong target branch (preview); retarget to dev.

What to do

  • Retarget this PR to dev — all contributions go to dev.

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.

@lidge-jun

Copy link
Copy Markdown
Owner Author

리뷰 · 우선순위 68 / 80

이 PR은 2.47.0 릴리스 후보를 preview 채널로 올리는 승격 PR입니다. 제목의 [WRONG BRANCH] 는 저장소 게이트 봇이 “베이스가 dev 가 아니다”라고 자동으로 붙인 표식입니다. 실제로 이 PR의 베이스는 preview, 헤드는 codex/release-247-preview 이고, 릴리스 승격에서는 preview/main 을 겨냥하는 것이 맞습니다. 본문도 #3927dev 에 들어간 뒤에만 열고, 후보 트리 48ab3e1e6 과 package.json 채널 버전만 다르며, #3925dev 는 이미 2.48.0 open-dev, 스폰서 배치 #3914/#3915 는 제외한다고 못 박았습니다. 지금 로컬 dev HEAD는 09f669a75 입니다.

diff 가 거대해 보이는 이유는 preview 대비 2.47 트레인 전체(코드모드 호스트 계약, 레인 B/C/D, 스폰서 README/SPONSORS.md, release.yml 레지스트리 스모크 복구, GUI·Usage·Orca 등)가 한꺼번에 보이기 때문입니다. 승격 PR을 파일 단위 기능 리뷰로 다시 까는 대상이 아니라, “후보 SHA·버전선·제외 목록·CI 증거”를 확인하는 출구 리뷰입니다. 워크플로 쪽에서는 .github/workflows/release.yml 이 publish 성공 영수증 뒤에만 레지스트리 스모크/GitHub 릴리스를 진행하고, 레지스트리 관측 실패 시 republish 하지 않는 #3864 계열 복구가 포함됩니다. 게이트 봇이 preview 베이스를 잘못 타깃이라고 막는 것은 승격 절차와 충돌하므로, 리뷰어가 “retarget to dev” 안내를 그대로 따르면 안 됩니다.

경로 PR base=preview / title [WRONG BRANCH] - 게이트 봇의 dev-only 가정과 릴리스 승격 절차가 충돌한다. preview 타깃은 의도된 것이다.
경로 의존성 #3927 - 회귀 픽스가 dev 에 머지되기 전에는 이 draft 를 ready/merge 하면 안 된다. 본문도 그렇게 적었다.
경로 package.json 채널 버전 - 후보 48ab3e1 과 트리 동일·버전선만 preview 채널명(2.47.0-preview.20260908)으로 바뀌는지 승격 직전 한 번 더 대조한다.
경로 .github/workflows/release.yml - publish 영수증 없이는 릴리스 생성 금지, 레지스트리 지연은 pending 경고 후 계속, republish 금지. 승격 후 dry-run→live 순서의 안전장치다.
경로 스폰서 #3914/#3915 - 의도적 제외. README/SPONSORS.md 만 들어온 상태와 배치 PR을 혼동하지 않는다.
경로 CI 요구 - 실제 promotion SHA 의 Cross-platform·Service lifecycle·Windows 6샤드·macOS control(lane=all)·Release dry-run 이 본문 조건이다.

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

  • 게이트 봇의 wrong-branch 자동 draft/표식을 릴리스 승격 PR에서 예외 처리할지, 아니면 수동으로 무시하고 진행할지
  • fix: close regression findings before the 2.47.0 release #3927 머지 직후 이 PR head 를 후보에 리베이스/재생성이 필요한지(dev 이동분 반영)
  • preview 태그 날짜 문자열 20260908 을 실제 컷 날짜와 맞출지

너의 추천
#3927dev 에 들어가고 호스트 CI가 초록일 때까지 draft 유지. 그다음 봇의 “retarget to dev” 는 무시하고 preview 승격으로 머지한 뒤, dry-run 통과 확인 후 live publish. #3929(main) 는 preview 검증 다음 순서.

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

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 7, 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-07T17:06:55.072080Z d2ec06b 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.

@lidge-jun
lidge-jun merged commit 7ef13dd into preview Sep 7, 2026
30 of 34 checks passed
@lidge-jun
lidge-jun deleted the codex/release-247-preview branch September 7, 2026 17:05
@lidge-jun lidge-jun changed the title [WRONG BRANCH] release: promote 2.47.0-preview.20260908 to preview release: promote 2.47.0-preview.20260908 to preview Sep 7, 2026
@github-actions github-actions Bot changed the title release: promote 2.47.0-preview.20260908 to preview [WRONG BRANCH] release: promote 2.47.0-preview.20260908 to preview Sep 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintainer-sponsored Maintainer sponsors this change to an auth, workflow, release, or dependency surface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants