Skip to content

release: promote verified 2.52.0-preview.20260912 product tree to preview - #4406

Merged
lidge-jun merged 26 commits into
previewfrom
codex/release-2520-preview-20260912-b
Sep 12, 2026
Merged

release: promote verified 2.52.0-preview.20260912 product tree to preview#4406
lidge-jun merged 26 commits into
previewfrom
codex/release-2520-preview-20260912-b

Conversation

@lidge-jun

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

Copy link
Copy Markdown
Owner

Summary

Verification

  • Regression sweep over every non-merge commit in the previously unverified window is recorded in devlog/_plan/260912_release_regression_train/025_sweep_results.md.
  • The preview push-event Cross-platform CI run on this promotion is the release gate and has to pass before anything publishes.
  • enforce-target rejects this PR because it targets preview; that is the promotion exception in the branch policy.
  • Local tests, build, typecheck and install: NOT RUN under the standing restriction.

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 opt-in experimental Codex context management for native history and notes endpoints.
    • Added context-session ownership and account-affinity safeguards across direct and pooled access.
    • Preserved conversation identity headers, request IDs, and cache keys across Chat-to-Responses requests.
    • Added Codex-compatible backend routing for supported loopback data-plane requests.
  • Bug Fixes

    • Improved request cancellation during Codex credential retrieval.
    • Corrected platform-specific Devin CLI credential path handling.
    • Improved configuration-restore failure reporting and prevented incomplete follow-up restoration.
  • Documentation

    • Documented context management, conversation identity forwarding, ownership behavior, and platform-specific credential paths.

lidge-jun and others added 26 commits September 12, 2026 21:10
Repair three Windows CI failures. Discovery fixtures follow host-native path joins; credential paths follow the explicit platform argument while retaining override validation.
…pair

test(update): use host-native pnpm shim fixtures
…vin-windows

fix(devin-cli): honor platform path semantics in credential discovery
…ge owner

Carry #3663 from 8e0b53b with two contract changes: context ownership is partitioned by the admission principal minted for the matched opencodex API key and bound to the stable user the accepted credential proves, and one deadline covers the whole relay starting before the body is read. Local product tests NOT RUN per explicit user instruction; hosted CI follows.

Co-authored-by: ykvv <229483879+y2ambition-ai@users.noreply.github.com>

Co-authored-by: nbbb26 <259064678+nbbb26@users.noreply.github.com>
…before relay dispatch

Address review of the relay carry: a caller bearer must be the exact credential an accepted model turn used, a credential proving no stable user cannot rebind an entry by sharing its workspace id, conflicting user claims poison the existing entry, and admission is re-resolved against the listener policy before dispatch. Tests updated for the new signatures with regressions for each rule. Local product tests NOT RUN per explicit user instruction.
…sions

Issue distinct tokens for one proven user so refresh and rotation cases exercise a changed fingerprint, keep the root-mismatch regression on an authenticated admission, and assert the superseded caller bearer stops matching.
The deadline now starts before credential selection, so a client that leaves during that wait must be reported as a hangup with nothing dispatched and the admitted turn released.
…dex key

Security review found the relay unreachable in its only supported configuration: the default bind is loopback, admission there never reads a token, and the injector only rewrites the base URL for loopback hosts, so every history call returned 403 even with a valid key. The relay now asks the identity question separately from admission - a context request presenting a real opencodex key owns its sessions, one presenting none is still refused - and a regression exercises the real resolver instead of a hand-built admission.
…wnership

Security re-audit found the previous fix one-sided: the relay could name a loopback caller but the model turn still recorded ownership from admission alone, so a correctly named caller found no entry and got 409. Both paths now use resolveContextPrincipal. The guides and structure doc now state what actually works - a remote bind with a configured key, or a client that sends x-opencodex-api-key - because the built-in loopback injection cannot carry that header, and whether a loopback bind should identify callers is left as a maintainer decision rather than a relaxed refusal.
…ental opt-in

The opt-in only guarded the injected base URL, so the ten endpoints and the ownership registry stayed live for any caller able to reach the data plane, including one posting the paths directly. contextRelayActivated reads Codex own config and now guards the relay handler and the recording path as well; absent, unreadable or malformed config is not an opt-in, and the decision is cached against config identity so turning it off applies without a restart. Regressions assert 404 on both prefixes, no owner recorded and zero upstream calls while it is off.
Resolve the Codex home inside the try rather than in a default parameter, since those evaluate before the body and this gate now runs during model turns, where an unreadable CODEX_HOME would abort a turn upstream already served. Gate the route match as well so a disabled feature takes no turn lease. Pin cache invalidation without the reset seam and the unreadable-home refusal, and restore the Korean disable paragraph.
Add the #3433 transport matrix with actual Chat handler and captured canonical Responses request. Preserve key and original header spellings; no identity synthesis. Synthetic fixtures do not establish Hermes emission or cache-hit improvement. Local suites NOT RUN; hosted CI pending.
test(chat): verify native outbound conversation identity (#3433)
The fallback-port fixture records a port from allocateFreePort, which reports the
port it has already released. On a four-shard runner every other test binding an
ephemeral port is a candidate to take it, and when that happens status finds a
listener on the recorded port, reports the record as live, and the assertion
fails against something the test never set up. It failed exactly that way on the
preview promotion run while the same commit passed on dev.

Confirm the recorded port refuses immediately before and immediately after the
status probe, and re-allocate when something took it in between. The assertion
is unchanged and no weaker: a run only counts when the endpoint demonstrably
refused across the whole probe, and exhausting the attempts fails with that
reason rather than silently passing.
feat(codex): relay experimental context history under a least-privilege owner
chore(release): open dev at 2.53.0 before releasing 2.52.0
test(cli): stop judging a stale record on a port another test can take
…view

Product tree is dev at 7bfb2ad, which carries the CI repair, the four
quota-avoidance fixes, and the deterministic status port fixture. Only
package.json differs, carrying the preview channel version.
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner September 12, 2026 12:51
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 12, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-12T12:53:33.462977Z 3608119 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@lidge-jun
lidge-jun merged commit adb39cb into preview Sep 12, 2026
1 of 10 checks passed
@lidge-jun
lidge-jun deleted the codex/release-2520-preview-20260912-b branch September 12, 2026 12:52
@coderabbitai

coderabbitai Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 88d4bbc6-f369-4b0b-9e51-726595df338c

📥 Commits

Reviewing files that changed from the base of the PR and between 9d4e45a and 3608119.

📒 Files selected for processing (43)
  • devlog/_plan/260912_cache_lane/040_hermes.md
  • devlog/_plan/260912_cache_lane/041_hermes_ci_refresh.md
  • devlog/_plan/260912_cache_lane/060_handoff.md
  • devlog/_plan/260912_combo_carry/040_pnpm_ci_repair.md
  • devlog/_plan/260912_history_containment/051_resume_status.md
  • docs-site/src/content/docs/guides/codex-integration.md
  • docs-site/src/content/docs/ko/guides/codex-integration.md
  • scripts/test-layout/layout.json
  • src/codex/account-store.ts
  • src/codex/auth-context.ts
  • src/codex/context-compat.ts
  • src/codex/context-owner.ts
  • src/codex/inject.ts
  • src/oauth/devin-cli.ts
  • src/server/auth-cors.ts
  • src/server/context-history.ts
  • src/server/index.ts
  • src/server/live.ts
  • src/server/responses/core.ts
  • structure/codex-home.md
  • structure/data-planes/inbound-compat.md
  • structure/providers/openai-tiers.md
  • structure/providers/xai-grok.md
  • structure/runtime.md
  • structure/transports/inventory.md
  • tests/cli/cli-status-json.test.ts
  • tests/codex-integration/codex-auth-context.test.ts
  • tests/codex-integration/codex-context-owner.test.ts
  • tests/codex-integration/codex-inject-integration.test.ts
  • tests/codex-integration/codex-inject.test.ts
  • tests/codex-integration/codex-journal.test.ts
  • tests/codex-integration/context-compat.test.ts
  • tests/fixtures/test-layout-expected.json
  • tests/providers/devin-cli-adapter.test.ts
  • tests/providers/devin-cli-login.test.ts
  • tests/responses/chat-conversation-affinity.test.ts
  • tests/server/context-history-ownership.test.ts
  • tests/server/context-history.test.ts
  • tests/server/data-plane-admission-identity.test.ts
  • tests/server/loopback-listener-admission.test.ts
  • tests/server/server-live.test.ts
  • tests/server/server-management-auth.test.ts
  • tests/update/update-pnpm.test.ts

📝 Walkthrough

Walkthrough

The pull request adds experimental Codex context routing with authenticated history and notes relays, per-session ownership tracking, compatible URL handling, and Chat identity tests. It also updates restore failure reporting, platform-specific credential paths, pnpm fixtures, stale-port tests, documentation, and CI records.

Changes

Codex context relay

Layer / File(s) Summary
Compatibility and admission identity
src/codex/context-compat.ts, src/server/auth-cors.ts, src/server/index.ts, src/server/live.ts
Adds opt-in detection, /backend-api/codex URL compatibility, and stable context principals for authenticated admissions.
Ownership registry
src/codex/context-owner.ts, src/server/responses/core.ts
Records serving-account or caller ownership and rejects conflicting, expired, or invalid session identities.
History and notes relay
src/server/context-history.ts, src/server/index.ts, src/codex/account-store.ts, src/codex/auth-context.ts
Adds validated context endpoints with credential materialization, admission rechecks, bounded forwarding, cancellation handling, and 499/504 responses.
Contracts and validation
tests/server/*, tests/codex-integration/*, tests/responses/chat-conversation-affinity.test.ts, docs-site/src/content/docs/guides/codex-integration.md, scripts/test-layout/layout.json
Adds coverage and documentation for activation, ownership, forwarding, route aliases, and conversation identity preservation.

Supporting repairs and verification

Layer / File(s) Summary
Restore failure reporting
src/codex/inject.ts, tests/codex-integration/*, structure/codex-home.md
Preserves failed configuration artifacts and marks later unattempted artifacts as skipped.
Platform and fixture repairs
src/oauth/devin-cli.ts, tests/providers/*, tests/update/update-pnpm.test.ts, tests/cli/cli-status-json.test.ts
Uses platform-specific credential paths, host-native pnpm shims, POSIX permission checks, and stable stale-port assertions.
CI and status records
devlog/_plan/*
Records hosted CI outcomes, rebase state, preserved workflow state, and unrun local validation.

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

Change: Other

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/release-2520-preview-20260912-b

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

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

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.

1 participant