<!-- task=06_cli_codex_explicit_mode plan=1 tag=REVIEW_REFACTOR -->

# Plan - REVIEW_REFACTOR

## 이 파일을 읽는 구현 에이전트에게

아래 체크리스트를 순서대로 완료하고, 각 항목의 중간 검증과 최종 검증을 실제로 실행하세요. 구현이 끝나면 `agent-task/06_cli_codex_explicit_mode/CODE_REVIEW-cloud-G07.md`의 모든 섹션을 실제 구현 내용과 명령 출력으로 채우세요. `CODE_REVIEW-cloud-G07.md`의 `이 파일을 읽는 리뷰 에이전트에게` 섹션에 있는 아카이브 지시(`*.log`로 이름 변경, `complete.log` 작성)는 구현 에이전트가 수행하면 안 되며, 리뷰 스킬 전용입니다.

## 개요

date=2026-05-04
task=06_cli_codex_explicit_mode, plan=1, tag=REVIEW_REFACTOR
parent=REFACTOR (code_review_cloud_G07_0.log)

## 배경

직전 구현은 `Mode`/`ResumeArgs` 기반 분기 자체는 맞게 반영했지만, 리뷰 결과 두 가지 Required 이슈가 남았습니다. 첫째, `TestCLIStartSkipsCodexExecPersistentStartup`가 `Persistent: true` 케이스를 만들지 않아 `Start`의 회귀를 실제로 막지 못합니다. 둘째, `CODE_REVIEW`의 `REFACTOR-3` 검증 출력이 현재 저장소 상태와 다르게 기록되어 있어 검증 신뢰 계약을 충족하지 못합니다. 이번 루프는 이 두 항목만 정확히 보완합니다.

## 의존 관계 및 구현 순서

1. `REVIEW_REFACTOR-1`에서 `Start` 회귀 테스트를 실제 조건으로 강화한다.
2. `REVIEW_REFACTOR-2`에서 검증 명령을 재실행하고 `CODE_REVIEW` 출력 블록을 실제 결과로 갱신한다.

## [REVIEW_REFACTOR-1] codex-exec startup skip 회귀 테스트를 실제 조건으로 고정

### 문제

`apps/node/internal/adapters/cli/codex_exec_blackbox_test.go`의 `TestCLIStartSkipsCodexExecPersistentStartup`는 현재 `Mode: "codex-exec"`만 설정하고 `Persistent: true`를 주지 않습니다. 이 상태에서는 `Start`가 원래부터 세션을 올리지 않는 프로파일이므로, `profile.Mode != "codex-exec"` 보호식이 제거돼도 테스트가 계속 통과할 수 있습니다.

### 해결 방법

테스트 프로파일에 `Persistent: true`를 명시해 "과거에는 startup 대상이었지만, 이제는 mode 때문에 skip되어야 하는" 조합을 만듭니다. fake codex 스크립트는 호출되면 즉시 실패하도록 유지해 `Start`가 정말 실행을 건너뛰는지 검증합니다.

### 수정 파일 및 체크리스트

- [ ] `apps/node/internal/adapters/cli/codex_exec_blackbox_test.go`에서 `TestCLIStartSkipsCodexExecPersistentStartup`가 `Persistent: true` + `Mode: "codex-exec"` 조합을 사용하도록 수정
- [ ] 테스트 이름/의도가 실제 검증 조건과 일치하도록 assertion 메시지를 필요 시 다듬기

### 테스트 작성

- `apps/node/internal/adapters/cli/codex_exec_blackbox_test.go` - `Start`가 `Persistent: true`인 codex-exec 프로파일도 미리 실행하지 않는지 회귀 테스트로 고정

### 중간 검증

```bash
go test ./apps/node/internal/adapters/cli/... -run 'TestCLIStartSkipsCodexExecPersistentStartup' -count=1
```

기대 결과: fake codex 스크립트가 호출되지 않고 테스트가 PASS.

## [REVIEW_REFACTOR-2] CODE_REVIEW 검증 출력 신뢰성 복구

### 문제

`agent-task/06_cli_codex_explicit_mode/code_review_cloud_G07_0.log` 기준 `REFACTOR-3`의 `grep` 출력은 현재 저장소와 다릅니다. 계획/리뷰 루프 계약상 검증 블록에는 실제 실행한 명령의 출력이 그대로 들어가야 합니다.

### 해결 방법

관련 검증 명령을 다시 실행하고, 새 active review 파일의 `검증 결과` 섹션에 실제 stdout/stderr를 그대로 붙여 넣습니다. 특히 `REFACTOR-3`의 `grep` 결과는 현재 줄 번호(`68`, `76`) 기준으로 반영합니다.

### 수정 파일 및 체크리스트

- [ ] `agent-task/06_cli_codex_explicit_mode/CODE_REVIEW-cloud-G07.md`의 `검증 결과` 섹션을 실제 재실행 출력으로 갱신
- [ ] 최소한 `REFACTOR-3` `grep` 블록은 현재 파일 상태와 정확히 일치하게 반영
- [ ] 최종 검증 블록도 실제 재실행 결과만 남기고 placeholder를 제거

### 테스트 결정

코드 변경은 없을 수 있으므로, 이 항목의 핵심은 명령 재실행과 결과 기록이다. 다만 `REVIEW_REFACTOR-1` 수정 이후 동일 패키지 테스트를 함께 다시 돌려 review 문서에 남긴다.

### 중간 검증

```bash
grep -n 'mode: "codex-exec"\|resume_args:' configs/edge.yaml
```

기대 결과: `resume_args:`와 `mode: "codex-exec"`의 실제 줄 번호가 출력된다.

## 최종 검증

```bash
go test ./packages/config/... ./apps/node/internal/adapters/cli/... -count=1
```

기대 결과: 관련 설정/CLI 테스트가 모두 PASS하고, review 파일의 출력 블록이 실제 명령 결과와 일치한다.
