Skip to content

[WRONG BRANCH] release: promote 2.47.0 to main - #3929

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

[WRONG BRANCH] release: promote 2.47.0 to main#3929
lidge-jun merged 151 commits into
mainfrom
codex/release-247-main

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 main for 2.47.0. 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 provider support.
    • Added model pricing controls in the dashboard and CLI.
    • Added custom usage date ranges for the dashboard and CLI.
    • Added sub-agent fallback-chain configuration and compatibility guidance.
    • Added configurable reasoning-effort preferences.
    • Added an optional authless Codex Desktop launch setting.
    • Added model picker ordering controls and Pi session-affinity export support.
  • Bug Fixes

    • Improved OAuth cancellation, quota refresh reliability, citation handling, and sidecar response limits.
    • Added fallback handling when native response compaction is unavailable.
  • Documentation

    • Expanded integration, provider, configuration, sponsorship, and troubleshooting documentation.
  • Chores

    • Updated the release version to 2.47.0.

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: dbb9cbe2-27e5-485d-844c-ec9caa35de34

📥 Commits

Reviewing files that changed from the base of the PR and between bba6322 and f9e3515.

⛔ 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 release train bundles many independent changes: code-mode host-contract guidance and recovery annotations, operator-pinned reasoning effort, custom usage time windows, manual per-model pricing, a routed model picker order editor, OAuth login cancellation, an OrcaRouter provider, subagent fallback chains, a Codex Desktop authless toggle, quota auto-refresh hardening, translator-budget accounting for reasoning envelopes, sidecar/citation-marker bounding, Mihomo IPv6 handling, startup-health snapshots, and sponsorship documentation.

Changes

Feature Implementation

Layer / File(s) Summary
Code-mode host contract guidance
src/adapters/exec-tool-result-normalize.ts, src/adapters/cursor/*, src/adapters/kiro.ts, src/adapters/responses-code-mode.ts, src/adapters/tool-catalog-nudge.ts, tests/adapters/*, tests/providers/{cursor,kiro}/*
Adds a pre-call host-contract sentence and post-hoc [recovery: ...] annotation for code-mode exec failures across Responses, Kiro, and Cursor.
Operator-pinned reasoning effort
src/config.ts, src/config/provider-validation.ts, src/types/provider.ts, src/server/effort-policy.ts, src/server/auth-cors.ts, src/server/management/{agent-settings-routes,provider-routes}.ts, src/server/chat-native.ts, tests/codex-integration/model-pinned-effort*
Adds provider/global reasoning-effort pin fields, validation, merge helpers, and management API/native chat wiring.
Custom usage time windows
src/usage/time-range.ts, src/usage/summary.ts, src/server/management/{logs-usage-routes,usage-aggregate-cache}.ts, src/cli/observe.ts, gui/src/usage-time-range.ts, gui/src/pages/Usage.tsx, tests/usage/*, gui/tests/usage-*
Adds inclusive since/until window parsing, filtered aggregation, API/CLI validation, and GUI custom range controls.
Manual model price overrides
src/server/management/model-routes.ts, src/usage/cost.ts, src/cli/models-runtime.ts, gui/src/components/ModelPriceDialog.tsx, tests/server/model-costs-management-api.test.ts, gui/tests/models-price-editor.test.tsx
Adds provider model-cost GET/PUT endpoints, CLI price/set-price, and a GUI pricing dialog; explicit zero overlays now resolve as free.
Model picker order editor
gui/src/model-picker-order.ts, gui/src/components/ModelPickerOrderEditor.tsx, gui/src/pages/Models.tsx, gui/tests/model-picker-order*
Adds identity normalization, drag/keyboard reordering helpers, and a custom routed-order editor component.
Model display-name dialog recovery
gui/src/components/ModelDisplayNameDialog.tsx, gui/tests/models-display-name-editor.test.tsx
Disables editing/reset while a save outcome is unknown, redirecting focus appropriately.
OAuth login cancellation barrier
gui/src/oauth-cancellation-barrier.ts, gui/src/components/use-add-provider-oauth.ts, gui/src/pages/use-providers-oauth.ts, gui/src/components/AddProviderModal.tsx, gui/src/components/add-provider-oauth-pane.tsx, gui/tests/add-provider-oauth-url-leak.test.tsx
Adds a shared cancellation barrier so replacement logins wait for prior cancellation delivery.
OrcaRouter provider
src/oauth/orcarouter.ts, src/oauth/index.ts, src/providers/registry.ts, gui/src/provider-icons.ts, tests/providers/orcarouter-provider.test.ts
Adds API-key and OAuth-PKCE OrcaRouter providers, model discovery, and GitHub Copilot new-model wire defaults.
Subagent fallback chain
gui/src/components/subagents-workspace/*, gui/src/pages/Subagents.tsx, gui/src/i18n/*.ts, gui/tests/subagents-fallback.test.tsx
Adds a fallback model chain editor with polling interval and V2-compatibility warnings.
Codex Desktop authless toggle
gui/src/pages/{dashboard-overview-sections,use-dashboard-data,dashboard-shared}.ts(x), tests/codex-integration/codex-inject.test.ts
Adds codexDesktopAuthless preference, reducer-based settings state, and catalogRefreshPending status.
Quota auto-refresh and warmup
src/codex/{quota-auto-refresh,quota-auto-refresh-state,auth-api,warmup}.ts, tests/codex-integration/codex-quota-auto-refresh*.test.ts
Reworks due-window detection, deadline persistence, and credential-generation guards; adds warmup onCompleted.
Translator budget for reasoning envelopes
src/bridge.ts, src/claude/{inbound,outbound}.ts, src/responses/reasoning-envelope.ts, src/lib/json-byte-size.ts, src/server/claude-messages.ts, tests/responses/reasoning-envelope.test.ts
Adds byte-accounted translator budgets, returning HTTP 413 on overflow instead of unbounded buffering.
Citation marker bounding
src/responses/citation-markers.ts, tests/responses/citation-markers.test.ts
Bounds unterminated citation spans at 4,096 chars instead of pairing mismatched markers.
Sidecar response byte bounding
src/vision/anthropic-describe.ts, src/web-search/anthropic-executor.ts, src/web-search/parse.ts, tests/vision/*, tests/web-search/*
Bounds untrusted sidecar SSE streams and error bodies at 64KiB.
Mihomo IPv6 and OpenCode Go affinity
src/lib/provider-outbound.ts, src/server/chat-completions.ts, src/server/responses/core.ts, src/clients/config-export.ts, tests/providers/{opencode-go-session-header,provider-outbound}.test.ts
Extends TUN fake-IP admission and threads OpenCode Go session affinity headers.
Startup health and key-store scoping
src/server/startup-health-cache.ts, src/providers/key-store.ts, tests/service/autostart-health.test.ts, tests/providers/provider-key-store.test.ts
Adds non-blocking startup-health snapshots; restricts keychain restore to owning provider.
Compaction 404 fallback
src/server/responses/compact.ts, tests/responses/responses-compaction-routing.test.ts
Falls back to a regular Responses turn when native /responses/compact returns 404.

Devlog Planning Records

Layer / File(s) Summary
Devlog plan and delivery records
devlog/_fin/*, devlog/_plan/*
Adds planning, audit, roadmap, and delivery-record documents describing the delegated work streams behind this release.

Documentation Updates

Layer / File(s) Summary
Localized guide and reference documentation
docs-site/src/content/docs/**/*.md(x)
Updates guides/reference across all locales for shipped features.
Structure notes and CLI skills reference
structure/*.md, skills/ocx/references/01_management_surface.md
Documents reasoning pins, host contract, translator budget, and management surface additions.

Release Workflow and Sponsorship Infra

Layer / File(s) Summary
Release workflow publish/verify gating
.github/workflows/release.yml, tests/ci-workflows/ci-workflows.test.ts
Gates registry smoke and release creation on a real publish, with bounded retries and non-fatal pending state.
Sponsorship documentation
SPONSORS.md, README.md, readme/*.md, package.json, scripts/privacy-scan.ts
Adds sponsorship rules, README sponsor sections, and privacy-scan allowlisting.

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

Sequence Diagram(s)

sequenceDiagram
  participant Model
  participant Adapter as Responses/Kiro/Cursor Adapter
  participant HostContractLib as exec-tool-result-normalize
  Model->>Adapter: exec tool call fails (host error)
  Adapter->>HostContractLib: annotateCodeModeHostFailure(text)
  HostContractLib-->>Adapter: text + [recovery: ...] hint
  Adapter-->>Model: annotated tool result
Loading
sequenceDiagram
  participant CLI_GUI as CLI or GUI
  participant LogsUsageRoutes
  participant UsageAggregateCache
  CLI_GUI->>LogsUsageRoutes: GET /api/usage?since&until
  LogsUsageRoutes->>LogsUsageRoutes: parseUsageTimeWindow
  LogsUsageRoutes->>UsageAggregateCache: getFilteredUsageAggregate(filter, window)
  UsageAggregateCache-->>LogsUsageRoutes: windowed summary (customWindow:true)
  LogsUsageRoutes-->>CLI_GUI: report with since/until echoed
Loading
sequenceDiagram
  participant User
  participant AddProviderModal
  participant useAddProviderOAuth
  participant OAuthCancellationBarrier
  participant Server
  User->>AddProviderModal: request new provider login
  AddProviderModal->>useAddProviderOAuth: cancelLoginOAuth(previous)
  useAddProviderOAuth->>OAuthCancellationBarrier: cancelOAuthLogin(apiBase, provider)
  OAuthCancellationBarrier->>Server: POST /api/oauth/login/cancel
  Server-->>OAuthCancellationBarrier: cancelled
  useAddProviderOAuth->>Server: start new login
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-main

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 to main [WRONG BRANCH] release: promote 2.47.0 to main Sep 7, 2026
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

⏳ DRAFT

  • wrong target branch (main); 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

리뷰 · 우선순위 67 / 80

이 PR은 같은 2.47.0 후보를 main(안정) 채널로 올리는 승격 PR입니다. #3928 과 쌍이고, 베이스만 main, 헤드는 codex/release-247-main 입니다. 제목 [WRONG BRANCH] 역시 게이트 봇이 main 타깃을 “dev 로 바꿔라”고 자동 표기한 결과이며, 안정 채널 승격에서는 main 이 맞습니다. 의존성·후보 SHA(48ab3e1e6#3925 open-dev 2.48.0·스폰서 #3914/#3915 제외·관리자 머지가 오너의 릴리스 결정이라는 설명은 #3928 과 같습니다. 로컬 dev 는 여전히 09f669a75 입니다.

main 대비 diff 가 큰 이유도 동일합니다. 2.47 트레인 전체가 main 에 없던 내용으로 보이기 때문입니다. 출구 체크는 (1) #3927 회귀가 이미 dev 에 들어갔는지, (2) 이 트리와 후보 SHA 가 버전선만 다른지, (3) promotion SHA 의 전체 CI·Release dry-run 이 통과했는지, (4) preview(#3928) 쪽에서 레지스트리/런타임 이상이 없었는지입니다. release.yml 의 publish 영수증·레지스트리 pending 복구·republish 금지는 main 라이브 배포에서 더 중요합니다. 게이트 봇의 “retarget to dev” 안내를 따르면 안정 채널 승격이 깨집니다.

경로 PR base=main / title [WRONG BRANCH] - 안정 채널 승격의 의도된 main 타깃이다. 봇의 dev-only 가정과 충돌한다.
경로 순서 #3927#3928(preview) → #3929(main) - 본문이 #3927 선행을 요구한다. preview 검증 없이 main 만 먼저 올리는 것은 비추천이다.
경로 package.json 2.47.0 - open-dev 2.48.0(#3925) 과 섞이지 않게, main 승격 트리는 2.47.0 내용+채널 버전만 담는지 확인한다.
경로 .github/workflows/release.yml - live publish 후 레지스트리 관측 실패 시에도 재publish 하지 않는 계약이 main 에 그대로 실리는지 본다.
경로 스폰서 제외 - #3914/#3915 배치가 main 승격에 섞이지 않았는지 한 번 더 대조한다.
경로 CI - Cross-platform, Service lifecycle, Windows 6샤드, macOS control, Release dry-run 이 실제 promotion SHA 기준이어야 한다.

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

  • preview 채널을 하루(또는 한 컷) 먼저 말린 뒤 main 을 올릴지, 같은 후보를 연속 승격할지
  • 게이트 봇 wrong-branch 표식을 릴리스 PR 예외로 둘지
  • 관리자 머지 권한이 필요한 보호 브랜치 규칙과 “오너 명시 승인” 문구를 운영에서 어떻게 기록할지

너의 추천
#3927 머지 + #3928 preview 검증 다음에만 ready/merge. 봇의 retarget-to-dev 는 무시. dry-run 통과 후 main live. 머지 후 태그/릴리스 노트·npm dist-tag 를 사람이 한 번 눈으로 확인한다.

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

@lidge-jun
lidge-jun marked this pull request as ready for review September 7, 2026 17:01
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner September 7, 2026 17:01
@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:07:34.000957Z f9e3515 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.

@github-actions
github-actions Bot marked this pull request as draft September 7, 2026 17:03
@lidge-jun
lidge-jun marked this pull request as ready for review September 7, 2026 17:05
@lidge-jun
lidge-jun merged commit 6f71931 into main Sep 7, 2026
37 of 41 checks passed
@lidge-jun
lidge-jun deleted the codex/release-247-main branch September 7, 2026 17:05
@lidge-jun lidge-jun changed the title [WRONG BRANCH] release: promote 2.47.0 to main release: promote 2.47.0 to main Sep 7, 2026
@github-actions github-actions Bot changed the title release: promote 2.47.0 to main [WRONG BRANCH] release: promote 2.47.0 to main 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