Repository navigation
#893 is not fixed on macOS: #1025 repairs snapshots but the transport gate from closed #928 is still missing — Codex hangs on third-party Responses gateways #1127
Description
Client or integration
Codex App
Area
Streaming
Summary
v2.10.2 still reproduces the hang reported in #893 on macOS. #894/#928 (our fix) were closed in favor of the maintainer-rewritten #1025, but #1025 only took the snapshot repair half. The transport gate half of #928 was never taken — and without it, enabling any client-facing repair (responsesItemIdRepair / responsesSnapshotRepair) silently kicks Darwin streamMode: "eager-relay" traffic back onto the tee()+JS-pull chain, which loses the client stream on macOS. Result: upstream returns 200, the Codex client never receives a single SSE event, and every turn hangs until the user cancels (visible as HTTP 499 in usage logs).
Root cause: selectEagerPath in src/lib/bun-stream-caps.ts still has the pre-#928 guard — if (needsClientRewrite || (platform !== "win32" && platform !== "darwin")) return null; — so any client rewrite forces tee on every platform. The #1025 block rewrite is correctly wired into the eager relay via rewriteBlocks, but the affected traffic never reaches the eager relay in the first place. The fix is the #928 transport gate: win32 rewrites stay on tee (the extra JS pull wrapper is part of the Bun#32111 crash shape); Darwin explicit eager composes the payload rewrites inline after the single reader, plus passing the composed rewritePayload/rewriteBudget into the eager relay at the src/server/responses/core.ts call site (today both are win32-only). We are running exactly this on top of v2.10.2 in production now. Happy to resubmit the gate as a fresh PR against current main if preferred; please also consider reopening #893.
Reproduction
- macOS,
streamMode: "eager-relay", a Responses-compatible relay provider (adapteropenai-responses) withresponsesSnapshotRepair: trueandresponsesItemIdRepairenabled. POST /v1/responseswithstream: true(any prompt) through the proxy, or simply chat from the Codex App.- Stock v2.10.2: client receives 0 SSE events and 0
[DONE]within 35 s while the upstream call logs 200. Codex hangs on every turn. - Same build + the fix(streaming): repair sparse Responses snapshots #928 transport gate:
response.created→response.output_text.delta→response.completed→[DONE]— the turn commits normally. A/B run on isolated ports with identical config, same provider, real streamed requests.
Version
opencodex v2.10.2 (tag 2468502); Bun 1.3.14; Codex CLI 0.146.0 / Codex App
Operating system
macOS (darwin arm64), Darwin 25.5.0
Provider and model
Third-party Responses relay (adapter openai-responses), model gpt-5.6-sol
Logs or error output
# stock v2.10.2, isolated port, real streamed request (A):
# 35 s: zero SSE events observed client-side, zero "data: [DONE]"
# v2.10.2 + #928 transport gate (B), same config:
1 response.completed
2 response.created
2 response.output_text.delta
1 data: [DONE]
# live proxy usage during the regression window (client cancel visible):
20:15:12 {"model":"gpt-5.6-sol","provider":"<relay>","status":499,"durationMs":3855}
20:15:25 {"model":"gpt-5.6-sol","provider":"<relay>","status":200,"durationMs":8222}
Screenshots and supporting files
No response
Redacted configuration
{
"streamMode": "eager-relay",
"providers": {
"<relay>": {
"adapter": "openai-responses",
"baseUrl": "<redacted>",
"authMode": "key",
"responsesSnapshotRepair": true,
"responsesItemIdRepair": { "repairMissingTerminalIds": true }
}
}
}Checks
- I searched existing issues and documentation.
- I removed secrets, tokens, account details, request credentials, and personal data.
Activity
github-actions commentedon Aug 6, 2026
Automated translation bookkeeping — detected language: unknown.
github-actions commentedon Aug 6, 2026
Issue reopened
The report now contains the information required by the automated check. Thanks for updating it.
Merge pull request #1142 from lidge-jun/codex/260806-stack09-darwin-e…
Wibias commentedon Aug 7, 2026
Closing as fixed on dev.
#1142 restores the explicit eager-relay path on macOS for streams that require a client rewrite.
The change is deliberately narrow: Darwin auto behavior remains unchanged, while explicit eager-relay requests can now use the rewrite path correctly. The fix was also verified natively on macOS.
fix(responses): relay Darwin rewrites eagerly
fix(responses): relay Darwin rewrites eagerly
Merge pull request lidge-jun#1142 from lidge-jun/codex/260806-stack09…