Skip to content

refactor: consolidate verified modularization train and closeout records - #3668

Merged
lidge-jun merged 64 commits into
devfrom
codex/closeout-split-train
Sep 5, 2026
Merged

refactor: consolidate verified modularization train and closeout records#3668
lidge-jun merged 64 commits into
devfrom
codex/closeout-split-train

Conversation

@lidge-jun

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

Copy link
Copy Markdown
Owner

Summary

  • Consolidate the contents of 14 already-reviewed modularization PRs into one integration PR against dev, as requested by the maintainer. Original branches/checkpoint refs are preserved; original PRs will be closed as superseded only after verified landing.
  • Preserve current provider fields, Combo cooldown defaults, Reserve admission/policy, image/file-ID handling, public exports and single-owner caches while extracting 31 focused leaves.
  • Include the accumulated split-train records with explicit historical/deferred notices. Further debt layers are deferred; this does not resolve all 68 original rows.
  • Repair one HTTP/SSE test fixture so native upstream WebSocket fallback is deterministic. Production transport, authentication assertions and test deadlines are unchanged.
  • Delivery order is explicit: merge this aggregate after its exact-head CI passes, then perform at least two complete main-to-merged-dev regression PABCD cycles. Those post-merge cycles are not claimed complete here.

Supersedes (after landing): #3557, #3559, #3566, #3567, #3570, #3574, #3577, #3580, #3583, #3585, #3590, #3594, #3599, #3611.

Verification

  • Isolated remote verification on source ef7914d4a51899f49baa141990f79750b4c75cf9: bun run test 19,236 pass / 16 skip / 0 fail; focused server-auth/native-WS/provider fixture 161 pass / 1 skip / 0 fail; bun run typecheck and bun run privacy:scan passed.
  • All 14 rebased staging tips passed their focused remote checks. Pinned-main 14-module / 244-export snapshot passed 15 runtime checks on main and the aggregate.
  • Main/dev baselines, dashboard component/build/lint checks and isolated rendered comparisons are recorded. Independent source/security, fixture, documentation and receipt reviews passed.
  • No local suites, release or live-service changes. Our later changes contain closeout records only. The branch also incorporates newly landed dev changes (feat(gui): unify quota activation in Advanced settings #3662 and feat(responses): bounded canonical upstream WS reuse #3664); this PR's hosted checks must validate the exact updated final head/current-dev integration before merge.
  • Earlier interrupted discovery-worker run remains an unexplained observation, not a claimed fix. The separate WebSocket fixture dependency was reproduced and repaired with a RED/GREEN no-egress oracle. The unchanged opt-in Fast/cache ambiguity is disclosed in the outcome record.
  • Hosted CI: pending this PR. No missing, failed or cancelled check is counted as passing.

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

    • Improved image normalization with tiered resizing, validation, caching, and memory-aware eviction.
    • Added broader client configuration export support, including model metadata, provider settings, and loopback configurations.
    • Expanded vision planning, image handling, and routed-backend support.
    • Added desktop execution contracts and enhanced tool naming, schemas, and guidance.
    • Improved Claude inbound request translation and response parser coverage.
  • Documentation

    • Added comprehensive historical planning, verification, and closeout records for the modularization work.
  • Tests

    • Added compatibility, export-boundary, dependency, schema, and fixture-isolation coverage.

t and others added 30 commits September 5, 2026 22:12
…ut of the inbound translator (split S08 L1/2)
@lidge-jun
lidge-jun requested a review from Ingwannu as a code owner September 5, 2026 14:11
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 5, 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-05T14:15:51.997815Z 0d071d8 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.

@github-actions github-actions Bot added the chore Maintenance, CI, tests, refactors, or build changes (not a user-facing bug or feature). label Sep 5, 2026
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Deterministic PR hygiene checks passed.

@coderabbitai

coderabbitai Bot commented Sep 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Team

Run ID: eb928c2b-b709-4531-8fce-33991f6150f7

📥 Commits

Reviewing files that changed from the base of the PR and between ef9c538 and c923cb2.

📒 Files selected for processing (159)
  • devlog/_plan/260905_now_split_train/000_3_main_export_baseline.json
  • devlog/_plan/260905_now_split_train/000_plan.md
  • devlog/_plan/260905_now_split_train/001_stale_check.md
  • devlog/_plan/260905_now_split_train/002_layer_map.md
  • devlog/_plan/260905_now_split_train/003_parent_decisions.md
  • devlog/_plan/260905_now_split_train/004_roadmap_lock.md
  • devlog/_plan/260905_now_split_train/005_delivery_evidence_refresh.md
  • devlog/_plan/260905_now_split_train/006_macos_recovery_verification_debt.md
  • devlog/_plan/260905_now_split_train/007_wp450_check_progress.md
  • devlog/_plan/260905_now_split_train/008_serial_ci_coordination.md
  • devlog/_plan/260905_now_split_train/009_pending_preflight_findings.md
  • devlog/_plan/260905_now_split_train/010_lib_redact.md
  • devlog/_plan/260905_now_split_train/020_lib_errors.md
  • devlog/_plan/260905_now_split_train/030_lib_upstream_retry.md
  • devlog/_plan/260905_now_split_train/040_providers_openai_tiers.md
  • devlog/_plan/260905_now_split_train/050_providers_registry_a.md
  • devlog/_plan/260905_now_split_train/060_providers_registry_b.md
  • devlog/_plan/260905_now_split_train/070_providers_registry_c.md
  • devlog/_plan/260905_now_split_train/080_adapters_anthropic_image_normalize.md
  • devlog/_plan/260905_now_split_train/090_adapters_anthropic_a.md
  • devlog/_plan/260905_now_split_train/100_adapters_anthropic_b.md
  • devlog/_plan/260905_now_split_train/105_cursor_desktop_executor_contract.md
  • devlog/_plan/260905_now_split_train/110_adapters_cursor_tool_definitions.md
  • devlog/_plan/260905_now_split_train/120_adapters_cursor_catalog.md
  • devlog/_plan/260905_now_split_train/130_adapters_cursor_images.md
  • devlog/_plan/260905_now_split_train/140_adapters_cursor_request_builder.md
  • devlog/_plan/260905_now_split_train/150_adapters_cursor_protobuf_events.md
  • devlog/_plan/260905_now_split_train/160_adapters_xai_tool_schema.md
  • devlog/_plan/260905_now_split_train/170_adapters_command_code.md
  • devlog/_plan/260905_now_split_train/180_adapters_ollama_native.md
  • devlog/_plan/260905_now_split_train/190_vision_index.md
  • devlog/_plan/260905_now_split_train/200_images_artifacts.md
  • devlog/_plan/260905_now_split_train/210_responses_parser.md
  • devlog/_plan/260905_now_split_train/220_responses_namespace_tool_compat.md
  • devlog/_plan/260905_now_split_train/230_server_responses_agent_task_recovery.md
  • devlog/_plan/260905_now_split_train/240_server_responses_collaboration.md
  • devlog/_plan/260905_now_split_train/250_claude_inbound.md
  • devlog/_plan/260905_now_split_train/260_server_claude_messages.md
  • devlog/_plan/260905_now_split_train/270_server_system_env.md
  • devlog/_plan/260905_now_split_train/280_server_management_logs_usage_routes.md
  • devlog/_plan/260905_now_split_train/290_server_management_lab_routes.md
  • devlog/_plan/260905_now_split_train/300_codex_prompt_layers_a.md
  • devlog/_plan/260905_now_split_train/310_codex_prompt_layers_b.md
  • devlog/_plan/260905_now_split_train/320_combos_types.md
  • devlog/_plan/260905_now_split_train/330_codex_subagent_defaults.md
  • devlog/_plan/260905_now_split_train/340_codex_cli_install_provenance.md
  • devlog/_plan/260905_now_split_train/350_routing_trace.md
  • devlog/_plan/260905_now_split_train/360_oauth_github_copilot.md
  • devlog/_plan/260905_now_split_train/370_codex_log_guard_inspect.md
  • devlog/_plan/260905_now_split_train/380_codex_log_guard_protection.md
  • devlog/_plan/260905_now_split_train/390_codex_log_guard_maintenance.md
  • devlog/_plan/260905_now_split_train/400_clients_config_export_a.md
  • devlog/_plan/260905_now_split_train/410_clients_config_export_b.md
  • devlog/_plan/260905_now_split_train/420_cli_opencode.md
  • devlog/_plan/260905_now_split_train/430_cli_minimax.md
  • devlog/_plan/260905_now_split_train/440_integrations_state.md
  • devlog/_plan/260905_now_split_train/445_server_port_probe_disposal.md
  • devlog/_plan/260905_now_split_train/447_port_probe_verification_progress.md
  • devlog/_plan/260905_now_split_train/450_cli_status.md
  • devlog/_plan/260905_now_split_train/460_cli_provider.md
  • devlog/_plan/260905_now_split_train/470_client_hub_client.md
  • devlog/_plan/260905_now_split_train/480_lab_events_validate.md
  • devlog/_plan/260905_now_split_train/490_lab_ledger_store.md
  • devlog/_plan/260905_now_split_train/500_lab_artifacts_sanitize.md
  • devlog/_plan/260905_now_split_train/510_lab_fabric_observe.md
  • devlog/_plan/260905_now_split_train/520_lab_fabric_scratch.md
  • devlog/_plan/260905_now_split_train/530_lab_conformance_executor.md
  • devlog/_plan/260905_now_split_train/540_lab_automation_persistence.md
  • devlog/_plan/260905_now_split_train/550_lab_public_community.md
  • devlog/_plan/260905_now_split_train/560_lab_projection_verification.md
  • devlog/_plan/260905_now_split_train/570_lab_projection_verdicts.md
  • devlog/_plan/260905_now_split_train/580_components_storage_workspace_StorageWorkspace.md
  • devlog/_plan/260905_now_split_train/590_pages_Storage_a.md
  • devlog/_plan/260905_now_split_train/600_pages_Storage_b.md
  • devlog/_plan/260905_now_split_train/610_pages_integrations_overview_clients.md
  • devlog/_plan/260905_now_split_train/620_pages_integrations_IntegrationsOverview.md
  • devlog/_plan/260905_now_split_train/625_pages_integrations_IntegrationsOverview_b.md
  • devlog/_plan/260905_now_split_train/630_pages_compatibility_matrix_api.md
  • devlog/_plan/260905_now_split_train/640_pages_CompatibilityMatrix.md
  • devlog/_plan/260905_now_split_train/650_combo_workspace_data.md
  • devlog/_plan/260905_now_split_train/660_components_combo_workspace_detail_panel.md
  • devlog/_plan/260905_now_split_train/670_pages_ClaudeDesktop.md
  • devlog/_plan/260905_now_split_train/680_components_MemoryObservabilityCard.md
  • devlog/_plan/260905_now_split_train/690_components_provider_workspace_ProviderSettings.md
  • devlog/_plan/260905_now_split_train/700_pages_dashboard_shared.md
  • devlog/_plan/260905_now_split_train/710_components_QuotaBars.md
  • devlog/_plan/260905_now_split_train/720_release_notes_a.md
  • devlog/_plan/260905_now_split_train/730_release_notes_b.md
  • devlog/_plan/260905_now_split_train/740_test.md
  • devlog/_plan/260905_now_split_train/750_disposable_host_codex_service_composed_acceptance.md
  • devlog/_plan/260905_now_split_train/800_closeout.md
  • devlog/_plan/260905_now_split_train/801_closeout_regression_matrix.md
  • devlog/_plan/260905_now_split_train/810_first_rebase_regression.md
  • devlog/_plan/260905_now_split_train/811_first_execution.md
  • devlog/_plan/260905_now_split_train/812_first_cycle_outcome.md
  • devlog/_plan/260905_now_split_train/813_http_fixture_isolation.md
  • devlog/_plan/260905_now_split_train/820_second_regression_delivery.md
  • devlog/_plan/260905_now_split_train/830_delivery_first.md
  • src/adapters/anthropic-image-codec.ts
  • src/adapters/anthropic-image-normalize.ts
  • src/adapters/cursor/desktop-executor-contract.ts
  • src/adapters/cursor/native-exec-desktop.ts
  • src/adapters/cursor/tool-definitions.ts
  • src/adapters/cursor/tool-guidance.ts
  • src/adapters/cursor/tool-naming.ts
  • src/adapters/cursor/tool-schemas.ts
  • src/adapters/xai-schema-analysis.ts
  • src/adapters/xai-tool-schema.ts
  • src/claude/inbound-content-options.ts
  • src/claude/inbound-model-options.ts
  • src/claude/inbound-records.ts
  • src/claude/inbound.ts
  • src/clients/config-export.ts
  • src/clients/config-export/constants.ts
  • src/clients/config-export/contracts.ts
  • src/clients/config-export/dsh.ts
  • src/clients/config-export/mcode.ts
  • src/clients/config-export/model-metadata.ts
  • src/clients/config-export/omp.ts
  • src/clients/config-export/zcode.ts
  • src/codex/log-guard/inspect-schema.ts
  • src/codex/log-guard/inspect.ts
  • src/codex/prompt-layers.ts
  • src/codex/prompt-layers/encoding.ts
  • src/codex/prompt-layers/paths.ts
  • src/codex/prompt-layers/revision.ts
  • src/codex/prompt-layers/toml-edit.ts
  • src/codex/prompt-layers/toml-read.ts
  • src/combos/identifiers.ts
  • src/combos/types.ts
  • src/lib/redact-folding.ts
  • src/lib/redact.ts
  • src/providers/openai-tiers-destination.ts
  • src/providers/openai-tiers.ts
  • src/responses/parser-content.ts
  • src/responses/parser-text-format.ts
  • src/responses/parser-tools.ts
  • src/responses/parser.ts
  • src/server/system-env-shell.ts
  • src/server/system-env.ts
  • src/types/provider.ts
  • src/vision/image-rewrite.ts
  • src/vision/index.ts
  • src/vision/plan.ts
  • tests/adapters/anthropic/anthropic-image-normalize.test.ts
  • tests/adapters/openai/openai-provider-option.test.ts
  • tests/claude-integration/claude-inbound.test.ts
  • tests/codex-integration/codex-log-guard-inspect.test.ts
  • tests/codex-integration/codex-prompt-layers.test.ts
  • tests/codex-integration/combos.test.ts
  • tests/config/client-config-export.test.ts
  • tests/lib/redact.test.ts
  • tests/providers/cursor/cursor-desktop-exec.test.ts
  • tests/providers/cursor/cursor-tool-definitions.test.ts
  • tests/providers/xai/xai-tool-schema.test.ts
  • tests/responses/responses-parser.test.ts
  • tests/server/server-auth.test.ts
  • tests/server/system-env.test.ts
  • tests/vision/vision-cache.test.ts

📝 Walkthrough

Walkthrough

This PR delivers a large "split train": pure-move refactors that split 14 large source modules (image codec, Cursor tool definitions, xai schema, Claude inbound, config-export, log-guard, prompt-layers, combos, redact, openai-tiers, responses parser, system-env, vision, provider type) into smaller sibling files while preserving public exports and behavior. It also adds a WebSocket isolation fix to a test fixture and roughly 90 devlog planning/history documents.

Changes

Split-Train Planning Documentation

Layer / File(s) Summary
Baseline manifest and history records (000-009)
devlog/_plan/260905_now_split_train/000_3_main_export_baseline.json, .../000_plan.md, .../001-009*.md
Records the pinned export baseline and closed-out process history for the split train.
Core lib split plans (010-030)
devlog/_plan/260905_now_split_train/010-030*.md
Plans and execution records for splitting redact.ts, errors.ts, and upstream-retry.ts.
Provider registry split plans (040-070)
devlog/_plan/260905_now_split_train/040-070*.md
Plans and execution records for splitting openai-tiers.ts and registry.ts into four PR layers.
Adapter, cursor, and vision split plans (080-190)
devlog/_plan/260905_now_split_train/080-190*.md
Plans for anthropic image normalize/adapter, cursor tool/catalog/images/request-builder/protobuf files, xai tool schema, ollama native, and vision index.
Images, responses, claude, server split plans (200-260)
devlog/_plan/260905_now_split_train/200-260*.md
Plans for images/artifacts.ts, responses/parser.ts, namespace-tool-compat, agent-task-recovery, collaboration, claude/inbound.ts, and server/claude-messages.ts.
System-env, management, codex, combos plans (270-340)
devlog/_plan/260905_now_split_train/270-340*.md
Plans for server/system-env.ts, management routes, codex/prompt-layers.ts, combos/types.ts, subagent-defaults.ts, cli-install-provenance.ts.
Routing, oauth, log-guard, config-export plans (350-450)
devlog/_plan/260905_now_split_train/350-450*.md
Plans for routing/trace.ts, github-copilot.ts, log-guard files, clients/config-export.ts, plus delivery-status records.
CLI, client, lab split plans (460-570)
devlog/_plan/260905_now_split_train/460-570*.md
Plans for cli/provider.ts, client/hub-client.ts, and lab module files.
GUI pages/components/scripts split plans (580-750)
devlog/_plan/260905_now_split_train/580-750*.md
Plans for GUI storage/integrations/compatibility pages, combo workspace components, release-notes and test scripts.
Closeout and regression plans (800-830)
devlog/_plan/260905_now_split_train/800-830*.md
Defines the two-cycle regression matrix and delivery-first procedure for publishing the aggregate PR.

Estimated code review effort: 4 (Complex) | ~75 minutes

Module Split Implementation

Layer / File(s) Summary
Anthropic image normalize/codec split
src/adapters/anthropic-image-codec.ts, src/adapters/anthropic-image-normalize.ts, tests/adapters/anthropic/anthropic-image-normalize.test.ts
Moves the tiered normalization pipeline, byte-weighted cache, and encode/validate hooks into a new codec module; the original file re-exports them.
Cursor desktop-executor and tool-definitions split
src/adapters/cursor/desktop-executor-contract.ts, native-exec-desktop.ts, tool-definitions.ts, tool-naming.ts, tool-schemas.ts, tool-guidance.ts, src/types/provider.ts, tests
Extracts DesktopExecutorConfig into a dependency-free contract, then splits tool naming, schemas, and guidance logic out of tool-definitions.ts.
XAI schema analysis split
src/adapters/xai-tool-schema.ts, src/adapters/xai-schema-analysis.ts, tests
Moves JSON Pointer resolution and schema disjointness checks into a new analysis module.
Claude inbound split
src/claude/inbound.ts, inbound-records.ts, inbound-model-options.ts, inbound-content-options.ts, tests
Splits model resolution, content conversion, and shared error types out of inbound.ts.
Client config-export split
src/clients/config-export.ts, src/clients/config-export/*.ts, tests/config/client-config-export.test.ts
Splits contracts, constants, model metadata, and per-client (omp, dsh, mcode, zcode) builders into a config-export/ subdirectory.
Codex log-guard schema split
src/codex/log-guard/inspect.ts, inspect-schema.ts, test
Extracts SQLite schema-compatibility checks into a dedicated module.
Codex prompt-layers split
src/codex/prompt-layers.ts, src/codex/prompt-layers/*.ts, test
Splits path resolution, revision hashing, encoding, and TOML read/edit helpers into submodules.
Combos identifiers split
src/combos/types.ts, src/combos/identifiers.ts, test
Moves combo identifier constants and helper functions into a new module.
Redact folding split
src/lib/redact.ts, src/lib/redact-folding.ts, test
Moves the lexical matching-fold helper and its lookup tables into a sibling file.
OpenAI tiers destination split
src/providers/openai-tiers.ts, openai-tiers-destination.ts, test
Moves provider identity and destination-classification helpers into a new module.
Responses parser split
src/responses/parser.ts, parser-content.ts, parser-tools.ts, parser-text-format.ts, test
Splits content parsing, tool-choice mapping, and text-format parsing out of the request parser.
Server system-env shell split
src/server/system-env.ts, system-env-shell.ts, test
Moves shell-hook environment file writing and hook install/uninstall logic into a new module.
Vision planning and image rewrite split
src/vision/index.ts, plan.ts, image-rewrite.ts, test
Splits vision-sidecar planning and image-stripping/rewrite logic into two new modules.
Server-auth WebSocket transport test isolation
tests/server/server-auth.test.ts
Wraps globalThis.WebSocket in a Proxy to refuse native upstream dials, forcing the SSE fallback path in the HTTP fixture test.

Estimated code review effort: 4 (Complex) | ~90 minutes

Sequence Diagram(s)

No sequence diagram is generated. The changes are a large batch of file-level pure-move refactors and documentation additions rather than a new feature or multi-component interaction flow.

✨ 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/closeout-split-train

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.

@lidge-jun

Copy link
Copy Markdown
Owner Author

리뷰 · 우선순위 74 / 80

이 PR은 이미 따로 리뷰된 모듈화(파일 쪼개기) PR 14개(#3557, #3559, #3566, #3567, #3570, #3574, #3577, #3580, #3583, #3585, #3590, #3594, #3599, #3611)의 내용을 한 번에 dev에 넣는 통합 PR입니다. 지금 dev HEAD는 c4701938c(#3662 Advanced 설정에 Codex 쿼터 켜기 UI 통합)이고, 이 브랜치 codex/closeout-split-train(머리 0d071d822)는 그 바로 직전 기준점 bf58ef182 위에 62커밋이 쌓인 뒤 #3662 한 커밋만 뒤처진 상태입니다. GitHub 비교로는 diverged(ahead 62 / behind 1)이고 mergeable은 맞지만, 호스트 CI가 아직 돌아가는 중이라 mergeStateStatus는 BLOCKED입니다.

하는 일은 크게 세 덩어리입니다. 첫째, 큰 파일을 손대지 않고 옆 잎(leaf)으로 옮깁니다. 예: src/lib/redact.tsredact-folding.ts, src/providers/openai-tiers.tsopenai-tiers-destination.ts, src/adapters/cursor/tool-definitions.tstool-naming/tool-schemas/tool-guidance, src/vision/index.tsplan.ts/image-rewrite.ts, src/responses/parser.tsparser-content/parser-tools/parser-text-format, src/claude/inbound.ts → records/model/content options, src/server/system-env.tssystem-env-shell.ts, src/codex/prompt-layers.ts → encoding/paths/revision/toml 잎, src/combos/types.tsidentifiers.ts, src/codex/log-guard/inspect.tsinspect-schema.ts, src/clients/config-export.tsconfig-export/ 아래 포맷별 모듈, src/adapters/anthropic-image-normalize.tsanthropic-image-codec.ts, src/adapters/xai-tool-schema.tsxai-schema-analysis.ts, 그리고 Cursor desktopExecutor 타입을 desktop-executor-contract.ts로 빼서 src/types/provider.ts의 import 경로만 바꿉니다. 공개 export 이름은 옛 경로에서 다시 내보내서(re-export) 호출부가 깨지지 않게 유지하는 설계입니다.

둘째, devlog/_plan/260905_now_split_train/에 이 열차의 기록·마감·회귀 순서 문서를 한꺼번에 넣습니다. 800/830 문서 기준으로는 "이 통합 PR을 먼저 dev에 넣고, 그 다음에 main→merged-dev 회귀 PABCD를 두 바퀴"가 최신 순서입니다. 원래 68개 행을 전부 끝낸 것이 아니며, 남은 부채 층은 미룬다고 명시합니다. 셋째, 프로덕션 동작이 아니라 테스트만 고칩니다. tests/server/server-auth.test.tsredirectCanonicalCodexTo가 예전에는 fetch만 가로채서 네이티브 업스트림 WebSocket이 붙으면 1초 워치독에 흔들렸습니다. 지금은 chatgpt.com + /backend-api/codex 경로의 wss 생성만 Proxy로 거부하고, 루프백·다른 호스트는 그대로 두며 afterEach에서 WebSocket을 복구합니다. 인증 단언·타임아웃·프로덕션 전송은 건드리지 않는다고 적혀 있습니다.

현재 dev가 최적화하는 방향(쿼터 활성화 UI, 릴리스 버전 라인, Reserve/WS 주변)과 파일 충돌면은 작습니다. #3662는 GUI Advanced 쪽이고 이 PR은 서버/어댑터 잎 분리라 겹침이 거의 없습니다. 다만 열린 #3664(canonical upstream WS reuse)는 src/server/responses/ws-upstream*.ts 쪽 실사용 WS 풀을 다루므로, 이 PR의 픽스처 Proxy와는 파일이 다르지만 "업스트림 WS가 언제 붙는가"라는 이야기의 이웃입니다. 둘 다 넣을 때는 #3668 픽스처가 HTTP-only 단언을 지키는지, #3664 실전송 테스트가 서로 안 깨지는지만 보면 됩니다. 변경 규모는 +23326 / −3893, 파일 159개로 커 보이지만 상당수는 plan 문서이고, 코드는 이미 개별 PR에서 본 추출을 한 줄기로 모은 형태입니다.

왜 지금이냐면, 메인테이너가 "14개를 하나씩 머지하지 말고 검증된 통합본으로 넣고 원본은 landing 뒤에 superseded로 닫아라"고 이미 정해 둔 마감입니다. 개별 14개는 아직 OPEN이고, 이 PR이 실제로 dev에 들어간 뒤에 Landed via #3668 at <commit> + landed-via-maintainer로 닫는 흐름이 맞습니다. 호스트 CI(test 1–4, macos 등)가 이 정확한 머리 0d071d822에서 초록이 되기 전에는 머지하면 안 됩니다. 로컬에서 예전에 통과했다는 기록(약 19236 pass)은 참고일 뿐, 최종 머지 기준은 이 PR의 호스트 체크입니다.

tests/server/server-auth.test.ts redirectCanonicalCodexTo - 프로덕션이 아니라 픽스처만 고친 변경인데, chatgpt.com + /backend-api/codex wss만 거부한다. 경로·호스트가 조금만 달라도 예전처럼 네이티브 dial이 살아나 워치독 플레이크로 돌아갈 수 있다. 회귀 때 이 경계를 다시 확인해야 한다.
브랜치 vs 현재 dev - #3662(c4701938c) 한 커밋 뒤처진 diverged 상태다. mergeable이지만 머지 커밋 트리가 로컬에서 검증한 소스와 같다고 단정하면 안 되고, 호스트 merge-ref CI 결과를 최종으로 봐야 한다.
원본 PR 14개(#3557#3611) - 아직 모두 OPEN이다. 이 통합본이 랜딩되기 전에 개별 머지하거나, 랜딩 후에 닫지 않으면 오픈 PR 숫자가 다시 부풀어 기여자를 헷갈리게 한다.
devlog 800/830 vs 실제 체크 - 문서에 '누락·실패·취소 체크는 PASS로 세지 말 것', '두 번의 main→dev 회귀는 머지 후'라고 적혀 있다. CI가 도는 지금 단계에서 초록을 가정한 머지 예약은 문서 스스로와 어긋난다.
src/combos/types.ts / identifiers.ts - 식별자 헬퍼만 옮기고 COMBO_DEFAULT_WAIT_FOR_COOLDOWN_MS·cooldownMs·waitForCooldownMs 검증은 types에 남아 있다. 추출은 맞아 보이지만, cooldown 쪽 동작 회귀는 통합 머지 후 combos 테스트로 한 번 더 확인하는 편이 안전하다.
#3664와의 이웃 관계 - 이 PR은 HTTP 픽스처에서 업스트림 WS를 끄고, #3664는 실전송에서 업스트림 WS를 재사용한다. 파일은 안 겹치지만 머지 순서에 따라 server-auth·ws-upstream 테스트가 서로 영향을 줄 수 있으니 둘 다 넣을 때 교차 확인이 필요하다.
68행 전체 해소 아님 - closeout이 명시하듯 남은 debt layer는 미루었다. 이 PR을 '모듈화 열차 완료'로 읽으면 안 되고, 검증된 14개 cutoff 배달로 읽어야 한다.

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

  • 호스트 CI(특히 test 샤드·macos)가 이 머리에서 전부 통과한 뒤에 바로 admin merge 할지, 아니면 behind 1(feat(gui): unify quota activation in Advanced settings #3662)을 브랜치에 먼저 rebase/merge 한 뒤 다시 CI를 볼지
  • 랜딩 직후 원본 14개를 일괄 superseded 종료할지(권장), 일부만 남길지
  • feat(responses): bounded canonical upstream WS reuse #3664(upstream WS reuse)를 이 통합본 앞·뒤 어느쪽에 둘지. 픽스처 격리와 실전송 재사용이 같은 주에 겹친다
  • 머지 후 약속된 두 바퀴 PABCD(840/850)를 누가·언제 돌릴지. 830은 머지를 회귀 완료까지 미루지 말라고 한다

너의 추천
호스트 CI가 머리 0d071d822(또는 CI를 다시 돌린 최종 머리)에서 전부 초록이면 이 PR을 dev에 머지하고, 즉시 원본 14개에 Landed via #3668 at <commit> 댓글·landed-via-maintainer 라벨을 붙인 뒤 completed/superseded로 닫아라. CI가 하나라도 빨갛거나 취소면 머지하지 말고 그 체크만 고친 뒤 같은 최종 머리로 다시 검증해라. #3662와의 1커밋 behind는 충돌면이 작아 보이니, 머지 커밋 CI로 흡수해도 되고 불안하면 짧게 rebase 한 번이 더 깔끔하다. 머지 직후 840/850 회귀 두 바퀴를 스케줄하고, #3664는 이 랜딩 뒤에 교차 테스트하며 이어가라.

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

@lidge-jun

Copy link
Copy Markdown
Owner Author

Maintainer-directed admin landing: exact head c923cb2 passed Cross-platform CI 33971699404 and governing hygiene/target checks. Independent source/security and current-base integration reviews passed. Checked integration commit 45f1923, tree 34314ca70e706d0deb8fb6532a3675513aca8b8b, against current dev ef9c538. No unresolved review threads at the landing check. CodeRabbit remains pending and is not represented as a completed review; the superseded cancelled label run is not counted as a pass. This uses the owner-requested admin approval bypass, not a self-approval. Two full main-to-merged-dev regression cycles follow landing; earlier limitations remain recorded.

@lidge-jun
lidge-jun merged commit 6585e6a into dev Sep 5, 2026
27 of 29 checks passed
@lidge-jun
lidge-jun deleted the codex/closeout-split-train branch September 5, 2026 14:33
This was referenced Sep 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore Maintenance, CI, tests, refactors, or build changes (not a user-facing bug or feature).

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant