# CLI 어댑터 테스트 디렉토리 구조 정리 ## 이 파일을 읽는 구현 에이전트에게 아래 체크리스트를 순서대로 완료하고, 각 항목의 중간 검증과 최종 검증을 실제로 실행하세요. 구현이 끝나면 `agent-task/02_cli_test_layout_cleanup/CODE_REVIEW.md`의 모든 섹션을 실제 구현 내용과 명령 출력으로 채우세요. `CODE_REVIEW.md`의 `이 파일을 읽는 리뷰 에이전트에게` 섹션에 있는 아카이브 지시(`*.log`로 이름 변경, `complete.log` 작성)는 구현 에이전트가 수행하면 안 되며, 리뷰 스킬 전용입니다. ## 배경 `apps/node/internal/adapters/cli/` 아래에 `oneshot/`, `persistent/`, `lifecycle/` 디렉토리가 존재하지만 각 디렉토리에는 `*_test.go` 파일만 들어있고, 실제 구현은 부모 `cli` 패키지의 `oneshot.go`, `persistent.go` 등에 있습니다. 패키지 선언도 `oneshot_test`, `persistent_test`, `lifecycle_test`로 black-box 테스트입니다. 디렉토리 이름이 sub-package의 존재를 암시해 처음 보는 사람이 잘못된 모듈 경계를 추론할 수 있습니다. 구현은 이미 부모 패키지에 모여 있으므로, 테스트 파일도 부모 디렉토리로 옮겨 단일 패키지 black-box 테스트로 통합합니다. ### [REFACTOR-1] 테스트 파일을 cli 부모 디렉토리로 이동 #### 문제 다음 파일들이 의미 없는 sub-디렉토리에 격리되어 있습니다: - `apps/node/internal/adapters/cli/oneshot/cli_test.go` (package `oneshot_test`) - `apps/node/internal/adapters/cli/persistent/execute_test.go` (package `persistent_test`) - `apps/node/internal/adapters/cli/persistent/codex_exec_test.go` (package `persistent_test`) - `apps/node/internal/adapters/cli/lifecycle/cli_test.go` (package `lifecycle_test`) 세 디렉토리 모두 구현 파일 없이 테스트만 들어 있고, 모두 부모 `cli` 패키지를 import해 동작을 검증합니다. #### 해결 방법 각 테스트 파일을 부모 `apps/node/internal/adapters/cli/` 디렉토리로 이동하고, 패키지 선언을 `cli_test`로 통일합니다. 파일명은 충돌 방지를 위해 다음과 같이 rename합니다: | 기존 경로 | 새 경로 | |----------|--------| | `cli/oneshot/cli_test.go` | `cli/oneshot_blackbox_test.go` | | `cli/persistent/execute_test.go` | `cli/persistent_execute_blackbox_test.go` | | `cli/persistent/codex_exec_test.go` | `cli/codex_exec_blackbox_test.go` | | `cli/lifecycle/cli_test.go` | `cli/lifecycle_blackbox_test.go` | 이동 후 빈 디렉토리(`oneshot/`, `persistent/`, `lifecycle/`)는 삭제합니다. `cli/internal/testutil/`은 외부 패키지에서 import 가능한 그대로 유지합니다. #### 수정 파일 및 체크리스트 - [ ] `git mv apps/node/internal/adapters/cli/oneshot/cli_test.go apps/node/internal/adapters/cli/oneshot_blackbox_test.go` - [ ] `git mv apps/node/internal/adapters/cli/persistent/execute_test.go apps/node/internal/adapters/cli/persistent_execute_blackbox_test.go` - [ ] `git mv apps/node/internal/adapters/cli/persistent/codex_exec_test.go apps/node/internal/adapters/cli/codex_exec_blackbox_test.go` - [ ] `git mv apps/node/internal/adapters/cli/lifecycle/cli_test.go apps/node/internal/adapters/cli/lifecycle_blackbox_test.go` - [ ] 이동된 4개 파일의 `package` 선언을 `cli_test`로 변경한다. - [ ] 빈 디렉토리 `apps/node/internal/adapters/cli/oneshot/`, `persistent/`, `lifecycle/`를 `rmdir`로 제거한다. - [ ] 같은 이름의 헬퍼/심볼이 두 파일에 동시 존재하면 prefix(`oneshot_`, `persistent_` 등)로 rename해 충돌을 푼다. #### 테스트 작성 새 테스트는 추가하지 않는다. 이 항목은 파일 이동/패키지 명 변경만 수행하며, 기존 테스트 케이스가 그대로 동작하는 것이 회귀 검증 자체이다. #### 중간 검증 ```bash ls apps/node/internal/adapters/cli/ go test ./apps/node/internal/adapters/cli/... ``` 예상 결과: `oneshot/`, `persistent/`, `lifecycle/` 디렉토리가 사라지고, 4개 `*_blackbox_test.go`가 부모에 있다. `go test`는 단일 패키지 `iop/apps/node/internal/adapters/cli`에서 모두 PASS. ## 수정 파일 요약 | 파일 | 항목 | |------|------| | `apps/node/internal/adapters/cli/oneshot_blackbox_test.go` (이동/리네임) | REFACTOR-1 | | `apps/node/internal/adapters/cli/persistent_execute_blackbox_test.go` (이동/리네임) | REFACTOR-1 | | `apps/node/internal/adapters/cli/codex_exec_blackbox_test.go` (이동/리네임) | REFACTOR-1 | | `apps/node/internal/adapters/cli/lifecycle_blackbox_test.go` (이동/리네임) | REFACTOR-1 | ## 최종 검증 ```bash go build ./... go test ./apps/node/... find apps/node/internal/adapters/cli -type d ``` 예상 결과: build/test 모두 PASS. `find` 결과는 `apps/node/internal/adapters/cli`, `apps/node/internal/adapters/cli/internal`, `apps/node/internal/adapters/cli/internal/testutil`만 보인다.