<!-- task=edge_config_mapper plan=0 tag=REFACTOR -->

# Code Review Reference - REFACTOR

## 개요

date=2026-05-05
task=edge_config_mapper, plan=0, tag=REFACTOR

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

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

1. `CODE_REVIEW-cloud-G03.md` → `code_review_cloud_G03_0.log`
2. `PLAN-local-G03.md` → `plan_local_G03_0.log`
3. PASS인 경우 `complete.log` 작성 후 종료. WARN/FAIL인 경우 새 routed plan + review 스텁 작성.

---

## 구현 항목별 완료 여부

| 항목 | 완료 여부 |
|------|---------|
| [REFACTOR-1] `edgenode/mapper.go` 생성 및 `BuildConfigPayload` / `cliProfileToProto` 이동 | [x] |
| [REFACTOR-1] `transport/server.go`에서 원본 함수 삭제 및 `edgenode.BuildConfigPayload` 호출로 교체 | [x] |
| [REFACTOR-1] `mapper_test.go` 추가 (3개 테스트 케이스) | [x] |

## 계획 대비 변경 사항

_구현 에이전트가 계획과 다르게 구현한 부분을 이유와 함께 기록한다._

_`transport/server_test.go`도 함께 수정했다. 기존에 `buildConfigPayload`를 직접 호출하던 테스트 3개를 `edgenode.BuildConfigPayload(rec)` 호출로 교체했다._

## 주요 설계 결정

_구현 에이전트가 주요 설계 결정 사항을 기록한다._

- 함수명을 `buildConfigPayload` → `BuildConfigPayload`로 export했다.
- `cliProfileToProto`는 외부에서 쓸 일이 없어 export하지 않았다.
- `transport/server.go`에서 `packages/config`, `structpb` import를 제거하여 transport의 의존성을 줄였다.

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

- `transport/server.go`에 `buildConfigPayload` / `cliProfileToProto` 정의가 남아 있지 않은지 확인
- `transport/server.go`가 `packages/config`를 더 이상 직접 import하지 않는지 확인 (edgenode를 통해 간접 사용만)
- `edgenode/mapper.go`가 `NodeRecord` 타입과 같은 패키지에 있어 private 필드 접근이 불필요한지 확인
- `mapper_test.go`의 3개 케이스가 mock/ollama/cli adapter 포함 여부를 각각 단독으로 검증하는지 확인
- `go test ./apps/edge/...` 모두 PASS

## 검증 결과

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

### REFACTOR-1 중간 검증
```
$ go test ./apps/edge/internal/node/...
ok  	iop/apps/edge/internal/node	0.003s
```

### 최종 검증
```
$ go build ./apps/edge/...
$ go test ./apps/edge/...
ok  	iop/apps/edge/cmd/edge	(cached)
?   	iop/apps/edge/internal/bootstrap	[no test files]
ok  	iop/apps/edge/internal/node	(cached)
ok  	iop/apps/edge/internal/transport	0.006s
```
