Skip to content

fix(responses): disable Lite transport for Spark - #3886

Closed
cb8010d6 wants to merge 1 commit into
lidge-jun:devfrom
cb8010d6:fix/spark-drop-responses-lite-header
Closed

fix(responses): disable Lite transport for Spark#3886
cb8010d6 wants to merge 1 commit into
lidge-jun:devfrom
cb8010d6:fix/spark-drop-responses-lite-header

Conversation

@cb8010d6

@cb8010d6 cb8010d6 commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Fixes the canonical gpt-5.3-codex-spark stream ending as response.incomplete / adapter_eof when Codex sends x-openai-internal-codex-responses-lite: true.
  • Remove the Lite header only when the final serialized wire model is exactly gpt-5.3-codex-spark. Both caller-provided and mixed-case static spellings are removed.
  • Preserve the existing header path for every other canonical model. Noncanonical providers, authentication, routing, relay terminal handling, and retry behavior are unchanged.

The final body is authoritative because routing or aliases may make parsed.modelId differ from the model sent upstream. Suppressing the header at that boundary also covers both the initial WebSocket preparation and its HTTP fallback without manufacturing a successful terminal after an upstream EOF.

Closes #3885.

Verification

  • Red-before-fix: canonical adapter drops Lite only for the Spark wire model failed with Expected: null / Received: "true" before the source change.
  • bun test tests/codex-integration/codex-metadata-integrity.test.ts tests/responses/ws-upstream.test.ts tests/responses/ws-upstream-reuse.test.ts — 171 pass / 0 fail after rebasing onto current dev.
  • bun test --rerun-each 3 tests/codex-integration/codex-metadata-integrity.test.ts — 54 pass / 0 fail.
  • bun run typecheck — passed.
  • bun run privacy:scan — passed.
  • bun run test:changed selected the central adapter dependency set but reached the repository runner's 900-second suite ceiling (exit 124) without emitting an assertion failure. Full-suite completion remains deferred to CI; this result is not claimed as green.

No GUI, configuration, or public API changes; docs and i18n are unaffected.

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.

Review readiness checklist

This PR stays in draft until every box below is ticked. Tick all four boxes once the requirements are met:

  • All CI tests are green on my local testing.
  • I pushed my PR to the latest dev commit.
  • I resolved all correct Codex and CodeRabbit findings.
  • My PR is ready for review.

Summary by CodeRabbit

  • Bug Fixes
    • Requests routed to gpt-5.3-codex-spark now correctly remove the internal Lite header, regardless of capitalization.
    • The header remains preserved for other models, ensuring model-specific routing behavior continues to work as expected.
    • Requests using aliases that resolve to gpt-5.3-codex-spark now receive the same corrected handling.

@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Team

Run ID: 0d38185a-4b58-430e-801c-56a6bc0b6caf

📥 Commits

Reviewing files that changed from the base of the PR and between 5963f59 and 83c1d9b.

📒 Files selected for processing (1)
  • tests/codex-integration/codex-metadata-integrity.test.ts

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


📝 Walkthrough

Walkthrough

The canonical OpenAI Responses adapter now removes the Responses Lite header when the wire model is gpt-5.3-codex-spark. Integration coverage verifies removal for Spark and preservation for gpt-5.6-sol.

Changes

Spark Responses Lite handling

Layer / File(s) Summary
Spark header suppression and validation
src/adapters/openai-responses.ts, tests/codex-integration/codex-metadata-integrity.test.ts
For canonical forward requests, the adapter removes all case variants of CODEX_RESPONSES_LITE_HEADER when the final wire model is gpt-5.3-codex-spark. The test verifies removal for Spark, preservation for gpt-5.6-sol, and selection based on the wire model rather than the request modelId.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 83c1d

Spark Responses requests now omit the Lite header so streams can complete normally, while other models retain their existing header behavior. The covered change has no remaining merge-blocking risk.

Suggested reviewers: invalid-email-address

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 2 files. 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 summarizes the primary change: disabling the Responses Lite transport for the Spark model.
Linked Issues check ✅ Passed The changes satisfy issue #3885. The adapter removes all case variants of the Lite header only when the final wire model is exactly gpt-5.3-codex-spark, while tests confirm preservation for other mode…
Out of Scope Changes check ✅ Passed The changes remain within scope. They modify the OpenAI Responses adapter and add focused regression coverage for the Spark Lite-header behavior described in issue #3885.
  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@github-actions github-actions Bot added the bug Something isn't working label Sep 7, 2026
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

⏳ DRAFT

  • review readiness checklist open (2/4 boxes ticked).

What to do

  • Tick all four boxes in the PR description once you're done (currently 2/4).

Review readiness checklist

  • ⬜ All CI tests are green on my local testing.
  • ✅ I pushed my PR to the latest dev commit.
  • ✅ I resolved all correct Codex and CodeRabbit findings.
  • ⬜ My PR is ready for review.

2/4 boxes ticked.

This PR stays in draft until every box above is ticked.

Hygiene

Deterministic PR hygiene checks passed.

@cb8010d6

cb8010d6 commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

This was generated by AI during triage.

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

@cb8010d6 I will review pull request #3886.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@lidge-jun

Copy link
Copy Markdown
Owner

리뷰 · 우선순위 72 / 80

이 PR은 Codex가 gpt-5.3-codex-spark로 요청을 보낼 때 붙이는 Responses Lite 헤더(x-openai-internal-codex-responses-lite) 때문에 스트림이 끝나기 전에 끊기는 버그를 고칩니다. 지금 dev(522ce5f8c, 2.47.0, #3882 인용 마커 정렬·#3888 affinity 문서가 막 올라온 상태)의 src/adapters/openai-responses.ts는 캐노니컬 forward 경로에서 Lite 헤더를 그대로 올릴 수 있습니다. 업스트림은 HTTP 200과 초기 SSE는 주지만 터미널 이벤트 없이 닫아서 어댑터가 response.incomplete / adapter_eof(502)로 기록합니다. 같은 요청에서 그 헤더만 빼면 response.completed로 끝납니다. 이슈 #3885가 그 재현입니다.

고치는 위치는 createResponsesPassthroughAdapter 안, finalBody가 만들어진 뒤입니다. 최종 와이어 모델이 정확히 gpt-5.3-codex-spark일 때만 헤더 이름(대소문자 무관)을 지웁니다. parsed.modelId가 아니라 finalBody.model을 보는 이유가 중요합니다. 라우팅·별칭 때문에 호출자 모델과 업스트림 모델이 다를 수 있고, 초기 WebSocket 준비와 HTTP 폴백이 같은 finalBody를 쓰기 때문입니다. Sol 같은 다른 캐노니컬 모델은 기존 메타데이터 경로를 유지합니다. 테스트도 Spark 억제 / Sol 유지 / 정적 헤더만 있는 경우를 어댑터 경계에서 찍습니다. types/config 분할에 먹히지 않는 좁은 어댑터 수정이라 닫을 대상이 아닙니다.

src/adapters/openai-responses.ts (finalBody.model === "gpt-5.3-codex-spark") - 비교가 정확한 문자열 일치입니다. 대소문자·공백·별칭 철자가 와이어에 다른 형태로 오면 억제가 안 됩니다. 지금 제품 철자가 고정이라면 괜찮지만, 카탈로그에 Spark 변형이 늘면 includes("codex-spark") 같은 기존 본문 헬퍼와 기준이 갈라질 수 있습니다.

tests/codex-integration/codex-metadata-integrity.test.ts (새 테스트) - 호출자 Lite + 정적 Lite를 잘 커버합니다. 다만 별칭으로 parsed.modelId는 다른데 finalBody.model만 Spark가 되는 케이스는 없습니다. PR 본문이 강조한 “최종 와이어가 권위” 주장을 테스트로 한 줄 더 박아 두면 회귀가 더 단단해집니다.

#3885 닫기 약속 - 본문에 Closes #3885가 있어 머지 시 이슈가 같이 닫힙니다. 이슈 본문과 수정 범위가 일치합니다.

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

  • Spark 판별을 정확한 gpt-5.3-codex-spark로 고정할지, 기존 spark 본문 헬퍼처럼 느슨한 매칭으로 갈지
  • test:changed가 900초 천장에 걸린 결과를 CI 전부 그린으로 대체해도 되는지(본문도 전체 스위트를 주장하지 않음)

너의 추천
CI가 그린이면 머지하세요. 좁고, #3885를 직접 닫으며, 다른 캐노니컬 모델 동작은 건드리지 않습니다. 여유 있으면 별칭→와이어 Spark 케이스 테스트를 하나 더 넣고 머지해도 됩니다.

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

@cb8010d6

cb8010d6 commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

This was generated by AI during triage.

Rebased onto the latest \dev\ (\522ce5f8c8) and refreshed the focused verification on head \�01d48a3eb: 171/171 focused transport tests passed, typecheck passed, privacy scan passed, and \git diff --check\ passed.

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '--- PR diff against merge base ---'
git diff --find-renames "$(git merge-base HEAD origin/dev)"...HEAD -- \
  src/adapters/openai-responses.ts \
  tests/codex-integration/codex-metadata-integrity.test.ts

echo '--- adapter outline ---'
ast-grep outline src/adapters/openai-responses.ts --items all

echo '--- test outline ---'
ast-grep outline tests/codex-integration/codex-metadata-integrity.test.ts --items all

echo '--- Lite-header definitions and usages ---'
rg -n -C 5 --glob '*.ts' \
  'CODEX_RESPONSES_LITE_HEADER|x-openai-internal-codex-responses-lite|createResponsesPassthroughAdapter' \
  src tests

echo '--- adapter source around changed lines ---'
git diff --unified=80 "$(git merge-base HEAD origin/dev)"...HEAD -- src/adapters/openai-responses.ts

echo '--- test source around changed lines ---'
git diff --unified=100 "$(git merge-base HEAD origin/dev)"...HEAD -- tests/codex-integration/codex-metadata-integrity.test.ts

Length of output: 237097


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '--- repository refs and HEAD ---'
git status --short --branch
git show -s --format='HEAD %H%nparents %P%nsubject %s' HEAD
git branch -a --no-color

echo '--- current commit patch ---'
git show --format=fuller --find-renames --stat HEAD
git show --format= --find-renames HEAD -- \
  src/adapters/openai-responses.ts \
  tests/codex-integration/codex-metadata-integrity.test.ts

echo '--- adapter request construction ---'
sed -n '2298,2535p' src/adapters/openai-responses.ts

echo '--- metadata regression tests ---'
sed -n '1,245p' tests/codex-integration/codex-metadata-integrity.test.ts

echo '--- WebSocket request preparation ---'
sed -n '1,180p' src/server/responses/codex-ws-request.ts

echo '--- shared header behavior ---'
sed -n '1,220p' src/codex/forward-transport-headers.ts

echo '--- finalBody assignments and header mutations in adapter ---'
rg -n -C 4 --glob 'openai-responses.ts' \
  'finalBody|headers\[|delete headers|new Headers\(headers\)|applyCodexRoutingHint' \
  src/adapters

Length of output: 40822


@cb8010d6 Reviewed commit a01d48a3ebf6331df937fb25375335fc8a333d43. I found no issues.

src/adapters/openai-responses.ts Lines 2503-2510 checks finalBody.model. It removes all case variants of CODEX_RESPONSES_LITE_HEADER only for gpt-5.3-codex-spark.

The removal occurs before routing-header construction. src/server/responses/codex-ws-request.ts reads these built headers before it adds Lite metadata to the WebSocket frame. The HTTP fallback also reuses the same request headers.

tests/codex-integration/codex-metadata-integrity.test.ts Lines 211-232 cover caller-provided Lite, mixed-case static Lite, Spark removal, and Sol preservation.

I did not run the test commands in this sandbox. The reported focused verification is consistent with the reviewed change.

⚠️ Action not completed

No files to review.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

The canonical backend starts a Spark SSE response with the Responses Lite header but closes it before a terminal event, which the adapter correctly surfaces as adapter_eof. The identical request completes without that header.

Select the compatibility exception from the final wire model and remove both caller-provided and statically configured Lite headers only for gpt-5.3-codex-spark. Other canonical models retain the existing metadata path.

Regression: cover Spark suppression and unaffected Sol forwarding at the adapter boundary.
@cb8010d6
cb8010d6 force-pushed the fix/spark-drop-responses-lite-header branch from a01d48a to 83c1d9b Compare September 7, 2026 11:43
@cb8010d6

cb8010d6 commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

This was generated by AI during triage.

Addressed the Grok review suggestion on the latest head: the regression now explicitly covers parsed.modelId being an alias while the final serialized wire model is gpt-5.3-codex-spark. The exact wire-model boundary remains intentionally narrow because that is the compatibility failure demonstrated by issue #3885.

Focused verification remains green: 171/171 tests, 1209 assertions, plus typecheck. Test-only temporary directories and the stale Bun test lock were removed after the run.

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

base="$(git merge-base HEAD origin/dev)"

echo '--- HEAD ---'
git show -s --format='commit %H%nparents %P%nsubject %s' HEAD

echo '--- changed files ---'
git diff --name-status "$base"...HEAD

echo '--- pull request diff ---'
git diff --find-renames --unified=80 "$base"...HEAD -- \
  src/adapters/openai-responses.ts \
  tests/codex-integration/codex-metadata-integrity.test.ts

echo '--- adapter outline ---'
ast-grep outline src/adapters/openai-responses.ts --items all

echo '--- test outline ---'
ast-grep outline tests/codex-integration/codex-metadata-integrity.test.ts --items all

echo '--- adapter header and wire-model context ---'
rg -n -C 12 --glob 'openai-responses.ts' \
  'finalBody\.model|CODEX_RESPONSES_LITE_HEADER|createResponsesPassthroughAdapter|applyCodexRoutingHint' \
  src/adapters/openai-responses.ts

echo '--- metadata regression test context ---'
rg -n -C 18 --glob 'codex-metadata-integrity.test.ts' \
  'gpt-5\.3-codex-spark|parsed\.modelId|CODEX_RESPONSES_LITE_HEADER|responses-lite' \
  tests/codex-integration/codex-metadata-integrity.test.ts

echo '--- shared Lite-header behavior ---'
rg -n -C 8 --glob '*.ts' \
  'CODEX_RESPONSES_LITE_HEADER|x-openai-internal-codex-responses-lite' \
  src tests

Length of output: 1615


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '--- available refs ---'
git branch --all --no-color
git show-ref --heads --remotes || true

echo '--- HEAD ---'
git show -s --format='commit %H%nparents %P%nsubject %s' HEAD

echo '--- current commit changed files ---'
git diff-tree --no-commit-id --name-status -r HEAD

echo '--- current commit patch ---'
git show --format=fuller --find-renames --unified=100 HEAD -- \
  src/adapters/openai-responses.ts \
  tests/codex-integration/codex-metadata-integrity.test.ts

echo '--- adapter outline ---'
ast-grep outline src/adapters/openai-responses.ts --items all

echo '--- test outline ---'
ast-grep outline tests/codex-integration/codex-metadata-integrity.test.ts --items all

echo '--- adapter header and wire-model context ---'
rg -n -C 14 --glob 'openai-responses.ts' \
  'finalBody\.model|CODEX_RESPONSES_LITE_HEADER|createResponsesPassthroughAdapter|applyCodexRoutingHint' \
  src/adapters/openai-responses.ts

echo '--- metadata regression test context ---'
rg -n -C 22 --glob 'codex-metadata-integrity.test.ts' \
  'gpt-5\.3-codex-spark|parsed\.modelId|CODEX_RESPONSES_LITE_HEADER|responses-lite' \
  tests/codex-integration/codex-metadata-integrity.test.ts

Length of output: 51104


@cb8010d6 Reviewed commit 83c1d9b129b80d4f65a797fd61a2026deb8c8123. I found no issues.

src/adapters/openai-responses.ts Lines 2503-2510 checks the final serialized finalBody.model. It removes every case variant of CODEX_RESPONSES_LITE_HEADER only for the exact Spark wire model.

tests/codex-integration/codex-metadata-integrity.test.ts Lines 211-238 now cover the alias case. The test sets parsed.modelId to "spark-alias" and serializes gpt-5.3-codex-spark in the request body. The expected Lite header is absent. This verifies that the compatibility exception follows the wire model.

The test also verifies removal of the mixed-case static header without an incoming Lite header and preservation for gpt-5.6-sol.

I did not run the focused tests or typecheck in this sandbox. The reported verification is consistent with the reviewed change.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

lidge-jun added a commit that referenced this pull request Sep 7, 2026
…3942)

* docs(devlog): plan the workstream-A Responses compatibility stack

Roadmap for landing four Responses-compatibility changes on dev as one
dependent branch chain whose tip carries all of them, so a single CI run
certifies the set: PR #3906 (Muse Spark Free web_search strip), PR #3886
(Spark Responses Lite header), issue #3922 (Claude tool strict default,
new work), and PR #3917 (routed agent_message conversion).

Each phase doc carries exact path:line anchors and before/after diffs.
Three rounds of independent audit corrected the Layer 2 HTTP/WebSocket
coverage boundary, the Claude compatibility semantics, the Layer 3 test
that an added strict field breaks, the converted authMode set, and the
landing proof for each GitHub merge method.

* fix(responses): strip web_search fields for Muse Spark Contributor Free tiers

The -free tiers ride the same Zen Responses wire with the same gateway
contract, so a Codex web_search carrying search_content_types /
indexed_web_access 400s for them exactly like the paid tiers.

(cherry picked from commit 11c498b)

Co-authored-by: MohamadSabree8 <mohamadsabree8@users.noreply.github.com>

* test(responses): cover nested and preview cases for Muse Spark Free tiers

The carried fix covered a top-level web_search tool for the two Contributor
Free ids. The sanitizer also walks input[].additional_tools.tools, and it
must leave web_search_preview alone, so pin both for the free ids the way
the paid ids are already pinned.

Co-authored-by: MohamadSabree8 <mohamadsabree8@users.noreply.github.com>

* fix(responses): disable Lite transport for Spark

The canonical backend starts a Spark SSE response with the Responses Lite header but closes it before a terminal event, which the adapter correctly surfaces as adapter_eof. The identical request completes without that header.

Select the compatibility exception from the final wire model and remove both caller-provided and statically configured Lite headers only for gpt-5.3-codex-spark. Other canonical models retain the existing metadata path.

Regression: cover Spark suppression and unaffected Sol forwarding at the adapter boundary.

(cherry picked from commit 83c1d9b)

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

* docs(devlog): note the layer-1 line drift in the layer-2 anchors

Layer 1 inserts two lines above the canonical-forward block, so the phase
doc now states both the pinned-base line numbers and where the same code
sits on this branch.

* fix(claude): carry the source strict intent into translated Responses tools

Anthropic enables strict tool use by setting strict: true, while the
Responses API reads an omitted strict as permission to normalize the schema
into strict mode. Translating a Claude Code tool without the field therefore
made every optional input_schema parameter behave as required upstream, so a
tool call that omitted one failed even though the client never asked for
strict mode.

Emit the field from the source tool: an explicit true or false is preserved,
an omitted one becomes an explicit false, and a non-boolean value cannot opt
the tool into strict mode. The input_schema is forwarded unchanged, hosted
web_search leaves the translator before this branch, and native Anthropic
passthrough never reaches it.

The existing exact expectation on the translated Read tool gains the field.
The new regression asserts the three cases on the serialized outbound body
built by a real Responses adapter, because parsed._rawBody is the
translator's own object and reading it back would prove nothing about the
wire.

Closes #3922.

* fix(adapters): convert Codex agent_message for every routed Responses destination

`agent_message` is Codex's private multi-agent input item and exists only in the
ChatGPT Codex backend's schema. Codex writes every sub-agent reply into the
rollout, so it is replayed in the `input` of every later turn of that thread. A
routed Responses destination answers the whole body with
`422 unknown item type "agent_message"`, and 422 is a client error nothing fails
over, so the thread stays broken until the history is dropped.

The plaintext conversion already existed but was scoped to the OpenCode Go
destination. Nothing about the rejection is destination-specific, so the
conversion now applies to every destination with `authMode` other than
"forward". Forward destinations keep the item unchanged, and genuine ciphertext
and unknown part types keep their existing fail-closed path; the encrypted v2
task surface still owns those through `unreadable_encrypted_agent_task` and the
opt-in recovery route.

`isOpenCodeGo` existed only to scope this call and is removed with it. The
helper and its tests move to destination-neutral names.

Opaque-blob recovery repairs an undecryptable part into an omission marker,
which leaves the item entirely plaintext; on a routed retry it is now converted
too, which is what lets that retry be accepted at all.

Fixes #3911

(cherry picked from commit 2430724)

Co-authored-by: mashfromband <matsumoto.yukuhashi@gmail.com>

* test(adapters): pin an OAuth destination and narrow the routed-422 wording

The carried conversion is gated on authMode rather than on the destination
URL, but its regression only exercised key and forward. The reported
xAI/Grok failure is an OAuth pool destination, so pin one: a future
narrowing of the gate back toward key-only would otherwise pass unnoticed.

Also narrow the two reference pages. The conversion is justified by the
destinations that actually reported the 422; authMode is an authentication
setting, so it cannot establish what every custom upstream accepts.

Co-authored-by: mashfromband <matsumoto.yukuhashi@gmail.com>

* docs(devlog): drop a trailing blank line in the layer-1 phase doc

---------

Co-authored-by: Codex <a@b.com>
Co-authored-by: MohamadSabree8 <mohamadsabree8@users.noreply.github.com>
Co-authored-by: R <53855466+cb8010d6@users.noreply.github.com>
Co-authored-by: mashfromband <matsumoto.yukuhashi@gmail.com>
@lidge-jun

Copy link
Copy Markdown
Owner

The work from this pull request has landed on dev through the workstream-A compatibility stack in #3942, squash-merged as a13041740.

Your commit was carried onto the stack with its original authorship intact: the carried commit kept you as its author and its cherry picked from provenance line, and a Co-authored-by trailer naming you is present on the squash commit that landed, so the contribution is attributed to you on the merged record.

Your delete-only form was carried unchanged. Worth recording as a known limit rather than a gap in your fix: on the WebSocket path, codex-ws-request.ts writes the Lite metadata only when the header is present, so a pre-existing client_metadata Lite value in the body is not disabled by removing the header. Setting the header to "false" would cover that too, but it goes beyond #3885 and changes socket reuse identity, so it was left out deliberately and is stated as residual in the stack's description.

Verified on a fetched origin/dev: git diff between the stack tip and dev is empty across every path the stack touched. Closing this as landed rather than superseded. Thank you for the fix.

@lidge-jun lidge-jun closed this Sep 7, 2026
@lidge-jun lidge-jun added the landed-via-maintainer Original PR closed after landing via a maintainer merge train label Sep 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working landed-via-maintainer Original PR closed after landing via a maintainer merge train

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants