Skip to content

[WRONG BRANCH] release: promote dev to main for v2.31.0 - #2354

Merged
lidge-jun merged 156 commits into
mainfrom
dev
Aug 22, 2026
Merged

[WRONG BRANCH] release: promote dev to main for v2.31.0#2354
lidge-jun merged 156 commits into
mainfrom
dev

Conversation

@lidge-jun

@lidge-jun lidge-jun commented Aug 22, 2026

Copy link
Copy Markdown
Owner

Summary

Promote dev (ced9a85) into main for the v2.31.0 release train.

This is a maintainer promotion merge, not a feature PR. No code is authored here: the merge brings the 114 non-merge commits that accumulated on dev since v2.29.0 (224 files, +12000/-539).

Release readiness was certified in devlog/_plan/260822_dev_release_readiness/090_go_verdict.md (GO verdict) and re-verified locally at head ced9a85.

Verification

  • Full suite: 14264 pass / 10 skip / 0 fail (897 files, 579s)
  • Typecheck (tsc --noEmit): clean, TypeScript 7.0.2
  • privacy:scan: passed
  • Cross-platform CI: success on a012a46, the last code-bearing commit. The diff from a012a46 to ced9a85 excluding devlog is empty, so the CI-verified tree is byte-identical to this head.
  • Service lifecycle: success on 6e2a6b6, and no service-gate path changed between that commit and this head. The release bump commit touches package.json and retriggers the workflow on the release SHA, which is the run the release.yml gate actually reads.
  • Merge is conflict-free, verified with git merge-tree --write-tree.

Checklist

  • Tests pass locally
  • Typecheck passes
  • Privacy scan passes
  • Targets the correct branch for this change type (maintainer release promotion)

Summary by CodeRabbit

  • New Features

    • Added routed vision support for image-capable models, including safer image handling and model selection.
    • Added ocx service restart and safer automatic service installation checks.
    • Added ocx doctor diagnostics and guarded recovery for zero-byte coordinator remnants.
    • Added support for updated Cursor models, Fast reasoning tiers, and Z.AI quota reporting.
    • Added xAI web-search compatibility and more accurate Priority Processing pricing estimates.
  • Bug Fixes

    • Improved Cursor stream timeout, cancellation, tool-call, image, and authentication handling.
    • Improved error classification for context-limit and rate-limit failures.
  • Documentation

    • Updated provider, vision, service, recovery, and Bun setup documentation.

olddonkey and others added 30 commits August 18, 2026 14:55
Phase B2 of the FastWire umbrella (#1886), closing the
request in #1875. Fast now works end to end for xAI, and only where xAI
documents it.

Capability follows the transport. The registry gains a key-auth service-tier
overlay applied only when a preset allows the key override and the captured
effective auth transport is key-based; xAI declares Fast there and stays
unclassified on OAuth, because Priority Processing is documented for the public
api.x.ai endpoints and not for the Grok CLI subscription gateway. The overlay
resolves inside the shared FastPolicyAuthority capture, so the catalog and the
runtime cannot disagree — and the runtime only rewrites the base URL to that
gateway when authMode is "oauth", exactly when the overlay withholds the
capability, so Fast can never be injected into the unverified endpoint.

The catalog stops telling every provider OpenAI's story. Fast tier copy is now
per-provider, and xAI's says what xAI actually charges: priority processing at
2x token price, not "1.5x speed". Providers that declare nothing keep their
current bytes.

Pricing is declared rather than hardcoded to one vendor. The OpenAI-only
provider gate becomes exact (provider, model) priority rules, so xAI gets its
documented flat 2x while routed resellers sharing the grok slug inherit
nothing. The long-context relationship is likewise a declaration: OpenAI
publishes that Fast and long context are exclusive regimes, while xAI publishes
neither a combined rate nor an exclusion — so a confirmed-priority request above
200k prices at the published long-context rate and is marked a known lower
bound, surfaced in the dashboard as "≥$" rather than an invented stacked
multiplier. Billing still follows the response echo, which matches xAI's rule
that the priority rate applies only when the response confirms it.

NOTE — beyond the Fast path: xAI's bundled cached-input price for grok-4.6 was
$0.30 against an official $0.50, so every xai cost estimate (not just Fast) was
low. A verified-override layer corrects it ahead of the bundled row, which the
existing expected-price overlays sit behind and could not reach. The Fast
multiplier applies on top of the base price, so shipping the premium without
this correction would have compounded the error.

Full suite at this commit: 13330 pass / 10 skip / 1 fail — the one failure is
the pre-existing dev-side key-login-live-update regression, confirmed to
reproduce on this branch's own base commit (bcc77c0) with none of these
changes applied.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The readiness checklist requires a screenshot for GUI changes. Three seeded
grok-4.6 rows exercise every branch of the new pricing path in one view:
standard, a response-confirmed priority request at exactly the documented 2x
premium, and a confirmed-priority request above the long-context threshold
rendering as "≥$" because xAI publishes no combined rate.

Captured against a local proxy with a seeded usage log; no live xAI request was
billed to produce it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
# Conflicts:
#	docs-site/src/content/docs/reference/configuration/providers.md
#	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/Logs.tsx
#	gui/src/pages/logs-cost-format.ts
#	src/codex/catalog/provider-fetch.ts
#	src/providers/registry.ts
#	src/providers/service-tier.ts
#	tests/service-tier-capability.test.ts
33e1c3e split the OAuth subscription gateway from the API-key endpoint in the
provider table for en, ja, ko, ru, and zh-cn, but zh-tw, fr, and tr kept
https://api.x.ai/v1 as the base URL. OAuth routes through the Grok CLI gateway
at https://cli-chat-proxy.grok.com/v1; only the API-key override targets
api.x.ai, and only that transport injects Priority Processing.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017zpLCh4eEms6un3VjapRgL
Claude Code's Anthropic Messages path never received a reasoning-replay scope because it does not send the Codex parent-thread header. Derive one from the stable per-session prompt_cache_key (metadata.user_id) so Gemini/Antigravity thought signatures are remembered by call_id and survive history replay. Also read nested extra_content.google.thought_signature when parsing Google responses.
Adds regression coverage for the Anthropic Messages reasoning-replay scope and for reading nested extra_content.google.thought_signature from Google response parts.
Root-prompt blobs used contentText(), which dropped image-only turns. Use historyContentText so external models still see [image attached].
Prepare already JPEG-caps active-turn images. Pass those bytes to resolve so live transport does not decode and encode the same PNG twice.
Image prep reused the name already used for the protobuf payload, so the module failed to parse and the CLI could not start.

Co-authored-by: Cursor <cursoragent@cursor.com>
Keep the glm-5.3 blind-model comment in sync with CURSOR_NO_VISION_MODELS, and round oversized base64 fixtures to a multiple of four so the decode guards stay pinned if the byte caps change.

Co-authored-by: Cursor <cursoragent@cursor.com>
Omit images when dimension sniffing cannot produce trusted bounds before
Bun.Image decode, and when the JPEG shrink ladder still exceeds the detail
soft cap. Adds named regressions for truncated headers and documents glm-5.3
alongside glm-5.2 in provider examples.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…rding

Co-authored-by: Cursor <cursoragent@cursor.com>
`ROUTED_CUSTOM_TOOL_PASSTHROUGH` exempted `apply_patch` from routed
custom-tool lowering unconditionally, so it reached every routed destination
as a `type: "custom"` tool with `custom_tool_call` items. xAI's Responses
endpoint rejects that item type:

  422 Failed to deserialize the JSON body into the target type:
      input[5]: invalid "custom_tool_call" item: missing field `id`

The message is misleading — the id is present. Instrumenting the adapter
showed the item leaving as
`{"type":"custom_tool_call","id":"ctc_abc123","call_id":"c1",...}`; xAI
reports the first field its own parser cannot satisfy rather than the real
problem, which is that it does not accept the item type. Same class as its
"Could not decode the compaction blob" message for a reasoning field, so the
fix is not to generate or preserve ids.

Live A/B against the endpoint — identical body, identical id, only the tool
name differs:

  apply_patch      (exempt from lowering)  -> 422
  my_custom_thing  (lowered to a function) -> 200

Lowering is what makes it work; the exemption is what breaks it. It surfaces
on Codex's compact turn because a real session always contains apply_patch
calls, but a plain replay reproduces it too.

The exemption is not wrong everywhere — the canonical ChatGPT surface speaks
custom_tool_call natively and lowering there would regress it. The defect is
that one unconditional rule about "routed providers" encoded a claim about a
single destination's capability. Add `supportsResponsesCustomTools`,
following the existing `supportsOpenAiWebSearchToolFields` shape: declared on
the registry row and the provider config, filled only when unset, and
consumed as an explicit denial. Absent or true keeps today's behaviour
byte-identical; only xAI declares false.

The response path needed no special case: it is name-generic, so once
apply_patch joins the converted set the existing repair restores the
function_call and its streaming argument events to a custom_tool_call with
the original call id.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Every routed lowering step derives its plan from the tool declarations, and
the compaction body build deletes them. It ran first, so on a compaction turn
the plan was empty and replayed call items reached the wire in their private
shapes. Against xAI:

  422 Failed to deserialize the JSON body into the target type:
      input[5]: invalid "custom_tool_call" item: missing field `id`

The id is present; xAI reports the first field its own parser cannot satisfy
rather than the real problem, which is that it does not accept the item type.

Instrumented the adapter to pin the mechanism: with declarations present the
call item is converted; with them absent, or on a compaction turn, it goes out
raw. Reordering locally produced `function_call` / `function_call_output` with
`tools` still absent and the compact prompt still appended.

This is the second time this exact shape has been fixed here — a replayed
namespace key survived for the same reason. That fix taught one lowering step
to cope; this one fixes the pipeline, so the next private field added does not
need its own workaround. The invariant is now stated at the call site: the
compaction body build removes the tool surface and must be the last routed
transform.

Two effects beyond the call items, both improvements: `promoteClientLoadedTools`
could previously reintroduce top-level `tools` after compaction had removed
them, which running compaction last now prevents; and namespace-collision
validation runs before the declarations are deleted. Non-compaction output is
byte-identical, pinned by an exact comparison test.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
(cherry picked from commit 59d0cde7f75f0e645a12ec44a388609dfba50ce6)
The namespace-replay restore test verified the restored custom_tool_call events
but never checked that the stream still ends with data: [DONE], so a regression
that drops the terminal marker would have passed. The sibling lowering test
already asserts it; match that.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017zpLCh4eEms6un3VjapRgL
Forward auth is not an OpenAI-destination identity. A noncanonical
forward provider that denies native custom tools must still convert
apply_patch. Pin the adapter serialization and the handleResponses path.
`an accepted override still resolves through the route` hard-coded
"/tmp/opencodex-pi-route-fixture/models.json". The resolver builds that
destination with `join`, which is `\` on win32, so the case asserted the
host's path separator rather than the override taking effect and was red
on every Windows run:

  Expected: "/tmp/opencodex-pi-route-fixture/models.json"
  Received: "\tmp\opencodex-pi-route-fixture\models.json"

Build the expectation with `join` from one binding shared with the env
value. `join` is identity for this input on POSIX, so Linux and macOS
are unchanged.

The assertion still pins what it was written for: making `piAgentDir`
ignore the override fails this case, so it did not become a tautology.

Refs #2152.
Refresh B2 onto current dev without rewriting contributor history.
Keep the xAI Priority response-confirmation boundary and the grok-4.6
cached-input $0.50 correction. Resolve the leftover privacy:scan example
using the wording already on dev.

# Conflicts:
#	devlog/_plan/260820_bug_pr_backlog_consolidation/100_release_safety_audit.md
…tchdog

fix(cursor): inbound stream-health watchdog fails silent/heartbeat-only turns at the transport
…covery H2 pool down at lifecycle exit

Two small hardenings from devlog 260822_senpi_cursor_transfer/120:

- T07 (senpi PR #905): pollCursorAuth now fails on the FIRST 400/401/403/410
  with a typed CursorAuthTerminalError naming the status, instead of burning
  the 3-strike retry budget and masking the reason behind "Too many
  consecutive errors". 5xx/network keep the existing retry path.
- 120b: CursorH2SessionPool lazily registers a "cursor-h2-pool" teardown in
  the core-owned optional-shutdown-hooks registry on first request(), so
  lifecycle drainAndShutdown closes pooled discovery sessions. The pool doc
  comment no longer overclaims Run-path reuse (Run deliberately dials its
  own session; see 190 roadmap lock).
…2-shutdown

fix(cursor): OAuth poll fail-fast on terminal statuses + discovery H2 pool shutdown hook
devlog: round-3 Cursor live-probe evidence and lock (docs-only)
… back to wire names

#2305 (devlog 260822_senpi_cursor_transfer/230): some Cursor models emit a
TEXTUAL pseudo tool call ("[TOOL_CALL]mcp_opencodex-responses_grep[ARGS]{...}")
instead of a real frame. Text-mode clients (Pi) parse that text and cannot
dispatch the undeclared display name, so the turn dies after display.

Normalize the display alias to the advertised wire name at the textDelta
mapping boundary — marker-scoped (both [TOOL_CALL] and [ARGS] required),
guarded to the exact mcp_opencodex-responses_ prefix. Prose mentions and
other providers' names stay untouched; real frames were already normalized
structurally via mcpWireNameFromArgs. Split-marker streaming deltas are a
recorded non-goal until a live trace shows them (doc 230).

Closes #2305.
fix(cursor): normalize display aliases in textual pseudo tool-call markers (#2305)
…lass

Live probe evidence (devlog 260822_senpi_cursor_transfer/210, 260): a
plan-gated model (claude-opus-4-7-low-fast without -fast entitlement)
returns the SAME bare 0-token resource_exhausted shape on a ~20-token
prompt that a real payload overflow produces. #2320's overflow mapping
then makes Codex compact a tiny turn — the wrong remedy for an
entitlement rejection, and the retry can never succeed.

Add a size prior to classifyCursorError: when the caller can prove the
request was small relative to the model's context window (estimate <
50% of window), a bare RE keeps the 429-class mapping; large or unknown
sizes keep today's overflow mapping, so the prior only ever removes
false overflows it can prove. The adapter supplies the estimate from
the outgoing request text and the static context-window table at its
single error-mapping seam. Explicit quota cues and size phrases are
unaffected (they classify before the prior).

senpi's T01 (#1009/#1036) shares this false-overflow bug; this is a
beyond-parity refinement.
fix(cursor): size prior keeps provably-small bare resource_exhausted on the 429 class
devlog: 290 post-landing status (docs-only)
devlog: release-readiness unit + probe corrections and 300/310 roadmap (docs-only)
… tiers

Live GetUsableModels (260822, devlog 300) lists the Opus Fast wire ids ONLY
in effort-suffixed form ({base-without-fast}-{effort}-fast); the bare id
returns not_found — which is exactly what cursor/claude-opus-4-7-fast did
through the proxy, because the static catalog sent it bare ("tiers
unverified"). A live turn on claude-opus-4-8-high-fast succeeded, so the
families are callable on this plan.

- discovery.ts: claude-opus-4-7-fast gains its tier picker; add
  claude-opus-4-8-fast and claude-opus-5-fast.
- effort-map.ts: tier ladders per the dump — 4-7/4-8: low..max;
  opus-5-fast: low/medium/high (no xhigh/max non-thinking yet).
- No-effort requests still resolve to a suffix (max) via codexEffortRank,
  so a bare -fast id can never reach the wire; no registry default needed.
- Tests pin family presence, ladders, wire-id derivation, no-bare rule,
  and out-of-ladder clamping.
feat(cursor): expose Opus Fast families with live-verified effort tiers
devlog: 310 maxMode big-context A/B results (NOOP, docs-only)
devlog: WP4 regression-audit findings (docs-only)
devlog: release-readiness GO verdict (docs-only)
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner August 22, 2026 06:36
@github-actions

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

Failed to post review comments.

We encountered an issue with GitHub. Use @coderabbitai full review to retry the review.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: a3e940d9-438f-4048-a5f1-6ab90e3c2104

📥 Commits

Reviewing files that changed from the base of the PR and between 231e622 and ced9a85.

⛔ Files ignored due to path filters (4)
  • bun.lock is excluded by !**/*.lock
  • devlog/_plan/260818_fastwire_b2_xai/evidence/010_logs_priority_lower_bound.png is excluded by !**/*.png
  • devlog/_plan/260820_sidecar_selection_unification/assets/vision_routed_dropdown.png is excluded by !**/*.png
  • tests/helpers/cursor-grumpy-fixture.png is excluded by !**/*.png
📒 Files selected for processing (220)
  • .github/actions/setup-project-bun/action.yml
  • .github/workflows/ci.yml
  • .github/workflows/release.yml
  • .github/workflows/service-lifecycle.yml
  • README.md
  • devlog/_fin/260814_bun14-preview-dev/000_plan.md
  • devlog/_fin/260814_bun14-preview-dev/010_ci_composite.md
  • devlog/_fin/260814_bun14-preview-dev/011_github_canary_channel.md
  • devlog/_fin/260814_bun14-preview-dev/012_canary_findings.md
  • devlog/_fin/260814_bun14-preview-dev/020_bundle_canary.md
  • devlog/_fin/260814_bun14-preview-dev/030_runtime_provenance.md
  • devlog/_fin/260814_bun14-preview-dev/040_memory_harness.md
  • devlog/_fin/260814_bun14-preview-dev/050_stream_caps_revision.md
  • devlog/_fin/260814_bun14-preview-dev/060_byte_queue.md
  • devlog/_fin/260814_bun14-preview-dev/070_fetch_cancel.md
  • devlog/_fin/260814_bun14-preview-dev/080_worker_settle.md
  • devlog/_fin/260814_bun14-preview-dev/090_isolate_teardown.md
  • devlog/_fin/260814_bun14-preview-dev/100_promotion_docs.md
  • devlog/_fin/260814_bun14-preview-dev/README.md
  • devlog/_plan/260818_fastwire_b2_xai/evidence/README.md
  • devlog/_plan/260820_sidecar_selection_unification/160_vision_external_research.md
  • devlog/_plan/260820_sidecar_selection_unification/170_vision_backend_union.md
  • devlog/_plan/260820_sidecar_selection_unification/180_vision_describe_executors.md
  • devlog/_plan/260820_sidecar_selection_unification/190_vision_surfaces_and_delivery.md
  • devlog/_plan/260821_260821-model-catalog-refresh/000_plan.md
  • devlog/_plan/260821_260821-model-catalog-refresh/010_phase1.md
  • devlog/_plan/260821_260821-windows-picker-full-restart/000_plan.md
  • devlog/_plan/260821_260821-windows-picker-full-restart/010_phase1.md
  • devlog/_plan/260821_bug_merge_train/000_triage_matrix.md
  • devlog/_plan/260821_bug_merge_train/001_dependency_analysis.md
  • devlog/_plan/260821_bug_merge_train/002_audit_synthesis.md
  • devlog/_plan/260821_bug_merge_train/010_fix_dev_macos_ci.md
  • devlog/_plan/260821_bug_merge_train/020_merge_2295.md
  • devlog/_plan/260821_bug_merge_train/030_merge_2294.md
  • devlog/_plan/260821_bug_merge_train/040_merge_2296.md
  • devlog/_plan/260821_bug_merge_train/050_merge_2289.md
  • devlog/_plan/260821_bug_merge_train/060_merge_2270.md
  • devlog/_plan/260821_bug_merge_train/065_merge_2281.md
  • devlog/_plan/260821_bug_merge_train/070_final_gate.md
  • devlog/_plan/260822_dev_release_readiness/000_plan.md
  • devlog/_plan/260822_dev_release_readiness/001_delta_inventory.md
  • devlog/_plan/260822_dev_release_readiness/002_risk_matrix.md
  • devlog/_plan/260822_dev_release_readiness/009_roadmap_lock.md
  • devlog/_plan/260822_dev_release_readiness/010_wp4_findings.md
  • devlog/_plan/260822_dev_release_readiness/090_go_verdict.md
  • devlog/_plan/260822_senpi_cursor_transfer/000_plan.md
  • devlog/_plan/260822_senpi_cursor_transfer/001_opencodex_cursor_inventory.md
  • devlog/_plan/260822_senpi_cursor_transfer/002_senpi_cursor_inventory.md
  • devlog/_plan/260822_senpi_cursor_transfer/003_protocol_compare.md
  • devlog/_plan/260822_senpi_cursor_transfer/004_auth_catalog_compare.md
  • devlog/_plan/260822_senpi_cursor_transfer/005_exec_compare.md
  • devlog/_plan/260822_senpi_cursor_transfer/006_stream_overflow_compare.md
  • devlog/_plan/260822_senpi_cursor_transfer/007_cli_fallback.md
  • devlog/_plan/260822_senpi_cursor_transfer/090_transfer_verdict.md
  • devlog/_plan/260822_senpi_cursor_transfer/100_stabilization_round2_plan.md
  • devlog/_plan/260822_senpi_cursor_transfer/110_stream_health_watchdog.md
  • devlog/_plan/260822_senpi_cursor_transfer/120_small_hardening_pair.md
  • devlog/_plan/260822_senpi_cursor_transfer/190_round2_roadmap_lock.md
  • devlog/_plan/260822_senpi_cursor_transfer/200_round3_probe_plan.md
  • devlog/_plan/260822_senpi_cursor_transfer/210_maxmode.md
  • devlog/_plan/260822_senpi_cursor_transfer/220_rotation.md
  • devlog/_plan/260822_senpi_cursor_transfer/230_issue2305.md
  • devlog/_plan/260822_senpi_cursor_transfer/240_client_version.md
  • devlog/_plan/260822_senpi_cursor_transfer/250_billed_usage.md
  • devlog/_plan/260822_senpi_cursor_transfer/260_re_classification_refinement.md
  • devlog/_plan/260822_senpi_cursor_transfer/290_round3_lock.md
  • devlog/_plan/260822_senpi_cursor_transfer/300_opus_fast_catalog.md
  • devlog/_plan/260822_senpi_cursor_transfer/310_maxmode_bigctx.md
  • docs-site/src/content/docs/fr/guides/providers.md
  • docs-site/src/content/docs/fr/reference/cli/lifecycle.md
  • docs-site/src/content/docs/fr/reference/configuration/providers.md
  • docs-site/src/content/docs/guides/codex-integration.md
  • docs-site/src/content/docs/guides/providers.md
  • docs-site/src/content/docs/ja/guides/providers.md
  • docs-site/src/content/docs/ja/reference/cli/lifecycle.md
  • docs-site/src/content/docs/ko/guides/providers.md
  • docs-site/src/content/docs/ko/reference/cli/lifecycle.md
  • docs-site/src/content/docs/reference/cli/lifecycle.md
  • docs-site/src/content/docs/reference/configuration/providers.md
  • docs-site/src/content/docs/ru/guides/providers.md
  • docs-site/src/content/docs/ru/reference/cli/lifecycle.md
  • docs-site/src/content/docs/tr/guides/providers.md
  • docs-site/src/content/docs/tr/reference/cli/lifecycle.md
  • docs-site/src/content/docs/zh-cn/guides/providers.md
  • docs-site/src/content/docs/zh-cn/reference/cli/lifecycle.md
  • docs-site/src/content/docs/zh-tw/guides/providers.md
  • docs-site/src/content/docs/zh-tw/reference/cli/lifecycle.md
  • 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/claude-code-sidecar.ts
  • gui/src/pages/claude-manual-env.ts
  • gui/src/pages/dashboard-shared.ts
  • gui/src/pages/use-dashboard-data.ts
  • gui/tests/logs-cost-lower-bound.test.ts
  • package.json
  • scripts/ci/run-bun-test-batches.sh
  • scripts/release.ts
  • scripts/restart-codex-desktop-app.ps1
  • src/adapters/cursor.ts
  • src/adapters/cursor/cursor-errors.ts
  • src/adapters/cursor/discovery.ts
  • src/adapters/cursor/effort-map.ts
  • src/adapters/cursor/h2-pool.ts
  • src/adapters/cursor/images.ts
  • src/adapters/cursor/live-models.ts
  • src/adapters/cursor/live-transport.ts
  • src/adapters/cursor/native-exec-common.ts
  • src/adapters/cursor/native-exec.ts
  • src/adapters/cursor/protobuf-events.ts
  • src/adapters/cursor/protobuf-request.ts
  • src/adapters/cursor/request-builder.ts
  • src/adapters/cursor/tool-definitions.ts
  • src/adapters/cursor/transport.ts
  • src/adapters/cursor/types.ts
  • src/adapters/google.ts
  • src/adapters/openai-responses.ts
  • src/adapters/xai-web-search.ts
  • src/cli/agent.ts
  • src/cli/dispatch.ts
  • src/cli/doctor.ts
  • src/cli/help.ts
  • src/cli/registry.ts
  • src/codex/auth-context.ts
  • src/codex/catalog/effort.ts
  • src/codex/catalog/parsing.ts
  • src/codex/catalog/provider-fetch.ts
  • src/codex/coordinator-doctor.ts
  • src/codex/features.ts
  • src/codex/inject-coordination.ts
  • src/codex/transition-state.ts
  • src/lib/bun-stream-caps.ts
  • src/lib/errors.ts
  • src/oauth/cursor.ts
  • src/providers/command-code-efforts.ts
  • src/providers/cursor-pool.ts
  • src/providers/derive.ts
  • src/providers/fastwire.ts
  • src/providers/openai-sidecar.ts
  • src/providers/quota.ts
  • src/providers/registry.ts
  • src/providers/service-tier.ts
  • src/responses/custom-tool-compat.ts
  • src/responses/namespace-tool-compat.ts
  • src/router.ts
  • src/server/chat-completions.ts
  • src/server/chat-native.ts
  • src/server/management/agent-settings-routes.ts
  • src/server/management/config-routes.ts
  • src/server/management/vision-sidecar-options.ts
  • src/server/responses/compact.ts
  • src/server/responses/core.ts
  • src/service.ts
  • src/types/config.ts
  • src/types/provider.ts
  • src/usage/cost.ts
  • src/usage/expected-prices.ts
  • src/vision/backends.ts
  • src/vision/eligibility.ts
  • src/vision/index.ts
  • src/vision/routed-describe.ts
  • structure/02_config-and-codex-home.md
  • structure/04_transports-and-sidecars.md
  • structure/08_openai-provider-tiers.md
  • tests/bun-stream-caps.test.ts
  • tests/catalog-vision-sidecar-modalities.test.ts
  • tests/ci-workflows.test.ts
  • tests/claude-code-thought-signature-scope.test.ts
  • tests/cli-help.test.ts
  • tests/codex-auth-context.test.ts
  • tests/codex-coordinator-doctor.test.ts
  • tests/codex-inject-write-lock.test.ts
  • tests/codex-native-residue.test.ts
  • tests/codex-runtime.test.ts
  • tests/cursor-blob.test.ts
  • tests/cursor-discovery.test.ts
  • tests/cursor-eof-terminal.test.ts
  • tests/cursor-errors.test.ts
  • tests/cursor-h2-pool-shutdown.test.ts
  • tests/cursor-http1-transport.test.ts
  • tests/cursor-images.test.ts
  • tests/cursor-native-exec.test.ts
  • tests/cursor-oauth.test.ts
  • tests/cursor-pool.test.ts
  • tests/cursor-protobuf-events.test.ts
  • tests/cursor-request-builder.test.ts
  • tests/cursor-static-catalog.test.ts
  • tests/cursor-stream-health.test.ts
  • tests/cursor-tool-continuation.test.ts
  • tests/cursor-vision-wire-harness.test.ts
  • tests/custom-tool-compat.test.ts
  • tests/fastwire-policy.test.ts
  • tests/google-signature-history-roundtrip.test.ts
  • tests/install-scripts.test.ts
  • tests/management-api-logs-metrics.test.ts
  • tests/management-client-config-route.test.ts
  • tests/namespace-tool-compat.test.ts
  • tests/oauth-provider-reconcile.test.ts
  • tests/openai-responses-passthrough.test.ts
  • tests/provider-quota.test.ts
  • tests/provider-registry-parity.test.ts
  • tests/release-helper.test.ts
  • tests/responses-custom-tool-repair.test.ts
  • tests/responses-routed-web-search-fields.test.ts
  • tests/service-tier-capability.test.ts
  • tests/service.test.ts
  • tests/subagent-fallback-handle-responses.test.ts
  • tests/terminal-guard.test.ts
  • tests/usage-cost.test.ts
  • tests/vision-backend-union.test.ts
  • tests/vision-eligibility.test.ts
  • tests/vision-routed.test.ts
  • tests/winsw.test.ts
  • tests/xai-web-search-compat.test.ts

Included review availability: Your plan provides up to 10 included reviews per hour; 4 remain after this review.

⏰ Context from checks skipped due to timeout. (3)
  • GitHub Check: npm-global windows-latest
  • GitHub Check: macos
  • GitHub Check: macos
⚠️ CI failures not shown inline (2)

GitHub Actions: Enforce PR target branch / 0_enforce-target.txt: [WRONG BRANCH] release: promote dev to preview for v2.31.0-preview.20260822

Conclusion: failure

View job details

##[group]Run actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3
 with:
   script: const path = require("path");
const fs = require("node:fs");
const {
  collectPrQualityFailures,
  authorHasPushPermission,
  hasGuiOverride,
  isChangedFileListTruncated,
  extractReviewReadiness,
  appendReviewReadinessSection,
  stripReviewReadinessSection,
  uncheckReviewReadinessBoxes,
  REVIEW_READINESS_CLAIM_INDEX,
  resetReviewReadinessSection
} = require(
  path.join(process.cwd(), ".github", "scripts", "pr-quality.cjs"),
);
const {
  collectDeterministicHygieneFailures,
  HYGIENE_FAILURE_HINTS,
} = require(
  path.join(process.cwd(), ".github", "scripts", "pr-hygiene.cjs"),
);
const {
  parseGateState,
  gateStateMarker,
  parseState,
  parseReadinessState,
  defaultGateState,
  migrateLegacyGateState,
  completionIsStale,
  readinessClaimViolations,
  unresolvedFindingsClaim,
  READINESS_STATE_VERSION
} = require(
  path.join(
    process.cwd(),
    ".github",
    "scripts",
    "pr-quality-state.cjs"
  ),
);
const {
  GATE_MARKER,
  READINESS_MARKER,
  HYGIENE_MARKER,
  HYGIENE_BLOCK_START,
  HYGIENE_BLOCK_END,
  inlineCode,
  buildGateCommentBody,
  extractHygieneSection,
  buildFailureSections,
  failureSummary,
  buildStaleNotice,
  buildClaimCheckNotice,
  buildFindingsClaimNotice
} = require(
  path.join(
    process.cwd(),
    ".github",
    "scripts",
    "pr-quality-messages.cjs"
  ),
);
const {
  parseMaintainerLogins
} = require(
  path.join(
    process.cwd(),
    ".github",
    "scripts",
    "pr-maintainers.cjs"
  ),
);
const ALLOWED_BASES = ["dev"];
const DEFAULT_BASE = "dev";
const TITLE_PREFIX = "[WRONG BRANCH] ";
const LEGACY_COMMENT_MARKER = "<!-- wrong-branch-enforcer -->";
const REVIEW_READY_LABEL = "review-ready";
const GUI_SCREENSHOT_WAIVER_LABEL = "gui-screenshot-waived";
const MAINTAINERS_FILE = "MAINTAINERS.md";
const { owner, repo } = context.repo;
const resolvedPullNumber = process.env.RESOLVED_PULL_NUMBER ?? "";
const pull_number =...

GitHub Actions: Enforce PR target branch / enforce-target: [WRONG BRANCH] release: promote dev to preview for v2.31.0-preview.20260822

Conclusion: failure

View job details

##[group]Run actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3
 with:
   script: const path = require("path");
const fs = require("node:fs");
const {
  collectPrQualityFailures,
  authorHasPushPermission,
  hasGuiOverride,
  isChangedFileListTruncated,
  extractReviewReadiness,
  appendReviewReadinessSection,
  stripReviewReadinessSection,
  uncheckReviewReadinessBoxes,
  REVIEW_READINESS_CLAIM_INDEX,
  resetReviewReadinessSection
} = require(
  path.join(process.cwd(), ".github", "scripts", "pr-quality.cjs"),
);
const {
  collectDeterministicHygieneFailures,
  HYGIENE_FAILURE_HINTS,
} = require(
  path.join(process.cwd(), ".github", "scripts", "pr-hygiene.cjs"),
);
const {
  parseGateState,
  gateStateMarker,
  parseState,
  parseReadinessState,
  defaultGateState,
  migrateLegacyGateState,
  completionIsStale,
  readinessClaimViolations,
  unresolvedFindingsClaim,
  READINESS_STATE_VERSION
} = require(
  path.join(
    process.cwd(),
    ".github",
    "scripts",
    "pr-quality-state.cjs"
  ),
);
const {
  GATE_MARKER,
  READINESS_MARKER,
  HYGIENE_MARKER,
  HYGIENE_BLOCK_START,
  HYGIENE_BLOCK_END,
  inlineCode,
  buildGateCommentBody,
  extractHygieneSection,
  buildFailureSections,
  failureSummary,
  buildStaleNotice,
  buildClaimCheckNotice,
  buildFindingsClaimNotice
} = require(
  path.join(
    process.cwd(),
    ".github",
    "scripts",
    "pr-quality-messages.cjs"
  ),
);
const {
  parseMaintainerLogins
} = require(
  path.join(
    process.cwd(),
    ".github",
    "scripts",
    "pr-maintainers.cjs"
  ),
);
const ALLOWED_BASES = ["dev"];
const DEFAULT_BASE = "dev";
const TITLE_PREFIX = "[WRONG BRANCH] ";
const LEGACY_COMMENT_MARKER = "<!-- wrong-branch-enforcer -->";
const REVIEW_READY_LABEL = "review-ready";
const GUI_SCREENSHOT_WAIVER_LABEL = "gui-screenshot-waived";
const MAINTAINERS_FILE = "MAINTAINERS.md";
const { owner, repo } = context.repo;
const resolvedPullNumber = process.env.RESOLVED_PULL_NUMBER ?? "";
const pull_number =...
🧰 Additional context used
📓 Path-based instructions (6)
.github/**

⚙️ CodeRabbit configuration file

Security boundary. Workflow changes, release automation, and dependency installation steps require explicit security review per MAINTAINERS.md. Flag any new secret usage, permission escalation, or third-party action pinned to a mutable ref.

Files:

  • .github/workflows/release.yml
  • .github/workflows/service-lifecycle.yml
  • .github/actions/setup-project-bun/action.yml
  • .github/workflows/ci.yml
tests/**

⚙️ CodeRabbit configuration file

Tests are flat Bun tests under tests/. A behavior change in src/ should come with a focused regression test near the existing tests for that subsystem. Flag PRs that change shared routing, adapters, config, or server behavior without touching tests.

Files:

  • tests/cursor-pool.test.ts
  • tests/google-signature-history-roundtrip.test.ts
  • tests/winsw.test.ts
  • tests/management-api-logs-metrics.test.ts
  • tests/claude-code-thought-signature-scope.test.ts
  • tests/management-client-config-route.test.ts
  • tests/cursor-oauth.test.ts
  • tests/cursor-http1-transport.test.ts
  • tests/install-scripts.test.ts
  • tests/cursor-discovery.test.ts
  • tests/codex-native-residue.test.ts
  • tests/bun-stream-caps.test.ts
  • tests/namespace-tool-compat.test.ts
  • tests/cursor-stream-health.test.ts
  • tests/provider-registry-parity.test.ts
  • tests/codex-runtime.test.ts
  • tests/cursor-native-exec.test.ts
  • tests/catalog-vision-sidecar-modalities.test.ts
  • tests/oauth-provider-reconcile.test.ts
  • tests/fastwire-policy.test.ts
  • tests/cli-help.test.ts
  • tests/responses-custom-tool-repair.test.ts
  • tests/cursor-static-catalog.test.ts
  • tests/ci-workflows.test.ts
  • tests/responses-routed-web-search-fields.test.ts
  • tests/cursor-errors.test.ts
  • tests/cursor-eof-terminal.test.ts
  • tests/cursor-vision-wire-harness.test.ts
  • tests/vision-routed.test.ts
  • tests/terminal-guard.test.ts
  • tests/cursor-protobuf-events.test.ts
  • tests/codex-auth-context.test.ts
  • tests/codex-coordinator-doctor.test.ts
  • tests/xai-web-search-compat.test.ts
  • tests/vision-eligibility.test.ts
  • tests/custom-tool-compat.test.ts
  • tests/subagent-fallback-handle-responses.test.ts
  • tests/vision-backend-union.test.ts
  • tests/cursor-tool-continuation.test.ts
  • tests/service-tier-capability.test.ts
  • tests/cursor-blob.test.ts
  • tests/provider-quota.test.ts
  • tests/usage-cost.test.ts
  • tests/openai-responses-passthrough.test.ts
  • tests/cursor-images.test.ts
  • tests/service.test.ts
  • tests/release-helper.test.ts
  • tests/cursor-h2-pool-shutdown.test.ts
  • tests/codex-inject-write-lock.test.ts
  • tests/cursor-request-builder.test.ts
gui/**

⚙️ CodeRabbit configuration file

React dashboard built with Vite. Check that GUI state changes stay consistent with the management API responses and that user-visible strings go through the i18n locale files rather than hardcoded text.

Files:

  • gui/src/i18n/ru.ts
  • gui/src/i18n/ko.ts
  • gui/tests/logs-cost-lower-bound.test.ts
  • gui/src/i18n/zh-TW.ts
  • gui/src/i18n/zh.ts
  • gui/src/i18n/fr.ts
  • gui/src/pages/claude-manual-env.ts
  • gui/src/pages/claude-code-sidecar.ts
  • gui/src/pages/use-dashboard-data.ts
  • gui/src/i18n/ja.ts
  • gui/src/i18n/en.ts
  • gui/src/i18n/tr.ts
  • gui/src/pages/dashboard-shared.ts
  • gui/src/i18n/de.ts
src/**

⚙️ CodeRabbit configuration file

Runtime is Bun-native TypeScript (no separate compile step). Flag Node-only APIs that break under Bun, provider/adapter contract drift, and changes that bypass the shared routing/config layers. Watch for credential handling: tokens and OAuth material must never be logged or serialized into responses.

Files:

  • src/cli/agent.ts
  • src/cli/help.ts
  • src/adapters/cursor/native-exec.ts
  • src/adapters/cursor/native-exec-common.ts
  • src/adapters/cursor/protobuf-events.ts
  • src/server/management/config-routes.ts
  • src/server/chat-native.ts
  • src/responses/namespace-tool-compat.ts
  • src/router.ts
  • src/types/provider.ts
  • src/providers/cursor-pool.ts
  • src/cli/registry.ts
  • src/adapters/cursor/live-models.ts
  • src/codex/catalog/parsing.ts
  • src/lib/bun-stream-caps.ts
  • src/adapters/cursor/tool-definitions.ts
  • src/lib/errors.ts
  • src/codex/catalog/effort.ts
  • src/adapters/cursor/transport.ts
  • src/cli/dispatch.ts
  • src/providers/command-code-efforts.ts
  • src/providers/derive.ts
  • src/providers/openai-sidecar.ts
  • src/vision/backends.ts
  • src/adapters/cursor/h2-pool.ts
  • src/providers/service-tier.ts
  • src/server/chat-completions.ts
  • src/types/config.ts
  • src/adapters/cursor/effort-map.ts
  • src/oauth/cursor.ts
  • src/adapters/google.ts
  • src/codex/inject-coordination.ts
  • src/vision/index.ts
  • src/adapters/cursor/discovery.ts
  • src/adapters/cursor.ts
  • src/server/management/agent-settings-routes.ts
  • src/codex/catalog/provider-fetch.ts
  • src/adapters/cursor/types.ts
  • src/codex/auth-context.ts
  • src/vision/routed-describe.ts
  • src/codex/features.ts
  • src/server/management/vision-sidecar-options.ts
  • src/adapters/cursor/protobuf-request.ts
  • src/cli/doctor.ts
  • src/responses/custom-tool-compat.ts
  • src/adapters/xai-web-search.ts
  • src/service.ts
  • src/adapters/openai-responses.ts
  • src/providers/fastwire.ts
  • src/usage/expected-prices.ts
  • src/vision/eligibility.ts
  • src/providers/quota.ts
  • src/adapters/cursor/cursor-errors.ts
  • src/codex/transition-state.ts
  • src/usage/cost.ts
  • src/codex/coordinator-doctor.ts
  • src/server/responses/core.ts
  • src/server/responses/compact.ts
  • src/adapters/cursor/images.ts
  • src/adapters/cursor/request-builder.ts
  • src/providers/registry.ts
  • src/adapters/cursor/live-transport.ts
docs-site/**

⚙️ CodeRabbit configuration file

Astro + Starlight docs site. Check that user-facing docs stay in sync with actual CLI/API behavior and that translated locale pages (ja, ko, ru, zh-cn) are not left contradicting the English source.

Files:

  • docs-site/src/content/docs/ko/guides/providers.md
  • docs-site/src/content/docs/zh-tw/guides/providers.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/guides/codex-integration.md
  • docs-site/src/content/docs/zh-cn/reference/cli/lifecycle.md
  • docs-site/src/content/docs/guides/providers.md
  • docs-site/src/content/docs/zh-cn/guides/providers.md
  • docs-site/src/content/docs/ru/guides/providers.md
  • docs-site/src/content/docs/tr/guides/providers.md
  • docs-site/src/content/docs/ko/reference/cli/lifecycle.md
  • docs-site/src/content/docs/fr/reference/cli/lifecycle.md
  • docs-site/src/content/docs/ja/guides/providers.md
  • docs-site/src/content/docs/reference/cli/lifecycle.md
  • docs-site/src/content/docs/tr/reference/cli/lifecycle.md
  • docs-site/src/content/docs/ru/reference/cli/lifecycle.md
  • docs-site/src/content/docs/ja/reference/cli/lifecycle.md
  • docs-site/src/content/docs/zh-tw/reference/cli/lifecycle.md
  • docs-site/src/content/docs/reference/configuration/providers.md
scripts/**

⚙️ CodeRabbit configuration file

scripts/release.ts is the release authority and a security boundary. Flag changes that weaken CI gating, alter npm publish behavior, or bypass the release workflow's dry-run default.

Files:

  • scripts/ci/run-bun-test-batches.sh
  • scripts/release.ts
  • scripts/restart-codex-desktop-app.ps1
🧠 Learnings (3)
📚 Learning: 2026-08-21T12:27:43.711Z
Learnt from: cristph
Repo: lidge-jun/opencodex PR: 2280
File: docs-site/src/content/docs/reference/configuration/providers.md:0-0
Timestamp: 2026-08-21T12:27:43.711Z
Learning: In docs-site guide pages, avoid duplicating policy or configuration text when a stable canonical document already covers it. Link to the canonical documentation instead—for example, link to docs-site/src/content/docs/reference/configuration/providers.md when applicable—to keep guidance centralized and prevent inconsistencies.

Applied to files:

  • docs-site/src/content/docs/zh-tw/guides/providers.md
  • docs-site/src/content/docs/guides/providers.md
  • docs-site/src/content/docs/tr/guides/providers.md
📚 Learning: 2026-07-26T23:36:06.167Z
Learnt from: Wibias
Repo: lidge-jun/opencodex PR: 518
File: tests/codex-app-server-processes.test.ts:146-148
Timestamp: 2026-07-26T23:36:06.167Z
Learning: When reviewing TypeScript test files that use Bun `test()` callbacks, it is valid to have repeated `const` declarations (e.g., `const signals = ...`) as long as each `const` is inside a separate `test()` callback (different function/block lexical scopes). Only treat it as a problem if the same `const` name is redeclared within the same lexical scope/block (e.g., two `const signals` in the same callback without an intervening block), which would be a parse/TS error.

Applied to files:

  • tests/responses-custom-tool-repair.test.ts
  • tests/cursor-eof-terminal.test.ts
  • tests/codex-auth-context.test.ts
  • tests/xai-web-search-compat.test.ts
  • tests/subagent-fallback-handle-responses.test.ts
  • tests/service-tier-capability.test.ts
  • tests/cursor-blob.test.ts
  • tests/provider-quota.test.ts
  • tests/cursor-images.test.ts
  • tests/cursor-request-builder.test.ts
📚 Learning: 2026-08-03T04:51:03.001Z
Learnt from: Wibias
Repo: lidge-jun/opencodex PR: 569
File: docs-site/src/content/docs/reference/cli.md:0-0
Timestamp: 2026-08-03T04:51:03.001Z
Learning: For CLI lifecycle command documentation, use the per-command lifecycle pages at docs-site/src/content/docs/reference/cli/lifecycle.md and their localized equivalents under the ja, ko, ru, and zh-cn directories. Do not add or update lifecycle documentation in the legacy single-file path docs-site/src/content/docs/reference/cli.md.

Applied to files:

  • docs-site/src/content/docs/reference/cli/lifecycle.md
🪛 ast-grep (0.45.1)
src/codex/catalog/parsing.ts

[warning] Importing child_process exposes a command-execution surface; ensure any command/argument built from input is validated, and prefer execFile/spawn with an argument array over exec.
Context: import { execFileSync } from "node:child_process";
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process-typescript)

src/adapters/cursor/tool-definitions.ts

[warning] 348-351: Do not use variable for regular expressions
Context: new RegExp(
String.raw\[TOOL_CALL\](${CURSOR_MCP_DISPLAY_PREFIX.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}[^\[\]]+)\[ARGS\],
"g",
)
Note: [CWE-1333] Inefficient Regular Expression Complexity. Security best practice.

(regexp-non-literal-typescript)

src/codex/catalog/effort.ts

[warning] Importing child_process exposes a command-execution surface; ensure any command/argument built from input is validated, and prefer execFile/spawn with an argument array over exec.
Context: import { execFileSync } from "node:child_process";
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process-typescript)

src/codex/catalog/provider-fetch.ts

[warning] Importing child_process exposes a command-execution surface; ensure any command/argument built from input is validated, and prefer execFile/spawn with an argument array over exec.
Context: import { execFileSync } from "node:child_process";
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process-typescript)


[warning] Importing child_process exposes a command-execution surface; ensure any command/argument built from input is validated, and prefer execFile/spawn with an argument array over exec.
Context: import { execFileSync } from "node:child_process";
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process-typescript)


[warning] Importing child_process exposes a command-execution surface; ensure any command/argument built from input is validated, and prefer execFile/spawn with an argument array over exec.
Context: import { execFileSync } from "node:child_process";
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process-typescript)


[warning] Importing child_process exposes a command-execution surface; ensure any command/argument built from input is validated, and prefer execFile/spawn with an argument array over exec.
Context: import { execFileSync } from "node:child_process";
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process-typescript)


[warning] Importing child_process exposes a command-execution surface; ensure any command/argument built from input is validated, and prefer execFile/spawn with an argument array over exec.
Context: import { execFileSync } from "node:child_process";
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(detect-child-process-typescript)

🪛 LanguageTool
devlog/_plan/260822_senpi_cursor_transfer/220_rotation.md

[grammar] ~5-~5: Ensure spelling is correct
Context: ...ecutive ~101K-token turns on one pinned conversationId (composer-2.5-fast) all completed (OK1....

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

devlog/_plan/260822_dev_release_readiness/009_roadmap_lock.md

[grammar] ~10-~10: Ensure spelling is correct
Context: ...catalog repair, tests, live smoke on macmini. 2. WP3 -> 310_maxmode_bigctx.md: 2-run...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

devlog/_plan/260821_bug_merge_train/000_triage_matrix.md

[uncategorized] ~21-~21: The operating system from Apple is written “macOS”.
Context: ...ctor, not the synchronous one (#1852)` (macos job). Rerun of failed jobs (attempt 2) ...

(MAC_OS)

devlog/_plan/260821_bug_merge_train/020_merge_2295.md

[style] ~10-~10: Consider an alternative for the overused word “exactly”.
Context: ...table-zero-byte. But the consequence is exactly the ENOENT behavior: clean homes still ...

(EXACTLY_PRECISELY)

docs-site/src/content/docs/fr/reference/configuration/providers.md

[typographical] ~289-~289: Caractère d’apostrophe incorrect.
Context: ... SelectedImage (plafond JPEG souple + blobIdWithData) pour les modèles qui voient les images...

(APOS_INCORRECT)


[style] ~290-~290: L’adverbe doit suivre le verbe, car il le modifie.
Context: ...dWithData`) pour les modèles qui voient les images nativement — Claude, Gemini, GPT, Kimi et Grok not...

(PLACE_DE_L_ADVERBE)


[typographical] ~293-~293: Caractère d’apostrophe incorrect.
Context: ...ssion. Auto, la famille Composer et GLM (glm-5.2, glm-5.3) restent sur la list...

(APOS_INCORRECT)


[typographical] ~293-~293: Caractère d’apostrophe incorrect.
Context: ... la famille Composer et GLM (glm-5.2, glm-5.3) restent sur la liste curatée `noVision...

(APOS_INCORRECT)


[style] ~294-~294: Un autre verbe peut sembler plus formel et professionnel.
Context: ...ur la liste curatée noVisionModels et passent par le sidecar de description d'images. Le...

(PASSER_PAR)

devlog/_plan/260821_bug_merge_train/040_merge_2296.md

[grammar] ~16-~16: Ensure spelling is correct
Context: ...pecheck, privacy:scan. Full suite on lidge at merged head. 3. Land via train PR to...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

docs-site/src/content/docs/zh-cn/reference/cli/lifecycle.md

[uncategorized] ~175-~175: 数词与名词之间一般应存在量词,可能缺少量词。
Context: ...Scheduler 和 WinSW 两者的缺失都得到证实后才会走安装路径。如果任一状态查询结果不确定,它会拒绝任何注册并提示运行 `ocx service statu...

(wa5)

devlog/_plan/260822_senpi_cursor_transfer/007_cli_fallback.md

[grammar] ~5-~5: Ensure spelling is correct
Context: .../code-yeongyu/senpi/pull/921). ## What senpi added cursor-cli-oauth is a **docume...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~19-~19: Ensure spelling is correct
Context: ...protobuf hardening. Native-first is the senpi recommendation too.

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

devlog/_plan/260822_senpi_cursor_transfer/003_protocol_compare.md

[style] ~7-~7: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...nd treat turns[] as display metadata. Both implement blob KV getBlobArgs/`setBlo...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

devlog/_plan/260822_senpi_cursor_transfer/190_round2_roadmap_lock.md

[grammar] ~13-~13: Ensure spelling is correct
Context: ...mer exists (live-transport.ts:93,1133). senpi constants live-verified in clone (cursor-agent.ts...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

devlog/_fin/260814_bun14-preview-dev/010_ci_composite.md

[uncategorized] ~5-~5: The official name of this software platform is spelled with a capital “H”.
Context: ... from package.json ## Files ### NEW: .github/actions/setup-project-bun/action.yml Co...

(GITHUB)


[uncategorized] ~27-~27: The official name of this software platform is spelled with a capital “H”.
Context: ...un.outputs.version }} ``` ### MODIFY: .github/workflows/ci.yml - Replace all 7 occurr...

(GITHUB)


[uncategorized] ~31-~31: The official name of this software platform is spelled with a capital “H”.
Context: ...iew-dev` to push.branches ### MODIFY: .github/workflows/service-lifecycle.yml - Repla...

(GITHUB)


[uncategorized] ~34-~34: The official name of this software platform is spelled with a capital “H”.
Context: ...with composite action ref ### MODIFY: .github/workflows/release.yml - Replace `bun-ve...

(GITHUB)

devlog/_plan/260822_senpi_cursor_transfer/120_small_hardening_pair.md

[grammar] ~24-~24: Ensure spelling is correct
Context: ...enCodex keeps its refresh retry / JWT accountId handling — 090 T07 note). - Tests: extend `tests/curso...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

devlog/_plan/260822_senpi_cursor_transfer/300_opus_fast_catalog.md

[grammar] ~6-~6: Ensure spelling is correct
Context: ...-8-high-fast -> SUCCESS ("FP-OK"); both maxMode arms succeed. - claude-opus-4-7-low-fas...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~28-~28: Ensure spelling is correct
Context: ..."claude-opus-4-8-fast": low/medium/high/xhigh/max per dump. - "claude-opus-5-fast":...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

devlog/_fin/260814_bun14-preview-dev/090_isolate_teardown.md

[uncategorized] ~5-~5: The official name of this software platform is spelled with a capital “H”.
Context: ...gacy job splits ## Files ### MODIFY: .github/workflows/ci.yml Add a consolidated tes...

(GITHUB)

devlog/_fin/260814_bun14-preview-dev/000_plan.md

[uncategorized] ~13-~13: The official name of this software platform is spelled with a capital “H”.
Context: ...ck + memory gate) - Write scope: src/, .github/, scripts/runtime/, tests/, devlog/, pa...

(GITHUB)


[uncategorized] ~34-~34: The official name of this software platform is spelled with a capital “H”.
Context: ... c-ci-sot: No hardcoded bun-version in .github/workflows/ (grep returns empty) - c-bun...

(GITHUB)

devlog/_plan/260822_senpi_cursor_transfer/090_transfer_verdict.md

[grammar] ~17-~17: Ensure spelling is correct
Context: ...all. Keep OpenCodex refresh retry / JWT accountId. | | T08 | Per-exec 3s heartbeat | **AD...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[style] ~51-~51: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...compact, or still needs remint (T02). - Whether empty unknown-exec replies currently st...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

devlog/_plan/260822_senpi_cursor_transfer/005_exec_compare.md

[grammar] ~15-~15: Ensure spelling is correct
Context: ...tches Pi family 45–51 and answers newer oneofs with typed refusals (mcpState, hooks, s...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~15-~15: Ensure spelling is correct
Context: ...05-609, #116`). That is the stall class senpi refused. OpenCodex-only: real backgrou...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~21-~21: Ensure spelling is correct
Context: ...s#L922-L946), issue #1026). Do not copy senpi here. ## Pairing / double-exec OpenCo...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

devlog/_plan/260822_senpi_cursor_transfer/210_maxmode.md

[grammar] ~24-~24: Ensure spelling is correct
Context: ...-8-high-fast -> SUCCESS ("FP-OK"); BOTH maxMode arms succeed. - claude-opus-4-7-low-fas...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

devlog/_plan/260822_dev_release_readiness/000_plan.md

[grammar] ~47-~47: Use a hyphen to join words.
Context: ...de Code thought-signature replay, vision routed describe executor (server half ...

(QB_NEW_EN_HYPHEN)

structure/02_config-and-codex-home.md

[grammar] ~98-~98: Use a hyphen to join words.
Context: ...ion correctly refused a missing row over routed residue; catalog sync could there...

(QB_NEW_EN_HYPHEN)

devlog/_plan/260821_bug_merge_train/030_merge_2294.md

[grammar] ~20-~20: Ensure spelling is correct
Context: ....md. 3. Merge into train, full suite on lidge at merged head, land via train PR to...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

devlog/_plan/260821_bug_merge_train/060_merge_2270.md

[grammar] ~3-~3: Ensure spelling is correct
Context: ...o remaining technical blocker). Review: supportsResponsesCustomTools capability plumbing (registry/derive/ty...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~13-~13: Ensure spelling is correct
Context: .... Adversarial review (inherited model): supportsResponsesCustomTools plumbing, compaction-body-last reorder...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

devlog/_fin/260814_bun14-preview-dev/011_github_canary_channel.md

[style] ~46-~46: Consider an alternative for the overused word “exactly”.
Context: ...led (npm 1.3.14, users) ``` That is exactly the A/B shape §4 of the task spec asks ...

(EXACTLY_PRECISELY)


[uncategorized] ~108-~108: The official name of this software platform is spelled with a capital “H”.
Context: ...ision gate exists to stop. ## MODIFY: .github/actions/setup-project-bun/action.yml A...

(GITHUB)


[uncategorized] ~124-~124: The official name of this software platform is spelled with a capital “H”.
Context: ...eeps its current behavior. ## MODIFY: .github/workflows/ci.yml Add a `bun-canary-qua...

(GITHUB)

docs-site/src/content/docs/fr/reference/cli/lifecycle.md

[style] ~151-~151: Ce verbe peut être considéré comme familier dans un contexte formel.
Context: ... opencodex comme service d’arrière-plan géré à l’ouverture de session — launchd ...

(VERBES_FAMILIERS_PREMIUM)


[style] ~154-~154: Un tiret long peut sembler plus approprié.
Context: ...on Codex. | Sous-commande | Action | | --- | --- | | aucune | Installe et démarre ...

(TIRET_LONG_1)


[style] ~154-~154: Un tiret long peut sembler plus approprié.
Context: ...ex. | Sous-commande | Action | | --- | --- | | aucune | Installe et démarre le ser...

(TIRET_LONG_1)


[style] ~155-~155: Ce mot apparaît déjà dans l’une des phrases précédant immédiatement celle-ci. Utilisez un synonyme pour apporter plus de variété à votre texte, excepté si la répétition est intentionnelle.
Context: ... | | --- | --- | | aucune | Installe et démarre le service s’il est absent ; sinon, act...

(FR_REPEATEDWORDS_DÉMARRER)


[style] ~156-~156: Ce mot apparaît déjà dans l’une des phrases précédant immédiatement celle-ci. Utilisez un synonyme pour apporter plus de variété à votre texte, excepté si la répétition est intentionnelle.
Context: ... réenregistrer. | | install | Crée et démarre le service. L’enregistrement exige une ...

(FR_REPEATEDWORDS_DÉMARRER)


[typographical] ~158-~158: Caractère d’apostrophe incorrect.
Context: ...réenregistrer. | | restart | Alias de repair. | | start | Démarre un service insta...

(APOS_INCORRECT)


[style] ~174-~174: Un synonyme peut apporter de la couleur à votre texte.
Context: ...llation qu'après avoir prouvé l'absence à la fois du Task Scheduler et de WinSW. Si l'une des requêtes de stat...

(A_LA_FOIS)

devlog/_plan/260822_senpi_cursor_transfer/200_round3_probe_plan.md

[style] ~3-~3: ‘for lack of’ might be wordy. Consider a shorter alternative.
Context: ...utdown. The 190 lock deferred five rows for lack of live evidence (T06 maxMode, T02 rotatio...

(EN_WORDINESS_PREMIUM_FOR_LACK_OF)

devlog/_plan/260822_senpi_cursor_transfer/002_senpi_cursor_inventory.md

[grammar] ~7-~7: Ensure spelling is correct
Context: ...hm. ## Layout Cursor is a first-class builtin provider, not an OpenCodex-style proxy ...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)


[grammar] ~40-~40: Ensure spelling is correct
Context: ...lt bodies. ## Deliberately not ported (senpi) Computer use, subagents, Cursor-managed ...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

devlog/_plan/260822_senpi_cursor_transfer/006_stream_overflow_compare.md

[grammar] ~17-~17: Use a hyphen to join words.
Context: ...lled > 8× and estimate ≥ 50k. OpenCodex generated TurnEndedUpdate is {} (`ge...

(QB_NEW_EN_HYPHEN)

devlog/_plan/260822_dev_release_readiness/090_go_verdict.md

[grammar] ~29-~29: Ensure spelling is correct
Context: ...-vision GET display drift on post-write noVision edits (L4). - P2 ops: deploy-key least-...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

devlog/_plan/260821_bug_merge_train/001_dependency_analysis.md

[uncategorized] ~17-~17: The operating system from Apple is written “macOS”.
Context: ...dev green (multiAgentGuidanceText #1852 macos failure; rerun already green — confirm ...

(MAC_OS)

devlog/_fin/260814_bun14-preview-dev/012_canary_findings.md

[style] ~69-~69: Consider an alternative for the overused word “exactly”.
Context: ...or a feature the user enabled. That is exactly the failure mode the function's own com...

(EXACTLY_PRECISELY)


[style] ~70-~70: ‘on account of’ might be wordy. Consider a shorter alternative.
Context: ...ainst: "reporting a feature as disabled on account of an unreadable file presents a failure a...

(EN_WORDINESS_PREMIUM_ON_ACCOUNT_OF)


[style] ~182-~182: Consider an alternative for the overused word “exactly”.
Context: ...orted platforms — Linux and Windows are exactly where the Bun 1.3.14 Worker and isolate...

(EXACTLY_PRECISELY)

structure/04_transports-and-sidecars.md

[style] ~72-~72: Consider shortening this phrase to just ‘whether’, unless you mean ‘regardless of whether’.
Context: ...quest. Replayed call items are lowered whether or not this turn declares the group they name....

(WHETHER)

🪛 markdownlint-cli2 (0.23.2)
devlog/_fin/260814_bun14-preview-dev/100_promotion_docs.md

[warning] 5-5: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

devlog/_fin/260814_bun14-preview-dev/020_bundle_canary.md

[warning] 5-5: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 6-6: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 9-9: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 12-12: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 15-15: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 16-16: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

devlog/_fin/260814_bun14-preview-dev/040_memory_harness.md

[warning] 5-5: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

devlog/_fin/260814_bun14-preview-dev/070_fetch_cancel.md

[warning] 5-5: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 6-6: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 19-19: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

devlog/_plan/260822_senpi_cursor_transfer/260_re_classification_refinement.md

[warning] 5-5: No space after hash on atx style heading

(MD018, no-missing-space-atx)

devlog/_plan/260822_senpi_cursor_transfer/190_round2_roadmap_lock.md

[warning] 7-7: No space after hash on atx style heading

(MD018, no-missing-space-atx)

devlog/_fin/260814_bun14-preview-dev/010_ci_composite.md

[warning] 5-5: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 27-27: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 31-31: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 34-34: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 37-37: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 38-38: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

devlog/_fin/260814_bun14-preview-dev/060_byte_queue.md

[warning] 5-5: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 14-14: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 20-20: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

devlog/_fin/260814_bun14-preview-dev/090_isolate_teardown.md

[warning] 5-5: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

devlog/_fin/260814_bun14-preview-dev/030_runtime_provenance.md

[warning] 5-5: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 6-6: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 17-17: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

devlog/_plan/260822_dev_release_readiness/001_delta_inventory.md

[warning] 7-7: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

devlog/_plan/260822_dev_release_readiness/000_plan.md

[warning] 18-18: No space after hash on atx style heading

(MD018, no-missing-space-atx)


[warning] 24-24: No space after hash on atx style heading

(MD018, no-missing-space-atx)

devlog/_plan/260822_senpi_cursor_transfer/006_stream_overflow_compare.md

[warning] 29-29: No space after hash on atx style heading

(MD018, no-missing-space-atx)

devlog/_fin/260814_bun14-preview-dev/050_stream_caps_revision.md

[warning] 5-5: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 6-6: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 26-26: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

devlog/_fin/260814_bun14-preview-dev/080_worker_settle.md

[warning] 5-5: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 6-6: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 19-19: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 21-21: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)


[warning] 28-28: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 29-29: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

devlog/_plan/260821_bug_merge_train/002_audit_synthesis.md

[warning] 5-5: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)


[warning] 16-16: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

🪛 OpenGrep (1.26.0)
src/vision/routed-describe.ts

[ERROR] 49-49: Dynamic command passed to child_process.exec/execSync. Use child_process.execFile or spawn with an argument array instead.

(coderabbit.command-injection.exec-js)

scripts/release.ts

[ERROR] 161-161: Dynamic command passed to child_process.exec/execSync. Use child_process.execFile or spawn with an argument array instead.

(coderabbit.command-injection.exec-js)

📝 Walkthrough

Walkthrough

This PR centralizes Bun setup, adds Bun 1.4 support, expands Cursor transport and vision handling, adds coordinator diagnostics and recovery, updates service commands, refines provider pricing and quotas, and adds related tests and documentation.

Changes

Runtime and CI

Layer / File(s) Summary
Repository Bun setup
.github/actions/setup-project-bun/action.yml, .github/workflows/*, package.json, scripts/ci/*
CI, release, and lifecycle workflows resolve Bun from package.json. Bun dependencies move to 1.4.0. Test batches accept OPENCODEX_BUN_PATH.
Bun qualification documentation
devlog/_fin/260814_bun14-preview-dev/*, README.md
The Bun 1.4 qualification plan, canary findings, runtime gates, and promotion documentation are added. Source-install instructions no longer upgrade to Canary.

Cursor and provider behavior

Layer / File(s) Summary
Cursor transport and request handling
src/adapters/cursor/*, tests/cursor-*
Cursor gains pooled HTTP/2 discovery, stream-health watchdogs, clean EOF settlement, typed unknown-exec responses, image preparation, selected-image serialization, tool-marker normalization, and size-aware error classification.
Vision routing
src/vision/*, src/server/management/*, gui/src/pages/*, src/types/config.ts, tests/vision-*
Vision sidecars support a routed backend with namespaced models. The loopback describe flow validates images, applies recursion protection, and returns generated captions.
Provider metadata and pricing
src/providers/*, src/codex/catalog/*, src/usage/*, src/adapters/google.ts, tests/*
Provider capability metadata, xAI Priority pricing, Z.AI quota formats, Cursor model catalogs, Google thought signatures, and Responses tool compatibility are updated.

CLI and release flows

Layer / File(s) Summary
Coordinator diagnosis and recovery
src/codex/coordinator-doctor.ts, src/codex/inject-coordination.ts, src/cli/doctor.ts, tests/codex-*
ocx doctor inspects coordinator state and can recover verified stable zero-byte remnants into timestamped backups. Fresh or unsafe states remain protected.
Service command planning
src/service.ts, src/cli/registry.ts, tests/service.test.ts, docs-site/src/content/docs/*/reference/cli/lifecycle.md
Bare service commands select install or repair from installation probes. restart aliases repair. Windows registration stops when status is unknown.
Release and desktop helpers
scripts/release.ts, scripts/restart-codex-desktop-app.ps1, tests/release-helper.test.ts
Release pushes support validated deploy-key SSH targets. A PowerShell helper safely restarts the Codex MSIX application.

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

Merge Risk: 🟠 High · up to ced9a

This release promotion brings unresolved runtime changes to main that can reuse stale image context, abort active model discovery, fail routed vision on non-loopback binds, and accept oversized image payloads, causing incorrect results, failed requests, or resource pressure; the release is not merge-ready until these high-impact issues are fixed or explicitly accepted.

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 37.07% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 116 functions across 50 files. (170 skipped: 92 unsupported, 78 over the file limit.) Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately identifies the dev-to-main release promotion for v2.31.0, which matches the pull request objective.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

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 changed the title release: promote dev to main for v2.31.0 [WRONG BRANCH] release: promote dev to main for v2.31.0 Aug 22, 2026
@github-actions

github-actions Bot commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

⏳ DRAFT

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

What to do

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

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

@github-actions
github-actions Bot marked this pull request as draft August 22, 2026 06:36
@lidge-jun
lidge-jun marked this pull request as ready for review August 22, 2026 06:51
@lidge-jun
lidge-jun merged commit ceed6bf into main Aug 22, 2026
77 of 87 checks passed
@lidge-jun

Copy link
Copy Markdown
Owner Author

리뷰 · 우선순위 31 / 80

설명: 이 PR은 devced9a85c5 를 main 으로 올려 v2.31.0 을 만들려는 메인테이너 승격이다. 지금 CURRENT dev HEAD도 같은 ced9a85c5 이다. 이 시간에 착지한 것은 문서뿐이다. #2348 WP4 감사(0 P0/P1, P2 두 개, 14264 통과), #2349 GO 판정. GO 문서는 코드 마지막을 #2346 Opus Fast 카탈로그로 두고 a012a46 이후 devlog 만 다르다고 적는다. 승격 자체는 MAINTAINERS.md 가 메인테이너 일이라고 한다. 기여자 PR 은 dev 만 받게 되어 있다. 타깃 브랜치 검사는 dev 만 통과시킨다. 게이트가 [WRONG BRANCH] 를 붙이고 드래프트로 둔 것은 기여자 규칙대로다. 이 PR을 dev 로 되돌리면 승격이 아니라 자기 자신으로의 머지가 된다. 그건 답이 아니다. 현재 HEAD package.json 은 아직 2.27.0 이다. 태그는 v2.29.0, 프리뷰 태그는 v2.30.0-preview.20260821 이 있다. 본문은 114 커밋을 main 으로 가져간다고 한다. 새 기능 코드는 이 PR이 쓰지 않는다. Cursor #2334 CursorCredentialRouter 는 여전히 src/providers/cursor-pool.ts 모듈+테스트만 있고 어댑터에 연결되지 않았다. #2332 H2 풀은 discovery 전용. #2347 maxMode 큰 컨텍스트 A/B 는 NOOP. 카탈로그 팁은 Ox Alpha x-preview-f-free + deepseek-v4-flash-vision-exp. #2188 사이드카+routed vision 은 이미 dev. GO 가 난 것과 배포를 지금 할지는 다른 결정이다. 이 페이지는 그 결정을 대신하지 못한다. 프로세스 충돌이라 31.

PR base main / head dev - 기여자 게이트는 dev 만 받는다. main 타깃은 승격용으로 맞지만 이 워크플로 PR 로는 통과하지 못한다
MAINTAINERS.md 타깃 검사 - 기여자 PR 은 dev. 승격은 메인테이너 직접 통제. 이 이슈 트래커 PR 로 우회하지 말 것
package.json 2.27.0 vs 본문 v2.31.0 - 버전 범프 커밋이 이 PR 안에 없다.
devlog/_plan/260822_dev_release_readiness/090_go_verdict.md - GO 는 dev 상태 인증이다. main 배포 허가가 자동으로 나오지 않는다
게이트 [WRONG BRANCH] 드래프트 - dev 로 리타깃하지 말 것. 리타깃하면 승격이 사라진다

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

  • GO 직후 main 을 preview 없이 바로 올릴지, P2 두 개와 #2334 미연결 라우터를 먼저 둘지
  • 이 GitHub PR 을 닫고 직접 승격으로 갈지, 게이트 예외를 승격 PR 에만 둘지
  • 버전을 2.31.0 으로 올리는 범프를 어디서 만들지

너의 추천
dev 로 리타깃하지 말 것. 이 PR은 닫는다. 승격은 MAINTAINERS.md 대로 메인테이너가 main 에 한다. 패키지 버전 범프와 태그는 그 절차 안에 둔다. #2353 preview 승격이 먼저다. 둘 다 기여자 게이트에 넣지 말 것. 라벨은 그대로 둔다. types.ts/config.ts 스플릿과 무관하다.

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

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants