# Complete - m-agent-readable-repository-refactor/06_cli_adapter

## 완료 일시

2026-07-18

## 요약

CLI adapter 책임 분해와 command lifecycle 의미 보존을 5개 리뷰 루프로 검증했으며 최종 판정은 PASS다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G08_0.log` | `code_review_cloud_G08_0.log` | FAIL | command lifecycle 적용, 책임 분해, readability baseline, 검증 출력, real CLI evidence를 보완하도록 후속 처리했다. |
| `plan_cloud_G08_1.log` | `code_review_cloud_G08_1.log` | FAIL | 공통 builder, exact command assertions, baseline 복구, fresh evidence와 설치된 CLI profile 검증을 보완하도록 후속 처리했다. |
| `plan_cloud_G08_2.log` | `code_review_cloud_G08_2.log` | FAIL | exact executable assertion과 원문 검증 evidence, profile별 full-cycle 또는 blocker evidence를 보완하도록 후속 처리했다. |
| `plan_cloud_G08_3.log` | `code_review_cloud_G08_3.log` | FAIL | non-context lifecycle의 pre-refactor env-before-dir/PWD 의미 회귀를 발견해 후속 처리했다. |
| `plan_local_G05_4.log` | `code_review_local_G05_4.log` | PASS | context와 non-context builder의 기존 env/cwd 적용 순서를 복구하고 exact environment 회귀 테스트와 fresh Node 검증을 통과했다. |

## 구현/정리 내용

- CLI command/profile, Codex app-server process, OpenCode SSE event, persistent process/output filter, emitter, status screen 책임을 기존 `cli` package 안의 변경 이유별 파일로 분리했다.
- Codex app-server, OpenCode local server, non-terminal persistent lifecycle을 공통 non-context command builder로 수렴시켰다.
- context one-shot은 workspace 적용 뒤 environment를 계산하고, non-context lifecycle은 environment 계산 뒤 workspace를 적용해 pre-refactor `PWD` 의미를 보존했다.
- 두 builder의 `Path`, `Args`, `Dir`, exact `Env`, invalid workspace 오류를 reference `exec.Cmd`와 비교하는 회귀 테스트를 추가했다.
- CLI 범위 readability baseline 상향과 stale identity를 제거하고 HEAD baseline 대비 회귀 0건을 확인했다.

## 최종 검증

- `gofmt -d apps/node/internal/adapters/cli/command.go apps/node/internal/adapters/cli/cli_workspace_test.go` - PASS; 출력 없음.
- `GOCACHE=/tmp/iop-go-cache-review-plan4-review go test -count=1 -v ./apps/node/internal/adapters/cli -run '^TestBuildCmd(WithoutContext)?AppliesEnvAndCwd$'` - PASS; 두 builder exact environment 회귀 테스트가 실행됐다.
- `GOCACHE=/tmp/iop-go-cache-review-plan4-review go test -count=1 -v ./apps/node/internal/adapters/cli -run '^(TestBuildCmd(WithoutContext)?AppliesEnvAndCwd|TestCodexAppServerProcCwd|TestOpencodeLocalServerCwd_(Workspace|DirOverride)|TestCLIPersistentNonTerminalCwd)$'` - PASS; builder와 세 non-context lifecycle cwd 회귀가 통과했다.
- `GOCACHE=/tmp/iop-go-cache-review-plan4-review go test -count=1 ./apps/node/internal/adapters/cli ./apps/node/internal/adapters/cli/status` - PASS.
- `GOCACHE=/tmp/iop-go-cache-review-plan4-review go test -count=1 ./apps/node/...` - PASS.
- CLI 범위 HEAD readability ratchet - PASS; `cli_regressions=0`.
- `git diff --check -- apps/node/internal/adapters/cli` - PASS; 출력 없음.
- 이전 real CLI full-cycle evidence - ACCEPTED from `plan_cloud_G08_3.log`/`code_review_cloud_G08_3.log`; Codex message x2와 payload/order 검증은 통과했고 Claude cold-start, Codex status EOF, OpenCode log 권한, Antigravity 미설치는 profile별 외부 환경 blocker로 기록됐다. 최종 follow-up은 deterministic command construction 의미만 변경하므로 이를 재실행하지 않았다.

## 잔여 Nit

- 없음

## 후속 작업

- 없음
