Repository navigation
[Bug][Dashboard] Codex disable dialog and state are misleading #3406
Description
Activity
- addedbugSomething isn't workingSomething isn't workingguiDashboard, tray, settings UIDashboard, tray, settings UI
on Sep 3, 2026 리뷰 · 우선순위 58 / 80
이 이슈는 대시보드 Integrations 개요에서 Codex 통합을 끌 때 생기는 표시와 경로가 틀리는 버그다. 지금
devHEAD(9c29e444d, #3408 문서 캠페인 직후)를 보면 동작 코드는 그대로다. Codex 카드를 끄려고 스위치를 누르면 확인창이 Grok Build용 문구를 쓰고, 상태 API가 알려 주는 설정 파일 경로도 Codex의$CODEX_HOME/config.toml이 아니라 OpenCodex 쪽 경로를 넘긴다. 그래서 사용자는 “지금 어떤 파일을 고치는지”를 믿을 수 없고, 확인 후에도 카드가 예전 켜짐/꺼짐 모습을 유지하다가 새로고침해야 맞는 상태가 된다.왜 이렇게 보이는지 HEAD 코드로 짚으면 세 갈래다. 첫째,
gui/src/pages/integrations/IntegrationsOverview.tsx안의 끄기 확인창은 Desktop이 아니면 전부GROK_DISABLE_COPY를 쓴다. Codex 전용 문구 상수가 없다. 둘째, 같은 파일의requestToggle은 Claude를 제외한 native 끄기(Grok·Desktop·그리고 Codex)를 같은 확인창 경로로 보낸다. 셋째,overview-clients.ts의codexRow는togglePath를 항상null로 두고, 서버native-integration-routes.ts의 목록 응답은codexStatus(config, getConfigPath())처럼 OpenCodexgetConfigPath()를 Codex에도 그대로 넘긴다. 이슈에 적힌 “Grok Build 문구 + 잘못된 config 경로 + 토글 직후 카드가 안 바뀜”은 이 세 지점과 정확히 맞는다.지금
dev가 최적화하는 쪽은 Codex/proxy·voice sideband·모델 카탈로그 쪽이고, GUI 폴리시 열차(#3393–#3399 근처)는 그 뒤에 있다. 그래도 이 버그는 “Integrations에서 Codex를 끈다”는 일상 조작의 신뢰도를 깎는다. 이미 같은 작성자(turin-dev)의 수정 PR #3407이 열려 있고Closes #3406을 달았다. #3407은 Codex 전용 끄기 문구·effective$CODEX_HOME/config.toml보고·desired/observed 분리·토글 직후 routing 갱신·회귀 테스트를 묶는다. 이슈 자체는 재현 단계가 분명하고 컴포넌트 테스트로도 잡힌다고 적혀 있어, 추가 재현 조사보다 수정 PR을 기준으로 닫는 편이 맞다.라인 670 - IntegrationsOverview.tsx: pendingToggle이 Claude Desktop이 아니면 GROK_DISABLE_COPY를 써서 Codex 끄기 확인창 제목/본문이 “Disable the Grok Build integration?”가 된다
라인 490-500 - IntegrationsOverview.tsx: requestToggle이 Codex 끄기도 Grok/Desktop과 같은 pendingToggle 확인창 경로로 보낸다 (Codex 전용 ConsequenceCopy 분기 없음)
경로/overview-clients.ts · codexRow - togglePath가 항상 null이라 확인창 vars.path에 Codex 실제 설정 경로가 안 실릴 수 있다
라인 686 - native-integration-routes.ts: codexStatus(config, getConfigPath())로 OpenCodex config 경로를 Codex native status의 configPath에 넣는다 (이슈가 말한$CODEX_HOME/config.toml과 불일치)
경로/상태 모델 - applied/routingInjected와 desiredEnabled가 카드 UI에서 한 덩어리로 보이면 토글 직후 관찰 상태가 갱신되기 전까지 스위치/뱃지가 이전 값을 유지할 수 있다 (이슈 재현 5단계)메인테이너의 판단이 필요한 지점
- #3407을 지금 merge-train에 태울지, 아니면 Codex/proxy 배치 뒤에 GUI 폴리시 묶음으로 미룰지
- Codex configPath를 서버가
$CODEX_HOME/config.toml로 고치는 범위를 status GET만 할지, PUT/복구 메시지까지 같은 소스로 통일할지 - desired(설정 의도)와 observed(실제 routingInjected)를 카드에 둘 다 보여줄지, 스위치는 desired만·뱃지는 observed만으로 나눌지
너의 추천
이슈 #3406은 단독으로 더 조사하지 말고, 이미 연결된 #3407이 CI·체크리스트를 통과하면 그 PR로 닫아라. HEAD 기준으로 버그 지점이 확인됐고, 수정 범위도 Integrations Codex 토글에 한정된다. #3407이 막히면 최소한 IntegrationsOverview의 Codex 끄기 문구 분리와 native status의 Codex configPath 교체부터 작은 PR로 쪼개도 된다.이 댓글은 grok-bot이 작성했습니다
Client or integration
OpenCodex dashboard
Area
Dashboard
Summary
Disabling Codex from the Integrations overview opens the Grok Build consequence dialog, and after confirmation the Codex card can retain its pre-toggle state until a full page reload. The status API also supplies the OpenCodex config path instead of Codex's effective
$CODEX_HOME/config.toml, so the dialog cannot accurately identify the file it will change. Expected: Codex-specific consequences name the actual file, and the card refreshes its desired and observed state immediately after the toggle.Reproduction
ocx startwith Codex routing injected and open the local dashboard.$CODEX_HOME/config.toml; the switch reflects the desired state and the badge refreshes from observed routing.Version
2.42.0 (
ea3231a8293b)Operating system
Linux (reproduced in the component test; the behavior is dashboard-side and expected across platforms)
Provider and model
Not provider-specific; any Codex routing configuration
Logs or error output
No runtime exception is raised; the defect is stale or misleading dashboard state.
Screenshots and supporting files
No screenshot attached; the behavior is deterministic and covered by a mounted regression test.
Redacted configuration
{}
Checks