<!-- task=05_cli_persistent_explicit_complete plan=1 tag=REVIEW_REFACTOR -->

# Code Review Reference - REVIEW_REFACTOR

## 개요

date=2026-05-04
task=05_cli_persistent_explicit_complete, plan=1, tag=REVIEW_REFACTOR

## 이 파일을 읽는 리뷰 에이전트에게

각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요.
리뷰 완료 후 반드시 아래 순서로 아카이브하세요.

1. `CODE_REVIEW-cloud-G06.md` → `code_review_cloud_G06_1.log` (N = 기존 code_review_*.log 수)
2. `PLAN-cloud-G06.md` → `plan_cloud_G06_1.log` (M = 기존 plan_*.log 수)
3. PASS인 경우 `complete.log` 작성 후 종료. WARN/FAIL인 경우 새 routed plan + review 스텁 작성.

---

## 구현 항목별 완료 여부

| 항목 | 완료 여부 |
|------|---------|
| [REVIEW_REFACTOR-1] CLI completion_marker settings Struct round-trip 복구 | [x] |

## 계획 대비 변경 사항

- 계획에 명시된 4개 파일을 그대로 수정. 계획 외 변경 없음.

## 주요 설계 결정

- edge payload는 `completion_marker.line`과 `completion_marker.regex`가 빈 문자열이어도 항상 nested map으로 직렬화한다. 이렇게 하면 node 측에서 nested map 존재 여부와 무관하게 동일한 코드 경로로 처리되며, 빈 값은 `CompletionMarkerConf.Empty()` 호출로 그대로 fallback 동작에 흡수된다.
- node `cliConfFromStruct`는 nested map의 line/regex 각각에 대해 독립적으로 string 타입을 검사한다. 한쪽만 정의된 설정도 그대로 보존된다.

## 리뷰어를 위한 체크포인트

- edge payload에 `completion_marker`가 실제 nested struct 형태로 포함되는가
- node `cliConfFromStruct`가 `line`과 `regex`를 모두 읽는가
- 새 테스트가 단순 존재 확인이 아니라 값 보존을 실제로 단언하는가
- 이번 루프가 리뷰에서 지적된 경계 문제만 해결하고 범위를 넘지 않는가

## 검증 결과

_구현 에이전트가 각 중간 검증 및 최종 검증 명령 실행 후 출력을 여기에 붙여 넣는다._

### REVIEW_REFACTOR-1 중간 검증
```bash
$ go test ./apps/edge/internal/transport ./apps/node/internal/adapters -count=1
ok  	iop/apps/edge/internal/transport	0.006s
ok  	iop/apps/node/internal/adapters	0.003s
```

### 최종 검증
```bash
$ go test ./packages/config/... ./apps/edge/internal/transport ./apps/node/internal/adapters ./apps/node/internal/adapters/cli/... -count=1
ok  	iop/packages/config	0.006s
ok  	iop/apps/edge/internal/transport	0.006s
ok  	iop/apps/node/internal/adapters	0.004s
ok  	iop/apps/node/internal/adapters/cli	87.643s
?   	iop/apps/node/internal/adapters/cli/internal/testutil	[no test files]
ok  	iop/apps/node/internal/adapters/cli/status	0.003s
```

## 코드리뷰 결과

- 종합 판정: PASS

- 차원별 평가:
  - correctness: Pass
  - completeness: Pass
  - test coverage: Pass
  - API contract: Pass
  - code quality: Pass
  - plan deviation: Pass
  - verification trust: Pass

- 발견된 문제:
  - Nit — `apps/edge/README.md:38`, `apps/node/README.md:53`: persistent complete 예시가 아직 `detail="cli execution complete"`를 사용해 현재 메시지(`completion-marker`, `idle-timeout`)와 다릅니다.

- 다음 단계:
  - PASS: 아카이브 후 `complete.log`를 작성하고 종료한다.
