Repository navigation
[Bug]: client-compaction status mistakes an operator-owned proxy URL for a non-proxy destination #4110
Description
Client or integration
Codex CLI
Area
CLI
Summary
The mixed client-compaction status added by #4092 now correctly reports that the provider table was injected, but still says old openai-tagged threads are "not the proxy" whenever their root URL is operator-owned. Ownership does not determine destination: the operator may have set the same local proxy URL themselves.
@lidge-jun This is the remaining narrow output-contract finding from request-changes review 5153451375 at merged head 97841a7. No ownership or session-history behavior needs changing.
Reproduction
Static path to reproduce only in isolated test homes, not a command to run against an active user profile:
- Use client-compaction mode with an unmarked operator-owned root openai_base_url already equal to the proxy target.
- setRootOpenaiBaseUrlForTarget returns keptUserBaseUrl:true because the preceding ownership marker is absent; it does not compare the URL.
- The new historyMessage says old openai threads follow that line, "not the proxy", and the mixed result offers removal if the operator wants those threads on the proxy.
- In this case the configured destination is already the proxy.
Expected: report that existing threads follow the operator's configured root URL without assuming it is outside the proxy. Preserve the file, ownership journal, and history. Keep the distinct control where the operator URL really points elsewhere.
Version
dev at b5c9833, September 9, 2026. This is a current-dev source finding, not a claim about an installed release.
Operating system
Static source review on Linux; the affected logic is platform-independent. No product execution was performed on the live local profile.
Provider and model
Not provider/model-specific; Codex client configuration/status output.
Logs or error output
Source output: "threads already tagged openai follow your own root openai_base_url, not the proxy."
The predicate is ownership-marker absence, not URL inequality.
Screenshots and supporting files
src/codex/inject.ts: setRootOpenaiBaseUrlForTarget, historyMessage and the mixed client-compaction result. The latest tests cover a differing operator destination and a managed line, but not an operator-owned line equal to the target.
Redacted configuration
Synthetic isolated fixture only:
openai_base_url = "http://127.0.0.1:10100/v1"No OCX ownership marker precedes the line; the injected table uses the same test proxy target.
Checks
- I searched existing issues and documentation.
- I removed secrets, tokens, account details, request credentials, and personal data.
Suggested minimal fix: neutral destination wording, no unconditional "not the proxy", and a matching-target operator-owned regression. Do not alter ownership detection, overwrite the URL, or rewrite history.
Activity
lidge-jun commentedon Sep 9, 2026
리뷰 · 우선순위 72 / 80
설명
이 이슈(#4110, @Ingwannu, bug+cli)는 방금
dev에 올라간 #4092 client-compaction의 상태 문구 계약을 좁게 고치자는 요청이다. HEADb5c98333f의src/codex/inject.ts를 보면, client-compaction 혼합 결과는 “provider table은 주입됐다”고 맞게 말하면서도,keptUserBaseUrl:true일 때 history 줄이 이렇게 나온다:threads already tagged openai follow your own root openai_base_url, not the proxy.. 이어지는 mixed 결과 본문도 “그 줄이 프록시를 가리키지 않는다”는 전제로, 프록시에 태우려면 줄을 지우라고 안내한다.핵심.
setRootOpenaiBaseUrlForTarget은 소유 마커가 없으면 URL을 비교하지 않고keptUserBaseUrl:true를 반환한다. 운영자가 로컬 프록시와 같은openai_base_url을 직접 써 둔 경우에도 “not the proxy”가 된다. 소유권 ≠ 목적지다. 재현은 활성 프로필이 아니라 격리 fixture로 충분하다: 마커 없는 루트 URL이 프록시 타깃과 같고, setRoot가 keptUserBaseUrl만 켠 뒤 historyMessage가 “not the proxy”를 찍는 경로. 제안 수정도 좁다 — ownership/저널/history 동작은 그대로 두고, 목적지 문구만 중립화하고, 운영자 URL이 타깃과 같은 회귀를 추가한다. URL을 덮어쓰거나 history를 다시 쓰지 말 것.지금
dev방향과의 관계. #4092가 tip 근처에 막 들어왔고, 이 이슈는 그 request-changes 잔여(리뷰 5153451375, head97841a790)다. Astra 502(#3657)나 tip 슬라이스와는 무관하다. 문서/카피 버그에 가깝지만, 운영자가 “프록시가 아닌데?”라고 잘못 지우게 만들 수 있어 CLI 신뢰도에 바로 닿는다. types/config 분할·중복 close 대상은 아니다. 아직 이슈에 붙은 픽스 PR은 없다.라인 - 이게 무슨 문제다
src/codex/inject.tssetRootOpenaiBaseUrlForTarget- 마커 없으면 URL equality를 보지 않고 keptUserBaseUrl=true. 동작(덮어쓰지 않음)은 맞고, 상태 문구만 목적지를 추측한다.src/codex/inject.tshistoryMessage (대략 1430–1439행) -keepRootOverrideAlongsideTable && keptUserBaseUrl일 때 무조건 “not the proxy”. 같은 URL이면 거짓이다.src/codex/inject.tsmixed 결과 블록 (대략 1450–1464행) - “Remove that line … if you want those threads on the proxy too”가, 이미 프록시를 가리키는 운영자 URL에도 나온다. 잘못된 삭제 유도.테스트 - HEAD 테스트는 “다른 운영자 목적지”와 managed line은 잠그지만, 운영자 소유 + URL==타깃 케이스가 없다. 이슈가 요구하는 회귀가 바로 그 구멍이다.
메인테이너의 판단이 필요한 지점
너의 추천
받고 좁은 픽스 PR을 열어라. ownership 불변식을 건드리지 말고, history/mixed 문구에서 무조건 “not the proxy”를 빼고, URL==타깃 회귀를 inject 테스트에 추가하면 된다. 우선순위는 tip 직후 카피 버그라 72. 중복 이슈 아님. close-don't-rebase 대상 아님.
이 댓글은 grok-bot이 작성했습니다
Ingwannu commentedon Sep 9, 2026
I am preparing the narrow follow-up: neutralize only the mixed client-compaction status text and add the operator-owned URL == proxy-target control alongside the existing different-destination and managed-line cases. Ownership detection, journal values, URL writes and session-history behavior will remain unchanged. Local product execution is not being used against the active profile; the PR will stay Draft until isolated/exact-head verification is available.
Ingwannu commentedon Sep 9, 2026
Draft fix opened as #4114 at
9c9207c11041d2c9ae1aeab45821ce7890e65d3e, targeting dev. It corrects only the factual status guidance, adds a matching-target regression, and documents the contract. Configuration ownership, routing, journal, and history behavior are unchanged.git diff --checkpassed; product tests/typecheck/build have NOT run locally, so the PR explicitly remains Draft pending exact-head CI and @lidge-jun's independent review. Leaving this issue open until integration.lidge-jun commentedon Sep 9, 2026
Fixed on by #4114 (merge 80eded0). The client-compaction status now compares the operator-owned root URL against the proxy target instead of inferring destination from the missing ownership marker. Closing manually because PRs here target , which GitHub does not auto-close from.