Skip to content

[WRONG BRANCH] release: promote verified 2.49.0 product tree to main - #4117

Merged
lidge-jun merged 135 commits into
mainfrom
codex/release-249-main-01a08498
Sep 9, 2026
Merged

[WRONG BRANCH] release: promote verified 2.49.0 product tree to main#4117
lidge-jun merged 135 commits into
mainfrom
codex/release-249-main-01a08498

Conversation

@lidge-jun

Copy link
Copy Markdown
Owner

Summary

Promote audited product baseline ad36c7be8913f4367fed0f3fa46acd2224914c7a into main as 2.49.0. The owner explicitly authorized main and preview promotions and instructed these promotion PRs to merge immediately without querying or waiting for pre-merge CI. This is owner-directed PR-only integration, not an independent approving review or a claim that every PR check passed.

This is the stable 2.49.0 publication candidate. Actual publication follows the required post-promotion checks and release dry-run.

Development version pre-move #4115 is already merged: dev carries 2.50.0; no 2.50 package is being released. This branch preserves the original source commits and authors, including the composed-schema repair #4113.

Verification

  • Promotion head 62849dfa69c7d53ddacd9b67b03cafe98ac23386 is tree-identical to the audited product baseline. Preview conflict resolution was confined to that version line; main composed without conflict.
  • Full development CI 34348082430 passed 26/26 jobs, including all Windows shards and macOS control. Service 34348086831 passed 3/3 on that same baseline.
  • Product proof reuses this exact-tree baseline; no new full matrix on the promotion SHA is claimed. Its own push-event CI and service checks must pass after merge before publication. Release uses expected-sha and a dry-run before publishing.
  • Local product tests/typecheck/build/install: NOT RUN under the owner restriction.
  • enforce-target permits dev/child bases and may reject this maintainer release promotion. This known target-policy exception is explicitly authorized for main/preview, as in [WRONG BRANCH] release: promote 2.48.0 to preview #4010/[WRONG BRANCH] release: promote 2.48.0 to main #4011; no rule or check is modified and a failing check is not relabeled green.
  • Inherited GUI visual baseline below shows the compaction control layout; its explanatory hint predates the current source text. Current English/Korean hint changes were source-reviewed and covered by remote checks; no fresh local render is claimed.

Inherited compaction control visual baseline

Checklist

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

lidge-jun and others added 30 commits September 8, 2026 19:14
chore(release): open dev at 2.49.0 before releasing 2.48.0
docs(devlog): archive the 2.48.0 release train record
The carried CodeBuddy commits predate the tests/ modularization, so their
two test files landed at the tests/ root where the layout guard rejects
them. Move them under tests/providers and register both in layout.json
and the expected-layout fixture.
Same drift as the CodeBuddy layer: the carried Qoder commit predates the
tests/ modularization. Move both files under tests/providers and register
them in layout.json and the expected-layout fixture.
…rors

The Qoder catalog branch was written against the pre-#3601 shape of
provider-fetch.ts, so it merged cleanly while dropping captured.effectiveAlias
from all four hint applications; a Qoder row would carry whatever alias the
cached row already held instead of the decision captured at flight admission.

The shared coding-agent result classifier matched the bare word
authentication anywhere in vendor text, turning transient upstream wording
into a 401 credential verdict that drives reauth messaging and key-pool
rotation. Anchor it to credential phrasing; the existing 'Not logged in;
invalid token' fixture still classifies as 401.
…3989)

Configure `sourcePreservingYaml: { path: ["providers", "opencodex"] }` for
Hermes Agent in `INTEGRATION_CLIENTS`.

Hermes Agent is a multi-provider autonomous agent whose configuration
(`~/.hermes/config.yaml`) typically hosts multiple providers, vision models,
and comments. Previously, Hermes was registered without source preservation,
causing `classifyIntegration` to fail-closed (`state: "conflict", reason: "foreign-edit"`)
whenever a user modified sibling providers or comments. In the dashboard UI,
this locked the toggle and threatened a destructive full-file restore ("Replace").

By giving Hermes source-preserving YAML semantics (joining OMP and DSH):
- OpenCodex mutates only `providers.opencodex` in-place.
- Sibling provider configurations, user comments, and formatting remain untouched.
- Unit and invariant test suites updated with dedicated regression coverage.
- Public documentation in `guides/integrations.md` updated accordingly.

Closes #3989

(cherry picked from commit a1fe9ca)
…ss Gemini and CCA

Google Gemini (via Cloud Code Assist / Antigravity, Vertex AI, and AI Studio)
rejects requests whose conversation history ends on a model turn with HTTP 400
INVALID_ARGUMENT ("Requests ending with a model turn are not supported.").

Previously, the continue nudge was only attached for Claude-on-Antigravity under
the assumption that Gemini natively accepts model-tail histories. In practice,
autonomous multi-turn loops (such as subagent orchestration and continuation turns
in Codex CLI) produce histories ending in an assistant message, triggering the 400.

This patch:
- Injects a synthetic user `(continue)` nudge in `messagesToGeminiFormat` whenever
  the reconstructed `contents` ends with `role: "model"` or is empty.
- Broadens the post-replay Antigravity tail check to cover all Google models.
- Updates unit tests to verify that Gemini 3.7 Flash, Gemini 3.8 Flash, and
  AI Studio endpoints all receive the continue nudge on model-tail contexts.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
(cherry picked from commit 1837b8f)
qoder and qoder-cn landed without an icon alias or display name, so the
dashboard drew them as an initial tile with a raw config id underneath;
codebuddy and codebuddy-cn had the same gap. Every other first-class provider
carries both.

Qoder ships its own square symbol as the declared site icon, byte-identical
across qoder.com, qoder.cn, qoder.com.cn and the schema.org Organization
logo, and neither terms document restricts its use; it is committed
verbatim and wired to both ids. CodeBuddy keeps the initials tile on purpose:
section 9.3 of the Tencent service agreement forbids using Tencent brand
features under any circumstances without written consent. Both decisions,
with sources and clauses, are recorded in the provider-icons README so the
refusal is not silently re-litigated.

Also publishes the Qoder Global/CN section in the docs-site providers guide
(the repo-level docs/qoder-cli-provider.md is not built) and lists the
qoder adapter in the configuration reference.
…ervation

The English guide now lists Hermes with OMP and DSH as source-preserving
YAML writers; the French and Traditional Chinese pages still named it among
the clients whose switch locks on sibling edits, contradicting runtime
behaviour.
The carried change added the nudge to messagesToGeminiFormat for every
Google mode and also widened the post-replay Antigravity check from
Claude-only to all models, leaving two injection sites on one request. The
second is only a no-op while nothing between them reshapes the tail; the
signature sanitizer can. Drop the post-replay copy so the formatter owns the
invariant.
feat(provider): add official CodeBuddy Global and CN providers (carry #3340)
feat(provider): add Qoder Global PAT provider (carry #3349)
feat(provider): add Qoder CN PAT provider (carry #3350)
feat(gui): give Qoder its brand mark and name the CLI providers
feat(integrations): support source-preserving YAML for Hermes Agent (carry #3990)
fix(google): guard model-tail histories with user continue nudge across Gemini and CCA (carry #3988)
Roadmap, measured conflict map, mark sourcing decision, two audit rounds,
secondary PR dispositions, and the delivery record for #4026-#4031: six
layers merged bottom-up into dev at e2bf167 after a green lane=all run
(34231255231) on the top head 16d49ce. Local suite/typecheck/build were
deliberately NOT RUN; hosted CI is the only execution proof. Closed as
_fin because every outcome it records is already in public history.
docs(devlog): record the provider runtime stack landing
* test(lib): make idle deadline reset timing deterministic

Carried from #4041 (author luvs01) for maintainer-side CI and sequential integration.

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

* test: stabilize Windows fixture waits and case cleanup

Carried from #4015 (author luvs01) for maintainer-side CI and sequential integration.

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

* test(codex): verify timeout termination without racing child timers

Carried from #4012 (author luvs01) for maintainer-side CI and sequential integration.

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

* test(codex): hold prompt-probe admission through document edits

Carried from #4014 (author luvs01) for maintainer-side CI and sequential integration.

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

* test(clients): bound transaction fixture child completion

Carried from #4004 (author luvs01) for maintainer-side CI and sequential integration.
Closes #4003

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

* fix(codex): retain overlapping multiline TOML terminators

Carried from #4039 (author luvs01) for maintainer-side CI and sequential integration.

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

* fix(cli): reject unsupported caps and report ignored legacy values

Carried from #4043 (author luvs01) for maintainer-side CI and sequential integration.

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

* fix(codex): share trigger-only delegation guidance with v1

Carried from #4034 (author luvs01) for maintainer-side CI and sequential integration.

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

* fix(codex): preserve settings when journal injection hashes are missing

Carried from #4006 (author luvs01) for maintainer-side CI and sequential integration.
Closes #4005

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

* docs(cli): note that --injection still accepts none and minimal

CodeRabbit review on #4049: the effort reference documents caps only, so the
new rejection of none/minimal reads as a global removal. --injection keeps
both values because it sets the injection effort rather than a cap.

---------

Co-authored-by: t <a@b.com>
Co-authored-by: luvs01 <27862058+luvs01@users.noreply.github.com>
…rage, history) (#4051)

* fix(codex): keep Spark five-hour quota model-scoped

Carried from #4018 (author cb8010d6) for maintainer-side CI and sequential integration.
Closes #4017

Co-authored-by: cb8010d6 <53855466+cb8010d6@users.noreply.github.com>

* fix(codex): retain Spark quota on partial header updates

Carried from #4008 (author cb8010d6) for maintainer-side CI and sequential integration.
Closes #4007

Co-authored-by: cb8010d6 <53855466+cb8010d6@users.noreply.github.com>

* fix(codex): invalidate app-server observations at catalog boundaries

Carried from #3981 (author yansigit) for maintainer-side CI and sequential integration.

Co-authored-by: yansigit <44089734+yansigit@users.noreply.github.com>

* fix(web-search): stop inactivity timing after terminal events

Carried from #3979 (author yansigit) for maintainer-side CI and sequential integration.

Co-authored-by: yansigit <44089734+yansigit@users.noreply.github.com>

* fix(responses): strip Muse web_search fields on direct Meta

Carried from #3964 (author ildunari) for maintainer-side CI and sequential integration.

Co-authored-by: ildunari <95185577+ildunari@users.noreply.github.com>

* fix: preserve combo capabilities and skip referenced archives

Carried from #3863 (author x3M3x) for maintainer-side CI and sequential integration.

Co-authored-by: x3M3x <98298256+x3M3x@users.noreply.github.com>

* fix(codex): recover ocx1-compacted threads for native replay

Carried from #3920 (author cb8010d6) for maintainer-side CI and sequential integration.
Closes #3916

Co-authored-by: cb8010d6 <53855466+cb8010d6@users.noreply.github.com>

---------

Co-authored-by: t <a@b.com>
Co-authored-by: cb8010d6 <53855466+cb8010d6@users.noreply.github.com>
Co-authored-by: yansigit <44089734+yansigit@users.noreply.github.com>
Co-authored-by: ildunari <95185577+ildunari@users.noreply.github.com>
Co-authored-by: x3M3x <98298256+x3M3x@users.noreply.github.com>
…lback test (#4053)

* test(cli): make stale-port status fixture deterministic

Carried from #3980 (author yansigit) for maintainer-side CI and sequential integration.

Co-authored-by: yansigit <44089734+yansigit@users.noreply.github.com>

* refactor(router): isolate API-key selection capture

Carried from #3897 (author parkjs101) for maintainer-side CI and sequential integration.
Closes #3894

Co-authored-by: parkjs101 <93533648+parkjs101@users.noreply.github.com>

* docs: retire the historical dashboard capture pack

Carried from #3963 (author luvs01) for maintainer-side CI and sequential integration.

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

* refactor(gui): stabilize model feedback callback dependencies

Carried from #3984 (author yansigit) for maintainer-side CI and sequential integration.

Co-authored-by: yansigit <44089734+yansigit@users.noreply.github.com>

* test(gui): pin the publishFeedback callback identity

#3984 changes publishFeedback to a useCallback and adds it to saveDisplayName's
dependency array, but shipped without coverage, so the hygiene gate flags
missing_regression_test. This source-oracle test asserts both halves and fails
on dev without the fix (0 pass / 2 fail), so the suppression cannot come back
unnoticed.

Co-authored-by: yansigit <44089734+yansigit@users.noreply.github.com>

* chore(assets): file the #3984 screenshot with the others

#3984 added its review screenshot under a new assets/pr-screenshots/ directory.
The repository's nineteen existing PR screenshots all live in
docs-site/public/pr-screenshots/, so this moves it there and keeps the new
top-level directory out of the tree.

Co-authored-by: yansigit <44089734+yansigit@users.noreply.github.com>

---------

Co-authored-by: t <a@b.com>
Co-authored-by: yansigit <44089734+yansigit@users.noreply.github.com>
Co-authored-by: parkjs101 <93533648+parkjs101@users.noreply.github.com>
Co-authored-by: luvs01 <27862058+luvs01@users.noreply.github.com>
…streamAborted

Add two groups of regression tests for the usage-marker parity criterion
in devlog/_plan/260906_opaque_transport_finality/010_failure_boundaries.md:

tee path (consumeForInspection / stream-aborted-marker.test.ts):
- bare { type: "error" } SSE event followed by clean EOF → onTerminal("failed", 502)
  with no streamAborted on the persisted attempt (semantic failure, not a read reset)
- read error following a bare error event → streamAborted stays true (onReadError path)

eager path (relaySseEagerBounded / relay-eager.test.ts, 090-13):
- bare error frame + clean upstream EOF → onSynthetic receives ("failed", "upstream_error")
  so core.ts onSynthetic can record a semantic failed status without streamAborted

No source changes; all existing tests continue to pass. The implementation
already handles these paths correctly in relay.ts and relay-eager.ts;
these tests make the contract explicit and regression-proof.
lidge-jun and others added 20 commits September 9, 2026 19:54
…-20260909

fix(transport): pin manual redirects at upstream dispatch
fix(server): honor rejected identity checks during port reclaim
oauth/xai: honor Retry-After and stop retrying aborted token requests
…dation

oauth/xai: pin discovery endpoints to trusted auth hosts and reject userinfo
…stream-expiry

fix(server): close expired dashboard selection streams quietly when no frames are queued
…-windows

test(config): platform-policy readiness budget for the config-lock holder child, unmasked readiness failures
fix(codex): restore main policy binding after owned startup
…down

fix(codex): fall back to caller main during Pool cooldown
…-20260909

fix(stop): confirm shared teardown before skipping parent restoration
…am-evidence

fix(logs): persist transport finality evidence
…-carry

fix(auth): keep credentials scoped to the final routed provider (carry of #4081)
The paragraph excluded custom providers by name, but isCanonicalOpenAiForwardProvider classifies on adapter, auth mode and destination, so a custom-named forward entry pointing at the ChatGPT backend takes the same public channel. It also separates the doctor hint, which inspects only the built-in openai row, from the endpoint behaviour it describes.
…rrow the object

Dropping a regex-keyed matcher moves its keys to additionalProperties. On a closed object that forbids or re-constrains them, and a dictionary tool whose only matcher was regex-keyed admits nothing once minProperties is 1. Such objects now pass through as written, so an ECMA-compatible destination keeps working and an incompatible one reports the regex instead of receiving an unsatisfiable schema.
…ly warning

With a user-owned root openai_base_url the client-compaction path still writes the opencodex table, so the old warning misdescribed the file: it claimed nothing was injected and asked the operator to delete a valid setting, while the history line claimed those threads still reached the proxy. That configuration now reports the table it wrote and says the openai-tagged threads follow the operator destination. The setting is never overwritten and no session history is rewritten.
…guidance

feat(doctor): explain ChatGPT public endpoint latency
feat(codex): opt into client-side compaction
fix(openai): drop tool-schema patterns Python re cannot compile
Keep regex-keyed schemas and nonmonotone subtrees unchanged; retain scalar Artifact compatibility in ordinary positive positions.

Co-authored-by: itismyfield <itismyfield@users.noreply.github.com>
…schemas

fix(openai): preserve composed tool schema contracts
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner September 9, 2026 12:28
@coderabbitai

coderabbitai Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 328 files, which is 28 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: 9b37bfa5-a1ee-4480-bc63-53e4ee3b18b5

📥 Commits

Reviewing files that changed from the base of the PR and between 9a27e86 and 62849df.

⛔ Files ignored due to path filters (49)
  • .github/pr-assets/3863-storage-skip-referenced.png is excluded by !**/*.png
  • .github/pr-assets/muse-spark-meta-search-content-types-400.jpg is excluded by !**/*.jpg
  • assets/pr-screenshots/client-compaction-dashboard.png is excluded by !**/*.png
  • assets/sponsors/orcarouter-overview-mobile.png is excluded by !**/*.png
  • assets/sponsors/orcarouter-overview.png is excluded by !**/*.png
  • assets/sponsors/orcarouter-picker.png is excluded by !**/*.png
  • assets/sponsors/orcarouter-readme.png is excluded by !**/*.png
  • assets/sponsors/orcarouter.png is excluded by !**/*.png
  • assets/sponsors/packycode-overview-mobile.png is excluded by !**/*.png
  • assets/sponsors/packycode-overview.png is excluded by !**/*.png
  • assets/sponsors/packycode-picker.png is excluded by !**/*.png
  • assets/sponsors/packycode-readme.png is excluded by !**/*.png
  • assets/sponsors/packycode.png is excluded by !**/*.png
  • bun.lock is excluded by !**/*.lock
  • devlog/_fin/260908_provider_runtime_stack/assets/031_l4_provider_marks.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/011_sidebar_footer_after.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/011_star_in_update_dialog.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/021_dashboard_after.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/021_startup_autostart_row.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/031_models_after.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/031_models_disclosures_open.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/041_integrations_after.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/051_codex_set_after.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/051_codex_set_more_open.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/061_usage_after.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/071_startup_after.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/081_subagents_after.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/codex-set_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/dashboard_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/dashboard_models_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/dashboard_providers_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/integrations_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/logs_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/logs_debug_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/models_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/models_combos_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/models_compatibility_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/models_routing_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/providers_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/startup_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/storage_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/subagents_1440.png is excluded by !**/*.png
  • devlog/_plan/260904_dashboard_minimal/assets/usage_1440.png is excluded by !**/*.png
  • devlog/_plan/260909_usage_custom_range_disclosure/assets/010_before.png is excluded by !**/*.png
  • devlog/_plan/260909_usage_custom_range_disclosure/assets/020_after_collapsed.png is excluded by !**/*.png
  • devlog/_plan/260909_usage_custom_range_disclosure/assets/030_after_open.png is excluded by !**/*.png
  • docs-site/public/pr-screenshots/3984-model-feedback.png is excluded by !**/*.png
  • gui/public/provider-icons/packycode.svg is excluded by !**/*.svg
  • gui/public/provider-icons/qoder.svg is excluded by !**/*.svg
📒 Files selected for processing (328)
  • .github/workflows/cleanup-orphaned-workflows.yml
  • Dockerfile
  • README.md
  • SPONSORS.md
  • devlog/_fin/260908_provider_runtime_stack/000_plan.md
  • devlog/_fin/260908_provider_runtime_stack/010_layer_plan.md
  • devlog/_fin/260908_provider_runtime_stack/011_conflict_map.md
  • devlog/_fin/260908_provider_runtime_stack/012_mark_sourcing.md
  • devlog/_fin/260908_provider_runtime_stack/013_secondary_dispositions.md
  • devlog/_fin/260908_provider_runtime_stack/020_wp2_carry.md
  • devlog/_fin/260908_provider_runtime_stack/030_wp3_marks_docs.md
  • devlog/_fin/260908_provider_runtime_stack/040_wp4_publish_merge.md
  • devlog/_fin/260908_provider_runtime_stack/050_delivery_record.md
  • devlog/_fin/260908_provider_runtime_stack/060_ledger.md
  • devlog/_fin/260908_release_248/000_plan.md
  • devlog/_fin/260908_release_248/010_release.md
  • devlog/_fin/260908_release_248/020_progress.md
  • devlog/_fin/260908_release_248/030_wp2_regression_review.md
  • devlog/_fin/260908_release_248/040_wp3_promotion.md
  • devlog/_fin/260908_release_248/050_wp4_publication.md
  • devlog/_plan/260904_dashboard_minimal/000_inventory.md
  • devlog/_plan/260904_dashboard_minimal/001_subagent_opinions.md
  • devlog/_plan/260904_dashboard_minimal/assets/codex-set_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/codex-set_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/dashboard_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/dashboard_models_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/dashboard_models_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/dashboard_providers_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/dashboard_providers_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/dashboard_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/integrations_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/integrations_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/logs_debug_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/logs_debug_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/logs_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/logs_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/models_combos_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/models_combos_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/models_compatibility_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/models_compatibility_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/models_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/models_routing_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/models_routing_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/models_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/providers_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/providers_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/startup_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/startup_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/storage_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/storage_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/subagents_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/subagents_text.txt
  • devlog/_plan/260904_dashboard_minimal/assets/usage_interactive.txt
  • devlog/_plan/260904_dashboard_minimal/assets/usage_text.txt
  • devlog/_plan/260907_router_selection_capture/010_implementation.md
  • devlog/_plan/260908_d_group_test_infra_stack/000_plan.md
  • devlog/_plan/260908_d_group_test_infra_stack/001_audit_record.md
  • devlog/_plan/260908_d_group_test_infra_stack/010_phase1_stack_build.md
  • devlog/_plan/260908_d_group_test_infra_stack/020_phase2_publish.md
  • devlog/_plan/260908_d_group_test_infra_stack/030_phase3_merge_and_settle.md
  • devlog/_plan/260908_sponsor_overview/010_overview.md
  • devlog/_plan/260909_config_mutation_lock_windows/000_plan.md
  • devlog/_plan/260909_usage_custom_range_disclosure/000_plan.md
  • devlog/_plan/260909_usage_custom_range_disclosure/010_audit.md
  • devlog/_plan/260909_xai_oauth_retry_hardening/000_plan.md
  • devlog/_plan/260909_xai_oauth_retry_hardening/010_phase1_retry_after_abort.md
  • devlog/_plan/260909_xai_oauth_retry_hardening/020_phase2_endpoint_validation.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/sub-agent-surface.md
  • docs-site/src/content/docs/fr/reference/cli/lifecycle.md
  • docs-site/src/content/docs/fr/reference/proxy-formats.md
  • docs-site/src/content/docs/guides/claude-code.md
  • docs-site/src/content/docs/guides/codex-app-models.md
  • docs-site/src/content/docs/guides/codex-integration.md
  • docs-site/src/content/docs/guides/integrations.md
  • docs-site/src/content/docs/guides/providers.md
  • docs-site/src/content/docs/guides/sub-agent-surface.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/guides/sub-agent-surface.md
  • docs-site/src/content/docs/ja/reference/cli/lifecycle.md
  • docs-site/src/content/docs/ja/reference/proxy-formats.md
  • 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/sub-agent-surface.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/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/providers.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/guides/sub-agent-surface.md
  • docs-site/src/content/docs/ru/reference/cli/lifecycle.md
  • docs-site/src/content/docs/ru/reference/proxy-formats.md
  • docs-site/src/content/docs/tr/guides/codex-integration.md
  • docs-site/src/content/docs/tr/guides/sub-agent-surface.md
  • docs-site/src/content/docs/tr/reference/cli/lifecycle.md
  • docs-site/src/content/docs/tr/reference/proxy-formats.md
  • docs-site/src/content/docs/zh-cn/guides/codex-integration.md
  • docs-site/src/content/docs/zh-cn/guides/sub-agent-surface.md
  • docs-site/src/content/docs/zh-cn/reference/cli/lifecycle.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/integrations.md
  • docs-site/src/content/docs/zh-tw/guides/sub-agent-surface.md
  • docs-site/src/content/docs/zh-tw/reference/cli/lifecycle.md
  • docs-site/src/content/docs/zh-tw/reference/proxy-formats.md
  • docs/qoder-cli-provider.md
  • gui/public/provider-icons/README.md
  • gui/src/components/provider-catalog/ProviderCatalog.tsx
  • gui/src/components/provider-catalog/provider-presets.ts
  • gui/src/components/provider-workspace/ProviderDetails.tsx
  • gui/src/components/provider-workspace/ProviderOverview.tsx
  • gui/src/components/provider-workspace/ProviderSponsor.tsx
  • 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/pages/Models.tsx
  • gui/src/pages/Providers.tsx
  • gui/src/pages/Storage.tsx
  • gui/src/pages/Usage.tsx
  • gui/src/pages/dashboard-overview-sections.tsx
  • gui/src/pages/dashboard-shared.ts
  • gui/src/pages/use-dashboard-data.ts
  • gui/src/provider-icons.ts
  • gui/src/styles.css
  • gui/src/styles/provider-workspace-shell.css
  • gui/tests/provider-catalog-sponsor-pinning.test.ts
  • gui/tests/provider-icons.test.ts
  • gui/tests/provider-sponsor-overview.test.tsx
  • gui/tests/usage-custom-range.test.tsx
  • gui/tests/vision-sidecar-dashboard.test.tsx
  • package.json
  • scripts/test-layout/layout.json
  • src/adapters/anthropic.ts
  • src/adapters/codebuddy/adapter.ts
  • src/adapters/codebuddy/profiles.ts
  • src/adapters/coding-agent/profile.ts
  • src/adapters/coding-agent/protocol.ts
  • src/adapters/coding-agent/turn.ts
  • src/adapters/google.ts
  • src/adapters/mimo-free.ts
  • src/adapters/openai-chat.ts
  • src/adapters/openai-responses.ts
  • src/adapters/qoder/adapter.ts
  • src/adapters/qoder/live-models.ts
  • src/adapters/qoder/profiles.ts
  • src/adapters/registry.ts
  • src/adapters/responses-tool-schema.ts
  • src/cli/dispatch.ts
  • src/cli/doctor.ts
  • src/cli/effort.ts
  • src/cli/help.ts
  • src/cli/index.ts
  • src/cli/provider-runtime.ts
  • src/cli/registry.ts
  • src/cli/system-command.ts
  • src/cli/usage-report.ts
  • src/codex/account-lifecycle.ts
  • src/codex/auth-api.ts
  • src/codex/auth-collision.ts
  • src/codex/auth-context.ts
  • src/codex/catalog/provider-fetch.ts
  • src/codex/inject.ts
  • src/codex/internal/catalog-writer.ts
  • src/codex/journal.ts
  • src/codex/model-cache.ts
  • src/codex/native-profile-startup.ts
  • src/codex/native-profile-store.ts
  • src/codex/ocx-compaction-history.ts
  • src/codex/project-config-warnings.ts
  • src/codex/quota.ts
  • src/codex/reserve-availability.ts
  • src/codex/runtime.ts
  • src/codex/sync.ts
  • src/config.ts
  • src/images/loop.ts
  • src/images/xai-video-client.ts
  • src/integrations/registry.ts
  • src/lib/process-control.ts
  • src/lib/upstream-retry.ts
  • src/oauth/chatgpt.ts
  • src/oauth/xai.ts
  • src/providers/api-key-selection-capture.ts
  • src/providers/api-key-selection.ts
  • src/providers/caller-authorization.ts
  • src/providers/codebuddy-models.ts
  • src/providers/derive.ts
  • src/providers/free-directory.ts
  • src/providers/openai-sidecar.ts
  • src/providers/qoder-models.ts
  • src/providers/registry.ts
  • src/responses/compaction.ts
  • src/responses/task-input.ts
  • src/router.ts
  • src/server/chat-completions.ts
  • src/server/claude-messages.ts
  • src/server/images.ts
  • src/server/management-api.ts
  • src/server/management/account-selection-stream.ts
  • src/server/management/config-routes.ts
  • src/server/management/logs-usage-routes.ts
  • src/server/management/native-integration-routes.ts
  • src/server/management/provider-routes.ts
  • src/server/port-reclaim.ts
  • src/server/request-log.ts
  • src/server/responses/collaboration.ts
  • src/server/responses/core.ts
  • src/server/responses/fetch-helpers.ts
  • src/server/responses/policy-fallback.ts
  • src/service.ts
  • src/storage/cleanup.ts
  • src/types/config.ts
  • src/usage/log.ts
  • src/vision/anthropic-describe.ts
  • src/web-search/anthropic-executor.ts
  • src/web-search/loop.ts
  • src/web-search/progress-stream.ts
  • structure/01_runtime.md
  • structure/02_config-and-codex-home.md
  • 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/adapter-buffered-tool-conformance.test.ts
  • tests/adapters/adapter-registry-authority.test.ts
  • tests/adapters/adapter-tool-conformance.test.ts
  • tests/adapters/anthropic/anthropic-error-stop-reason.test.ts
  • tests/adapters/anthropic/anthropic-quota-dispatch.test.ts
  • tests/adapters/google/google-claude-prefill-guard.test.ts
  • tests/adapters/openai/openai-chat-hardening.test.ts
  • tests/ci-workflows/install-scripts.test.ts
  • tests/cli/cli-effort.test.ts
  • tests/cli/cli-headless-parity.test.ts
  • tests/cli/cli-help.test.ts
  • tests/cli/cli-management-auth.test.ts
  • tests/cli/cli-restore-back.test.ts
  • tests/cli/cli-start-journal-order.test.ts
  • tests/cli/cli-status-json.test.ts
  • tests/cli/cli-usage-report.test.ts
  • tests/clients/client-connect.test.ts
  • tests/clients/integrations-state.test.ts
  • tests/clients/integrations-writer.test.ts
  • tests/codex-integration/bearer-admission-routed-provider.test.ts
  • tests/codex-integration/catalog-hub-context-window.test.ts
  • tests/codex-integration/codex-auth-context.test.ts
  • tests/codex-integration/codex-catalog-restore.test.ts
  • tests/codex-integration/codex-catalog.test.ts
  • tests/codex-integration/codex-composed-acceptance.test.ts
  • tests/codex-integration/codex-inject-integration.test.ts
  • tests/codex-integration/codex-inject.test.ts
  • tests/codex-integration/codex-journal.test.ts
  • tests/codex-integration/codex-models-cache-invalidate.test.ts
  • tests/codex-integration/codex-prompt-route.test.ts
  • tests/codex-integration/codex-quota-parser-parity.test.ts
  • tests/codex-integration/codex-retained-root-serialization.test.ts
  • tests/codex-integration/codex-routing.test.ts
  • tests/codex-integration/codex-runtime.test.ts
  • tests/codex-integration/codex-spark-visibility.test.ts
  • tests/codex-integration/doctor.test.ts
  • tests/codex-integration/history-ocx-compaction-recovery.test.ts
  • tests/codex-integration/main-account-hard-lock-auth.test.ts
  • tests/codex-integration/multi-agent-compat.test.ts
  • tests/codex-integration/native-profile-processes.test.ts
  • tests/codex-integration/project-config-warnings.test.ts
  • tests/codex-integration/reserve-availability.test.ts
  • tests/config/config-mutation-lock.test.ts
  • tests/config/settings-stream-mode.test.ts
  • tests/fixtures/parent-stop-runner.ts
  • tests/fixtures/test-layout-expected.json
  • tests/gui/integrations-invariants.test.ts
  • tests/gui/models-feedback-callback.test.ts
  • tests/helpers/adapter-conformance/wire-drivers.ts
  • tests/helpers/bounded-auth-read-child.ts
  • tests/helpers/main-account-policy-startup-child.ts
  • tests/images/loop.test.ts
  • tests/lib/abort-idle-deadline.test.ts
  • tests/lib/credential-redirect-guard.test.ts
  • tests/lib/process-control-graceful.test.ts
  • tests/oauth/chatgpt-oauth.test.ts
  • tests/oauth/oauth-accounts-api.test.ts
  • tests/providers/api-key-selection-capture.test.ts
  • tests/providers/codebuddy-adapter.test.ts
  • tests/providers/codebuddy-protocol.test.ts
  • tests/providers/mimo-free-provider.test.ts
  • tests/providers/muse-spark-web-search-compat.test.ts
  • tests/providers/provider-connection-test.test.ts
  • tests/providers/provider-registry-parity.test.ts
  • tests/providers/qoder-adapter.test.ts
  • tests/providers/qoder-live-models.test.ts
  • tests/providers/sponsor-presets.test.ts
  • tests/providers/xai/grok-lifecycle.test.ts
  • tests/providers/xai/xai-oauth-retry.test.ts
  • tests/responses/openai-responses-passthrough.test.ts
  • tests/responses/responses-compaction-routing.test.ts
  • tests/responses/responses-parser.test.ts
  • tests/routing/combo-child-headers.test.ts
  • tests/routing/routing-policy-fallback.test.ts
  • tests/routing/subagent-fallback-handle-responses.test.ts
  • tests/server/port-reclaim.test.ts
  • tests/server/relay-eager.test.ts
  • tests/server/server-combo-failover-e2e.test.ts
  • tests/server/server-images.test.ts
  • tests/server/server-xai-responses-streaming.test.ts
  • tests/server/stream-aborted-marker.test.ts
  • tests/server/v2-agent-message-failfast.test.ts
  • tests/service/stop-deferred-teardown.test.ts
  • tests/storage/storage-cleanup.test.ts
  • tests/usage/request-log.test.ts
  • tests/usage/usage-aggregate-cache.test.ts
  • tests/videos/xai-video-client.test.ts
  • tests/vision/vision-anthropic.test.ts
  • tests/web-search/web-search-anthropic.test.ts
  • tests/web-search/web-search-progress-stream.test.ts
  • tests/web-search/web-search.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 github-actions Bot added the intake: hygiene-blocked Deterministic PR hygiene checks failed label Sep 9, 2026
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

⚠️ Deterministic hygiene checks failed.

  • missing_coauthor_credit — This pull request says it reimplements, supersedes, carries, or rebases another author's pull request, but no Co-authored-by trailer names that author. Prose in a commit body is not read by anything; the trailer is what GitHub counts. Add it to the description or a commit, or obtain attribution-approved. Paths: #3340, #3349, #3350.

@lidge-jun
lidge-jun merged commit 2f3f736 into main Sep 9, 2026
32 of 36 checks passed
@lidge-jun
lidge-jun deleted the codex/release-249-main-01a08498 branch September 9, 2026 12:29
@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

⏳ DRAFT

  • wrong target branch (main); retarget to dev. hygiene: missing_coauthor_credit.

What to do

  • Retarget this PR to dev — all contributions go to dev.
  • Fix missing_coauthor_credit — This pull request says it reimplements, supersedes, carries, or rebases another author's pull request, but no Co-authored-by trailer names that author. Prose in a commit body is not read by anything; the trailer is what GitHub counts. Add it to the description or a commit, or obtain attribution-approved. Paths: #3340, #3349, #3350.

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 changed the title release: promote verified 2.49.0 product tree to main [WRONG BRANCH] release: promote verified 2.49.0 product tree to main Sep 9, 2026
@lidge-jun

Copy link
Copy Markdown
Owner Author

리뷰 · 우선순위 73 / 80

이 PR은 같은 제품 기준선 ad36c7be8913f4367fed0f3fa46acd2224914c7amain(안정) 채널로 올려 정식 2.49.0을 만드는 승격이다. #4116과 쌍이고, 베이스만 main, promotion head는 62849dfa69c7d53ddacd9b67b03cafe98ac23386다. 기준선과 비교하면 버전선이 안정 2.49.0으로 맞춰질 뿐이고, 본문도 트리 동일·composed-schema 수리 #4113 보존·원저자 커밋 유지를 강조한다. 로컬 dev HEAD는 57077ca32(package 2.50.0, #4115 open-dev)라서, 이 컷은 dev tip이 아니라 그 직전 제품 트리를 안정 채널로 내보내는 출구다.

main 대비 diff가 큰 이유도 #4116과 같다. 2.48.0(#4011) 이후 dev에만 있던 제공자 런타임 스택·기여자 열차·compaction·tool-schema·auth 스코프·Bun 1.4.2 등이 한꺼번에 보이기 때문이다. 제품 코드 리뷰를 여기서 다시 하는 단계가 아니다. 출구 체크는 (1) 기준선 SHA와 버전선, (2) 후보 full-lane CI(34348082430 / service 34348086831) 재사용 주장의 범위, (3) 머지 후 push-event CI·Service lifecycle, (4) release.yml expected-sha + dry-run 후 live publish, (5) preview(#4116)와의 발행 역할 분담이다. enforce-target 실패·[WRONG BRANCH]·intake: hygiene-blocked는 preview와 같은 게이트 반응이며, owner가 pre-merge CI 대기 없이 즉시 머지하라고 명시한 예외다. 봇 안내대로 dev로 돌리면 안정 채널 승격이 깨진다.

지금 체크아웃 기준으로 dev가 최적화하는 방향은 이미 2.50.0 open-dev 이후다. #4115로 버전선만 먼저 열어 두었고, 제품 tip은 여전히 #4113/#4002 계열 위에 있다. 열려 있는 후속 PR(#4114 operator-owned routing, #4111 usage totals, #4105 combo quota, #4100 auto-review model 등)은 이번 main 컷에 끼워 넣지 않는 편이 맞다. types.ts/config.ts 대분할 캠페인과 충돌하는 내용도 이 승격 범위에는 없다.

순서가 핵심이다. 리뷰 작성 시점에 #4116과 #4117은 수십 초 간격으로 둘 다 머지되었고(preview a433d39d9, main 2f3f73629), npm은 아직 latest=2.48.0이다. 본문은 실제 발행이 승격 후 체크와 dry-run을 따른다고 적었다. 운영상 권장은 여전히 preview(또는 동일 트리) 짧은 확인 → dry-run → main live → 태그/latest 확인이다. open-dev가 이미 2.50.0이라 버전선 겹침 문제는 없다.

경로 base=main / enforce-target 실패 - 안정 채널 승격의 의도된 main 타깃이다. dev로 리타깃하지 마라.
경로 트리 동일성 - 기준선 ad36c7be8 대비 채널 버전선만 달라야 한다. preview 쪽은 이미 1파일 diff로 확인됨. main head도 같은 계약인지 발행 전 git diff ad36c7be8 <main-head> --stat로 한 번 더 본다.
경로 package.json 2.49.0 - origin/main이 이미 이 버전이다. 발행 전 태그 v2.49.0 부재를 확인했다.
경로 순서 #4116(preview) → #4117(main) - 브랜치 머지는 연속으로 끝났고, 남은 위험은 npm latest 발행 면이다. preview 완충 없이 live만 서두르지 마라.
경로 후보 CI 34348082430 / 이 PR push-event CI - Windows·macOS·Service lifecycle·Release dry-run이 실제 promotion/merge SHA 기준이어야 한다.
경로 .github/workflows/release.yml - live 후 레지스트리 관측 실패 시에도 republish 하지 않는 계약이 main에 그대로 실린다. latest 사고면이 더 크다.

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

  • owner 즉시 머지 지시 이후, 발행만 CI 초록에 묶을지 여부
  • preview npm을 건너뛴 채 main/latest만 찍을지
  • admin merge·wrong-branch 예외를 이번 컷 운영 기록에 어떻게 남길지
  • 발행 직후 doctor/설치 스모크를 누가 볼지

너의 추천
내용 리베이스나 types/config 분할 때문에 닫을 대상은 아니다. 이미 머지됐으니 ready/merge 판단은 끝났고, 다음은 dry-run 통과 확인 후 v2.49.0 태그·npm latest 발행이다. 봇 retarget-to-dev는 무시. 발행 후 dist-tag·GitHub Release를 사람이 한 번 눈으로 확인한다.

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

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

Labels

intake: hygiene-blocked Deterministic PR hygiene checks failed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants