iop/agent-task/02_cli_test_layout_cleanup/PLAN.md

4.9 KiB

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해 충돌을 푼다.

테스트 작성

새 테스트는 추가하지 않는다. 이 항목은 파일 이동/패키지 명 변경만 수행하며, 기존 테스트 케이스가 그대로 동작하는 것이 회귀 검증 자체이다.

중간 검증

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

최종 검증

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만 보인다.