<!-- task=m-codex-app-server-streaming-migration/03+02_default_profile plan=1 tag=REVIEW_API -->
# Review Follow-up Plan - Codex Default Profile Switch

## 이 파일을 읽는 구현 에이전트에게
이 PLAN을 끝까지 읽은 뒤 구현한다. 이번 plan은 `code_review_local_G05_1.log`의 FAIL Required 항목만 처리한다. 구현 중 사용자에게 직접 질문하지 말고, 사용자 결정이나 외부 환경 소유 blocker가 있으면 `CODE_REVIEW-local-G06.md`의 `사용자 리뷰 요청` 섹션을 증거와 함께 채운 뒤 멈춘다. 단순 검증 증거 부족은 사용자 리뷰 요청이 아니라 명령 재실행과 출력 기록으로 해소한다.

## 배경
이전 리뷰는 구현 산출물 부재로 FAIL이었다. 선행 subtask `02+01_session_events`는 archive `complete.log`로 PASS 완료가 확인되었으므로, 이번 follow-up은 기본 `codex` profile의 app-server 전환과 검증 증거 보강에 집중한다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/automation-runtime-bridge/milestones/codex-app-server-streaming-migration.md`
- Task ids:
  - `default-profile`: `configs/edge.yaml`의 기본 `codex` profile을 app-server mode로 전환한다. 검증: `console.target`과 CLI profile key가 모두 `codex`인 상태에서 기본 Codex 실행이 app-server 경로를 사용한다.
- Completion mode: check-on-pass

## 선행 확인
- 확인 대상: `agent-task/archive/2026/06/m-codex-app-server-streaming-migration/02+01_session_events/complete.log`
- 선행 확인 명령:
```bash
test -f agent-task/archive/2026/06/m-codex-app-server-streaming-migration/02+01_session_events/complete.log
```

## 범위 결정 근거
설정 전환, fallback profile 보존, config loader 테스트, adapter mode smoke만 다룬다. app-server event mapping과 full-cycle real Codex smoke는 이미 선행/후속 subtask 범위이므로 여기서 확장하지 않는다.

## 빌드 등급
`local-G06`: 이전 FAIL은 구현 부재와 검증 증거 부재가 원인이다. 수정 범위는 설정과 로컬 Go 테스트로 결정 가능하지만, follow-up은 필수 항목 누락 방지를 위해 G06으로 상향한다.

## 구현 체크리스트
- [ ] archive 선행 `02+01_session_events/complete.log`를 확인하고 검증 출력에 기록한다.
- [ ] `configs/edge.yaml`의 기본 `codex` profile을 `codex-app-server` mode/app-server stdio args로 전환하고 `codex-exec` fallback을 보존한다.
- [ ] `configs/edge-compose.yaml.tmpl`의 `codex` profile을 real config와 동일한 app-server 기본값으로 동기화한다.
- [ ] `packages/go/config/config_test.go`에 app-server default 및 `codex-exec` fallback profile 로딩 검증을 추가한다.
- [ ] `go test ./packages/go/config -count=1`와 `go test ./apps/node/internal/adapters/cli -count=1`를 실행하고 실제 stdout/stderr를 기록한다.
- [ ] `CODE_REVIEW-local-G06.md`의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_API-1] 구현 산출물과 리뷰 handoff 완성
문제: `code_review_local_G05_1.log` 기준 이전 리뷰 파일은 구현 완료 기록, 항목별 완료 여부, 체크리스트, 검증 출력이 TODO/미체크 상태였다.

해결 방법: 실제 변경과 검증 결과를 `CODE_REVIEW-local-G06.md`의 구현 에이전트 소유 섹션에 모두 기록한다. 계획 대비 변경 사항, 주요 설계 결정, 검증 결과에는 placeholder를 남기지 않는다.

체크리스트:
- [ ] 구현 항목별 완료 여부를 `[x]`로 갱신할 수 있는 증거를 만든다.
- [ ] 구현 체크리스트의 마지막 handoff 항목까지 완료한다.
- [ ] `검증 결과`에는 명령별 실제 stdout/stderr를 붙인다.

테스트 결정: 별도 테스트 파일보다 리뷰 artifact 완성도와 실제 검증 출력으로 확인한다.

중간 검증:
```bash
rg -n "TODO|\\[ \\]" agent-task/m-codex-app-server-streaming-migration/03+02_default_profile/CODE_REVIEW-local-G06.md
```

### [REVIEW_API-2] real edge 기본 `codex` profile을 app-server로 전환
문제: `configs/edge.yaml`의 기본 `codex` profile이 여전히 `codex-exec` mode와 `exec --json` args를 사용한다. 이 상태에서는 `console.target: "codex"`가 app-server 경로를 사용하지 않는다.

해결 방법: `codex` profile을 app-server stdio 실행에 맞는 `mode: "codex-app-server"`로 전환한다. `codex-exec` fallback profile은 별도로 유지하고 `output_format: "codex-json"`을 그대로 둔다.

예상 변경:
- before: `codex.mode = "codex-exec"`, `codex.args = ["exec", "--json"]`
- after: `codex.mode = "codex-app-server"`, app-server stdio용 args, fallback `codex-exec` 유지

체크리스트:
- [ ] `console.target: "codex"`를 유지한다.
- [ ] `codex` profile의 `mode`를 `codex-app-server`로 변경한다.
- [ ] `codex-exec` fallback의 `mode: "codex-exec"`와 `output_format: "codex-json"`을 유지한다.
- [ ] 기존 `claude-tui` profile과 console timeout 계열 사용자 변경을 되돌리지 않는다.

테스트 결정: config loader 테스트에서 `codex`와 `codex-exec`가 모두 로드되고 mode가 구분되는지 확인한다.

중간 검증:
```bash
go test ./packages/go/config -run 'TestLoadEdge_CodexAppServerDefaultProfile|TestLoadEdge_CLIProfileMode' -count=1
```

### [REVIEW_API-3] compose template 기본 `codex` profile 동기화
문제: `configs/edge-compose.yaml.tmpl`의 `codex` profile은 `mode: "exec"`와 `output_format: "plain"` 상태라 real config와 기본 경로가 어긋난다.

해결 방법: compose template의 `codex` profile도 real config의 app-server 기본값과 맞춘다. template에 fallback profile을 추가할지 여부는 real config와 운영 UX 일관성 기준으로 판단하되, `codex-exec` fallback이 필요하면 real config와 같은 key를 사용한다.

체크리스트:
- [ ] compose template의 `codex.mode`를 `codex-app-server`로 변경한다.
- [ ] app-server stdio용 args/output 설정을 real config와 일치시킨다.
- [ ] fallback profile을 추가한 경우 `codex-exec` key와 `codex-json` output format을 유지한다.

테스트 결정: config package에 template fixture가 없으면 `rg`로 template/real config mode를 확인하고, config loader 테스트로 real config contract를 검증한다.

중간 검증:
```bash
rg -n 'codex-app-server|codex-exec|output_format' configs/edge.yaml configs/edge-compose.yaml.tmpl
```

### [REVIEW_API-4] config loader 테스트 보강
문제: 현재 테스트는 `codex-exec` mode 로딩만 확인하고, default `codex`가 app-server mode로 바뀌는 계약과 fallback profile 보존을 검증하지 않는다.

해결 방법: `packages/go/config/config_test.go`에 `TestLoadEdge_CodexAppServerDefaultProfile` 또는 동등한 테스트를 추가한다. 테스트는 `codex`와 `codex-exec` profile을 모두 포함한 YAML fixture를 로드하고 각 profile의 `Mode`, `Args`, `ResumeArgs`, `OutputFormat`을 확인한다.

체크리스트:
- [ ] `codex` profile의 `Mode == "codex-app-server"`를 검증한다.
- [ ] `codex-exec` profile의 `Mode == "codex-exec"`를 검증한다.
- [ ] fallback `codex-exec.OutputFormat == "codex-json"`을 검증한다.
- [ ] 필요한 경우 기존 `TestLoadEdge_CLIProfileMode`는 legacy exec profile 로딩 회귀 테스트로 유지한다.

테스트 결정: `go test ./packages/go/config -count=1`를 필수로 실행한다.

중간 검증:
```bash
go test ./packages/go/config -count=1
```

### [REVIEW_API-5] deterministic 검증 출력 기록
문제: 이전 리뷰 파일의 `검증 출력`은 `TODO`였고 실제 명령 출력이 없었다.

해결 방법: 선행 확인, focused config test, adapter executor smoke, 최종 config/cli adapter package test를 실행하고 `CODE_REVIEW-local-G06.md`에 실제 stdout/stderr를 붙인다. 명령을 대체하면 `계획 대비 변경 사항`에 이유를 기록한다.

체크리스트:
- [ ] 선행 `complete.log` 확인 명령을 실행한다.
- [ ] focused config test를 실행한다.
- [ ] `go test ./apps/node/internal/adapters/cli -run TestExecutorForMode -count=1`를 실행한다.
- [ ] 최종 `go test ./packages/go/config -count=1`를 실행한다.
- [ ] 최종 `go test ./apps/node/internal/adapters/cli -count=1`를 실행한다.

테스트 결정: 위 명령이 최종 완료 조건이다. 외부 Codex account smoke는 후속 `04+03_stream_smoke` 범위다.

중간 검증:
```bash
go test ./apps/node/internal/adapters/cli -run TestExecutorForMode -count=1
```

## 최종 검증
```bash
test -f agent-task/archive/2026/06/m-codex-app-server-streaming-migration/02+01_session_events/complete.log
go test ./packages/go/config -count=1
go test ./apps/node/internal/adapters/cli -count=1
```

**모든 코드 변경 완료 후 반드시 `CODE_REVIEW-local-G06.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.**
