Skip to content

[WRONG BRANCH] release: sync dev into preview for 2.27.0 - #2161

Merged
lidge-jun merged 154 commits into
previewfrom
codex/sync-preview-2.27.0
Aug 20, 2026
Merged

[WRONG BRANCH] release: sync dev into preview for 2.27.0#2161
lidge-jun merged 154 commits into
previewfrom
codex/sync-preview-2.27.0

Conversation

@lidge-jun

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

Copy link
Copy Markdown
Owner

Summary

  • Syncs dev into preview so the prerelease train carries the same code as the 2.27.0 stable promotion ([WRONG BRANCH] release: promote dev to main for 2.27.0 #2159).
  • The resulting tree is byte-identical to origin/dev (git diff origin/dev HEAD is empty).
  • The only merge conflict was the package.json version line, resolved to 2.27.0. A preview release still requires a -preview. prerelease version, which release.ts and release.yml both enforce on the preview branch; this PR only syncs code and does not cut a preview release.

Verification

Same head as the 2.27.0 promotion, verified locally on Windows 11 with Bun 1.3.14:

Checklist

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

Summary by CodeRabbit

  • New Features

    • Added ocx doctor diagnostics and optional cleanup for abandoned response-state temporary files.
    • Improved namespaced and custom tool handling, model capabilities, tool modes, and provider routing.
    • Added OpenRouter Fast-tier capability and lower-bound cost estimates with localized displays.
  • Bug Fixes

    • Improved Windows startup, process detection, tray path handling, and service proxy support.
    • Prevented post-completion aborts from incorrectly failing requests.
    • Hardened service definitions containing proxy credentials.
  • Documentation

    • Added troubleshooting guidance, configuration references, and release planning updates.
  • Chores

    • Released version 2.27.0 and extended Windows test timeouts.

Ingwannu and others added 30 commits August 18, 2026 12:31
…te pinning

Phase B2 of the FastWire umbrella (#1886), and a documented
correction to what that issue proposed.

The umbrella specified an atomic route pin for OpenRouter — only inject a tier
alongside `provider: { only: [...], allow_fallbacks: false }` — to stop a tier
reaching an upstream that would silently bill for it. OpenRouter's own
documentation retires that requirement, and shows the proposal would not even
have worked:

- Tier endpoints are separate suffixed slugs (`openai/priority`), and they are
  explicitly NOT matched by base slugs. Pinning `only: ["openai"]` would have
  excluded the very endpoint that serves priority.
- Priority tries tier endpoints first and falls back otherwise, and billing
  always follows the endpoint actually used — so the silent-overbilling risk the
  pin existed to prevent does not exist.
- The response reports the tier actually served.

Pinning would therefore have turned a graceful capacity fallback into a hard
failure while protecting against nothing. Downgrade safety instead rests on B0's
confirmation model, which was built for exactly this contract.

What this adds:

- The three OpenAI-backed slugs we ship get exact-model capability. The provider
  stays unclassified, and `anthropic/claude-sonnet-5` is left out because
  OpenRouter does not list Anthropic among its priority upstreams.
- Registry model capability is now guarded by destination. A provider merely
  named `openrouter` but pointed at someone's own gateway must not inherit
  evidence gathered about openrouter.ai, and OpenRouter's endpoint is fixed, so
  the guard reads the operator's configured base URL rather than the routed one.
  Catalog and runtime both feed it that same configured value, keeping A1's
  one-resolver invariant intact.
- The Chat surface finally reads the upstream's `service_tier` echo, closing the
  gap B0 left open. Without it every OpenRouter Fast request would have recorded
  `assumed` even when OpenRouter told us it had fallen back to standard.
- A confirmed priority result with no bundled tier price is now billed at the
  standard rate but flagged a floor rather than silently reported as exact:
  OpenRouter documents priority as "faster, higher cost", so standard is provably
  a lower bound. Scoped to canonical priority only — flex is cheaper, so the same
  argument would be false there.

A first attempt scoped capability with the registry's `preserveCustomDestination`
flag. It worked, but that flag also decides provider claiming and hosted-tool
preference validation, and the full suite caught it changing which configs
`openrouter` accepts. The destination guard above replaces it and touches
nothing outside FastWire.

Full suite: 13361 pass / 10 skip / 1 fail — the pre-existing dev-side
key-login-live-update regression, which reproduces on pristine dev.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Screenshot evidence for #2080: the Logs table showing a
confirmed-priority OpenRouter request rendered as a floor (≥$) next to a
response-declined downgrade and a standard request (~$).

Taking this screenshot is what surfaced two defects the test suites missed: the
lower-bound marker disagreed with the parallel xAI unit's rendering, and the fix
for it initially reached only the detail panel because the table cell had its own
inline formatter. Both paths now share one implementation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
resolveInputCeiling read modelContextWindows and modelMaxInputTokens with
a bare lookup, while the catalog resolves the same two maps through
modelRecordValue, which also accepts a family entry for a tagged id.

With contextWindow 8_000 and modelContextWindows {"gpt-oss": 131_072}:

  catalog advertises   131_072   provider-fetch.ts:612
  admission ceiling      8_000   before this change

So the gate refused turns the model can plainly hold, using a window that
belongs to a different model. That is the opposite of what this module
documents about itself -- "every uncertainty resolves toward admitting".

modelMaxInputTokens had the mirror of it: a family cap never applied to
the tagged sibling it was written for.

Three tests, all red without the src change and green with it. The first
asserts the catalog's value first so the two can never drift apart again.
No behavior changes for ids that already resolved exactly.
`ocx models` classified each row with bare lookups while the proxy
resolves the same four fields through modelInList / modelRecordValue,
which accept a family entry for a tagged id.

With models ["gpt-oss:120b"], noVisionModels ["gpt-oss"],
modelContextWindows {"gpt-oss": 131072} and
modelReasoningEfforts {"gpt-oss": ["low","high"]}:

  runtime   isModelTextOnly = true, window 131072, efforts [low, high]
  ocx models  {"contextWindow":null,"inputModalities":null,
               "reasoningEfforts":null}

Every field came back unclassified, so a text-only model reads as
image-capable and a configured window reads as unset -- for a config the
proxy honours in full.

Two tests. The first asserts isModelTextOnly first, so the command is
pinned to the runtime's answer rather than to a copy of it; it is red
without the src change. The second pins exact-over-family precedence and
passes either way -- it guards the fix from over-reaching, it is not
evidence of the bug.

237 tests green across cli-models, vision-eligibility, codex-catalog and
input-admission. tsc --noEmit clean.
@Wibias stepped down from developing opencodex, and repository permission was
reduced to read access. Move him out of the current-maintainers table into a
new Former maintainers section, drop him from the CODEOWNERS default-reviewer
line and the four high-impact runtime paths, and record the change with the
2026-07-27 addition entry it closes.

Nothing he authored is unwound: commits, merged pull requests, release-note
attributions, and the code comments citing his reviews stay as they are.
isModelTextOnly returns true on the noVisionModels match before it ever
reads modelInputModalities, so a `gpt-oss` noVision entry beats an exact
`gpt-oss:120b` entry that lists "image". Resolving the exact entry first
made `ocx models` advertise image support the proxy then rejects — the
same class of drift this PR set out to remove.

Add the conflicting-config regression case, which asserts the runtime's
answer via isModelTextOnly before comparing the CLI's.

Thanks @coderabbitai for catching it.
…cates

An early break abandons the enumeration generator instead of resuming it, so
the finally that closes the directory handle never runs. The periodic reclaim
truncates by design -- entry cap, cleanup cap, wall-clock deadline -- which
turned that into one leaked handle per truncated tick.

Route every early exit through a stopScan() helper that calls iterator.return()
before returning, and add a regression that fails when the fix is reverted.

Also repairs the deadline test's oracle. Its fake clock started at 0 while the
fixtures carried real epoch mtimes, making every computed age negative, so the
files survived the 15-minute grace whether or not a deadline check existed --
the test passed against its own ablation. Anchor the clock to real time and add
an explicit unbounded-run assertion so the deadline is the only reason nothing
is removed.
…ly fire

The budget warning keyed on eligible > removed + failed, which is unreachable
outside a dry run: an entry is counted eligible and then unlinked or failed on
the same iteration, so the two are always equal. An operator whose backlog
exceeded the cleanup budget was told the reclaim had finished.

Carry an explicit truncated flag on the scan result instead, set wherever the
loop stops on a budget rather than on the end of the directory, and OR it
across the swept directories. The dry-run report is bounded by the entry cap
too, so a truncated report now says the count is a floor.

The partial-reclaim test asserted a state production cannot reach; it now uses
a reachable one and is paired with an ablation guard that fails if the warning
stops depending on the flag.
lidge-jun and others added 13 commits August 20, 2026 05:00
A-reduced fails on Windows with exitCode 1 and the assertion said only "expected 0, got 1". runCli already captures stdout and stderr; the message now carries them, so the next Windows round names the CLI failure instead of leaving it to be guessed at. Diagnostic only.
The last four Windows composed-acceptance failures all resolve to one cause,
which only became visible after the previous commit put the CLI's own output in
the assertion message:

  CodexUserIdentityRefusal: Windows effective-account lookup timed out

8s is a generous ceiling for powershell.exe -Command on a real desktop and is
not one on a GitHub Windows runner executing a quarter of this suite. The child
was still starting, not hung — and bounding a hung child is the only thing that
budget exists to do.

Gated on CI alone, so a user's machine keeps the 8s ceiling exactly as before
and the recoverable-refusal contract is unchanged where it matters.

This is NOT a regression from this release range: src/codex/user-identity.ts
has zero commits in main..dev. It is a pre-existing CI-only limit that was
invisible until the diagnostics landed.

The contract test now pins BOTH values rather than loosening to a range. Its
comment says the point is to stop a silent re-tune, and a range would permit
exactly that; two exact assertions keep the guard while admitting the second
number. Ablated to confirm it fails without the change.

Refs #2108
The previous commit widened the Windows identity-lookup budget on CI, and the Windows shard still refused with "effective-account lookup timed out". The reason is in this fixture: env() is a deliberate whitelist, so CI never reached the child and the CLI kept the 8s desktop ceiling.

Named explicitly rather than inheriting process.env, which is what the whitelist is for.
The Windows shard caught a real hole in my own fix: "a symlinked database is
still refused" went from pass to FAIL. The widening let through exactly what
the guard exists to refuse.

The bug was self-referential. databasePathIsSafe calls
sameLogGuardPathIdentity(realpathSync.native(path), path) — so realPath is
ALREADY the resolved form. Re-resolving the requested path produced the same
value on both sides, and a symlinked database compared equal to itself.

The check is now link-aware. A short-name expansion rewrites the spelling of
components that are all still directories on one chain, so requiring that no
component of the request is a link is sufficient: with none present, any
remaining difference is the OS's own canonical spelling. A symlink or junction
anywhere in the chain fails closed, and an unreadable component fails closed
too.

Refs #1729

Verification: 21 pass / 0 fail across the two Log Guard suites, tsc --noEmit
exit 0. The symlink verdict was also checked directly against the exact call
shape the caller uses — realpathSync.native(link) versus link — which is the
shape that made the first version wrong and which the POSIX suites do not
exercise.

Worth recording plainly: this is the second time in this branch that a Windows
fix of mine created a defect the platform legs then caught. The tests are doing
their job; my first cut of a fail-closed boundary is not to be trusted without
them.
The Windows shard showed a second failure mode behind the first: a case failing
with "Expected: 0, Received: 143" on a child it had just spawned, immediately
after Bun printed "killed 1 dangling process".

That is a cascade, not six independent failures. A case that times out leaves a
live `ocx start`. Teardown was supposed to reap it, but the wait threw on the
first child that did not exit inside 10s, so the rest of the loop — including
every remaining child and the lock-file cleanup — never ran. The survivor was
then killed by Bun's between-file sweep, and the next case's child died with it.

Two fixes, both in teardown:

- cleanup() now SIGTERMs every child, waits for each independently rather than
  aborting the loop, and SIGKILLs whatever is still alive. A survivor is
  strictly worse than an ungraceful exit; the case is already over.
- afterEach drains every fixture before reporting, so one fixture's teardown
  failure cannot strand another fixture's children.

This does not make the underlying case faster. It stops one slow case from
being charged to unrelated ones, which is what made the Windows failures look
like a moving target across runs.

Refs #2108

Verification: 8 pass / 0 fail locally, tsc --noEmit exit 0. The Windows shard
is the only place the cascade reproduces.

Context worth recording: WP13 has never passed on Windows. It has zero commits
in main..dev, and the 2026-08-18 run I originally compared against had shard
4/4 CANCELLED, so those cases never executed there. "Pre-existing on dev" was
true; "already known to pass" was not, and I stated the second when I only had
evidence for the first.
…cale

The Windows shard said "this test timed out after 30000ms" on two cases while
the file's per-case budget is 150s on CI. Both were hardcoded 30_000 values the
earlier commit missed: the E lock case's own per-test budget, and the restore
watchdog inside the Restore-truth case.

So those two were never given the headroom the rest of the file got, and their
failures were being read as slow-runner evidence when they were a stale
constant.

Both now use the same scale as everything around them: CASE_TIMEOUT_MS for the
per-case budget, watchdogMs() for the in-test watchdog. No new numbers.

Refs #2108

Verification: 8 pass / 0 fail locally, tsc --noEmit exit 0, and a grep confirms
no bare 30_000 remains in the file.
…al-path

fix(log-guard): accept the OS's own canonical spelling on Windows
docs(devlog): record release readiness for 2.27.0 and the Windows gate decision
docs(devlog): record the local Windows verification behind the 2.27.0 promotion
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner August 20, 2026 00:12
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@github-actions

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@coderabbitai

coderabbitai Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: cc2605ab-9bc8-474c-8226-43097ec8ffa8

📥 Commits

Reviewing files that changed from the base of the PR and between 6d6a1b4 and 17c8a3a.

⛔ Files ignored due to path filters (1)
  • devlog/_plan/260818_fastwire_b2_openrouter/evidence/010_logs_openrouter_priority_lower_bound.png is excluded by !**/*.png
📒 Files selected for processing (155)
  • .github/CODEOWNERS
  • .github/workflows/ci.yml
  • MAINTAINERS.md
  • devlog/_plan/260818_fastwire_b2_openrouter/evidence/README.md
  • devlog/_plan/260818_megafile_split_program/010_wp1_types_value_leaves.md
  • devlog/_plan/260818_megafile_split_program/020_wp1b_type_clusters.md
  • devlog/_plan/260818_megafile_split_program/030_wp2a_provider_name_leaf.md
  • devlog/_plan/260819_next_roadmap/000_roadmap.md
  • devlog/_plan/260819_next_roadmap/010_r1_split_rebase.md
  • devlog/_plan/260819_next_roadmap/020_r2_temp_reclaim_merge.md
  • devlog/_plan/260819_next_roadmap/030_r3_collisions_and_retargets.md
  • devlog/_plan/260819_next_roadmap/031_r3_posted_decisions.md
  • devlog/_plan/260819_next_roadmap/040_r4_modelrecordvalue_batch.md
  • devlog/_plan/260819_next_roadmap/041_r4_posted_verdicts.md
  • devlog/_plan/260819_next_roadmap/050_execution_ledger.md
  • devlog/_plan/260819_next_roadmap/060_outcome.md
  • devlog/_plan/260819_next_roadmap/070_next_roadmap_split_and_dogfood.md
  • devlog/_plan/260819_next_roadmap/080_merge_loop_ledger.md
  • devlog/_plan/260819_next_roadmap/090_merge_loop_outcome.md
  • devlog/_plan/260819_response_state_temp_reclaim/000_plan.md
  • devlog/_plan/260819_response_state_temp_reclaim/001_audit_round1.md
  • devlog/_plan/260819_response_state_temp_reclaim/002_audit_round1_late.md
  • devlog/_plan/260819_response_state_temp_reclaim/010_phase1_periodic_sweeper.md
  • devlog/_plan/260819_response_state_temp_reclaim/011_audit_round2.md
  • devlog/_plan/260819_response_state_temp_reclaim/012_phase1_verification.md
  • devlog/_plan/260819_response_state_temp_reclaim/020_phase2_doctor_reclaim.md
  • devlog/_plan/260819_response_state_temp_reclaim/021_audit_round3.md
  • devlog/_plan/260819_response_state_temp_reclaim/022_phase2_verification.md
  • devlog/_plan/260819_unclaimed_bug_selection/000_investigation.md
  • devlog/_plan/260819_unclaimed_bug_selection/010_ranking.md
  • devlog/_plan/260819_unclaimed_bug_selection/020_2114_systemd_bus.md
  • devlog/_plan/260819_unclaimed_bug_selection/030_2107_service_proxy_env.md
  • devlog/_plan/260819_unclaimed_bug_selection/031_2107_implementation.md
  • devlog/_plan/260819_unclaimed_bug_selection/040_2108_windows_reboot_gate.md
  • devlog/_plan/260819_unclaimed_bug_selection/050_1587_deferred_catalog.md
  • devlog/_plan/260819_unclaimed_bug_selection/060_1933_tray_encoding.md
  • devlog/_plan/260819_unclaimed_bug_selection/061_1933_implementation.md
  • devlog/_plan/260819_unclaimed_bug_selection/070_sequencing.md
  • devlog/_plan/260819_unclaimed_bug_selection/075_verification.md
  • devlog/_plan/260819_unclaimed_bug_selection/080_outcome.md
  • devlog/_plan/260819_unclaimed_bug_selection/090_1527_abort_slice.md
  • devlog/_plan/260819_unclaimed_bug_selection/100_post_split_rebase.md
  • devlog/_plan/260819_unclaimed_bug_selection/110_2114_disposition.md
  • devlog/_plan/260819_unclaimed_bug_selection/120_2108_phase1.md
  • devlog/_plan/260819_unclaimed_bug_selection/121_2108_implementation.md
  • devlog/_plan/260819_unclaimed_bug_selection/130_ci_proxy_env_leak.md
  • devlog/_plan/260819_unclaimed_bug_selection/140_final_audit.md
  • devlog/_plan/260819_unclaimed_bug_selection/150_outcome.md
  • devlog/_plan/260819_unclaimed_bug_selection/170_2114_2108_fences.md
  • devlog/_plan/260819_unclaimed_bug_selection/180_windows_leg.md
  • devlog/_plan/260819_unclaimed_bug_selection/190_release_readiness.md
  • devlog/_plan/260819_unclaimed_bug_selection/200_local_windows_verification.md
  • docs-site/astro.config.mjs
  • docs-site/src/content/docs/guides/codex-integration.md
  • docs-site/src/content/docs/guides/sub-agent-surface.md
  • docs-site/src/content/docs/reference/configuration/providers.md
  • docs-site/src/content/docs/troubleshooting/disk-usage-temp-files.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
  • gui/tests/logs-priority-lower-bound.test.ts
  • package.json
  • src/adapters/anthropic.ts
  • src/adapters/base.ts
  • src/adapters/command-code.ts
  • src/adapters/cursor/cursor-errors.ts
  • src/adapters/cursor/live-transport.ts
  • src/adapters/google.ts
  • src/adapters/openai-chat.ts
  • src/adapters/tool-catalog-nudge.ts
  • src/bridge.ts
  • src/cli/doctor.ts
  • src/cli/help.ts
  • src/cli/models.ts
  • src/codex/app-server-processes.ts
  • src/codex/auth-context.ts
  • src/codex/catalog/aggregation.ts
  • src/codex/catalog/parsing.ts
  • src/codex/catalog/provider-fetch.ts
  • src/codex/catalog/sync.ts
  • src/codex/log-guard/path-safety.ts
  • src/codex/native-profile-startup.ts
  • src/codex/user-identity.ts
  • src/config.ts
  • src/config/provider-name.ts
  • src/images/loop.ts
  • src/lib/state-store-registrations.ts
  • src/providers/antigravity-models.ts
  • src/providers/derive.ts
  • src/providers/registry.ts
  • src/providers/service-tier.ts
  • src/responses/parser.ts
  • src/responses/state.ts
  • src/router.ts
  • src/routing/compatibility/behavior.ts
  • src/routing/profile.ts
  • src/server/index.ts
  • src/server/management/shared.ts
  • src/server/responses/collaboration.ts
  • src/server/responses/core.ts
  • src/server/responses/input-admission.ts
  • src/service-manager-probe.ts
  • src/service.ts
  • src/tray/windows.ts
  • src/types.ts
  • src/types/accounts.ts
  • src/types/config.ts
  • src/types/provider.ts
  • src/types/request.ts
  • src/types/tools.ts
  • src/types/wire.ts
  • src/usage/cost.ts
  • src/web-search/loop.ts
  • structure/03_catalog-and-subagents.md
  • tests/adapter-tool-conformance.test.ts
  • tests/catalog-vision-sidecar-modalities.test.ts
  • tests/ci-workflows.test.ts
  • tests/cli-models.test.ts
  • tests/codex-app-server-processes.test.ts
  • tests/codex-auth-context.test.ts
  • tests/codex-composed-acceptance.test.ts
  • tests/codex-log-guard-coderabbit.test.ts
  • tests/codex-service-manager-probe.test.ts
  • tests/codex-tool-mode.test.ts
  • tests/command-code-provider.test.ts
  • tests/config.test.ts
  • tests/cursor-cancel-provenance.test.ts
  • tests/doctor.test.ts
  • tests/fastwire-observability.test.ts
  • tests/google-antigravity-wire.test.ts
  • tests/helpers/responses-conformance.ts
  • tests/input-admission.test.ts
  • tests/multi-agent-compat.test.ts
  • tests/native-profile-startup.test.ts
  • tests/provider-registry-parity.test.ts
  • tests/reasoning-effort.test.ts
  • tests/responses-parser.test.ts
  • tests/responses-state.test.ts
  • tests/responses-tool-conformance.test.ts
  • tests/service-tier-capability.test.ts
  • tests/service.test.ts
  • tests/state-store-sweeper.test.ts
  • tests/tool-catalog-nudge.test.ts
  • tests/types-barrel-identity.test.ts
  • tests/windows-popup-fix.test.ts
  • tests/windows-tray.test.ts
  • tests/xai-tool-schema.test.ts

📝 Walkthrough

Walkthrough

This release updates Windows runtime handling, response-state recovery, service definitions, provider and tool routing, cost reporting, type-module organization, documentation, CI timeouts, and maintainer metadata.

Changes

Runtime and platform behavior

Layer / File(s) Summary
Response-state recovery and doctor flow
src/responses/state.ts, src/cli/doctor.ts, src/lib/state-store-registrations.ts, tests/responses-state.test.ts, tests/doctor.test.ts
Adds periodic cleanup, boot-time-aware PID handling, bounded scans, dry-run inspection, and opt-in reclamation.
Windows discovery and service handling
src/codex/app-server-processes.ts, src/service-manager-probe.ts, src/service.ts, src/tray/windows.ts
Adds asynchronous catalog checks, offline service probing, proxy propagation, secure service-definition writes, and Windows registry decoding.
Startup and path safety
src/codex/native-profile-startup.ts, src/codex/auth-context.ts, src/codex/log-guard/path-safety.ts
Adds bounded ownership reprobes, startup-fence diagnostics, and guarded Windows path canonicalization.

Provider, tool, and protocol behavior

Layer / File(s) Summary
Provider and catalog resolution
src/providers/*, src/codex/catalog/*, src/config.ts, src/router.ts, src/cli/models.ts
Adds guarded service-tier capabilities, model-family matching, routed Codex tool modes, and discovered Antigravity effort mappings.
Namespaced tool handling
src/types/tools.ts, src/responses/parser.ts, src/server/responses/collaboration.ts, src/bridge.ts, src/adapters/*
Preserves namespaces and freeform metadata, resolves unique bare selectors, rejects ambiguous wire names, and restores custom-tool namespaces.
Type modules and cost observability
src/types.ts, src/types/*, src/usage/cost.ts, gui/src/pages/Logs.tsx, gui/src/pages/logs-cost-format.ts
Splits public declarations into leaf modules and adds OpenRouter priority lower-bound pricing and localized aggregation.

Documentation and repository operations

Layer / File(s) Summary
Planning and verification records
devlog/_plan/**
Adds plans, audits, roadmaps, implementation records, verification results, and outcome records.
Documentation and metadata
docs-site/**, structure/03_catalog-and-subagents.md, MAINTAINERS.md, .github/CODEOWNERS, .github/workflows/ci.yml, package.json
Updates troubleshooting and provider documentation, decision logs, maintainer records, reviewer assignments, Windows timeout handling, and version 2.27.0.

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

Possibly related issues

  • #2152 — The Windows CI timeout and composed-acceptance timeout changes address documented Windows timeout failures.

Possibly related PRs

Suggested labels: chore

Suggested reviewers: ingwannu

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the primary change: syncing the dev branch into preview for the 2.27.0 release train.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/sync-preview-2.27.0

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: sync dev into preview for 2.27.0 [WRONG BRANCH] release: sync dev into preview for 2.27.0 Aug 20, 2026
@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

⏳ DRAFT

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

What to do

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

UI screenshot waived by a maintainer comment.
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 20, 2026 00:13
@lidge-jun

Copy link
Copy Markdown
Owner Author

Maintainer note: this is the release-train sync of dev into preview accompanying the 2.27.0 promotion (#2159), which is the documented exception to the dev-only target rule. Tree is byte-identical to origin/dev, so this does not change gui.

@lidge-jun
lidge-jun marked this pull request as ready for review August 20, 2026 00:34
@lidge-jun
lidge-jun merged commit a055461 into preview Aug 20, 2026
28 of 30 checks passed
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

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.

8 participants