# Complete - m-control-plane-edge-wire-baseline/01_cp_edge_endpoint

## 완료 일시

2026-05-30

## 요약

Control Plane Edge TCP endpoint와 registry foundation 후속 리뷰 루프를 2회차에서 PASS로 종료했다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G08_0.log` | `code_review_cloud_G08_0.log` | FAIL | registry stale disconnect, container/compose port exposure, proto evidence mismatch Required 이슈 확인 |
| `plan_cloud_G08_1.log` | `code_review_cloud_G08_1.log` | PASS | connection token guard, 19081 operator surface, proto evidence correction 완료 |

## 구현/정리 내용

- Control Plane config에 Client WS `wire_listen`과 Edge TCP `edge_wire_listen`을 분리하고 lifecycle에서 둘 다 시작했다.
- Edge TCP proto-socket hello server와 internal Edge registry foundation을 추가했다.
- registry disconnect를 connection token으로 보호해 같은 `edge_id`의 stale disconnect가 최신 연결 상태를 덮지 않게 했다.
- Dockerfile, compose, README, config 예시에 Edge TCP 19081 운영 표면을 반영했다.
- `EdgeHelloRequest`/`EdgeHelloResponse` proto와 Go/Dart 생성물 변경 범위 및 생성물 검증 증거를 정리했다.

## 최종 검증

- `gofmt -l apps/control-plane/internal/wire/edge_registry.go apps/control-plane/internal/wire/edge_server.go apps/control-plane/internal/wire/edge_server_test.go apps/control-plane/cmd/control-plane/main.go apps/control-plane/cmd/control-plane/main_test.go apps/control-plane/internal/wire/wire.go apps/control-plane/internal/wire/edge.go apps/control-plane/internal/wire/edge_test.go` - PASS; 출력 없음.
- `go test -count=1 ./apps/control-plane/...` - PASS; `cmd/control-plane`과 `internal/wire` 통과.
- `go test -race -count=1 ./apps/control-plane/internal/wire` - PASS; race detector 통과.
- `go test -count=1 ./packages/... ./proto/gen/...` - PASS; 공통 패키지와 proto gen 패키지 통과.
- `go vet ./apps/control-plane/...` - PASS; 출력 없음.
- `docker compose config --quiet` - BLOCKED; review 환경에 `docker` 바이너리가 없어 실행 불가. 대신 `rg --line-number "19081|IOP_CONTROL_PLANE_EDGE_WIRE_PORT|edge_wire_listen" apps/control-plane/Dockerfile docker-compose.yml apps/control-plane/README.md configs/control-plane.yaml`로 operator-facing 정적 표면을 확인했다.
- 임시 디렉터리 Go proto 재생성 후 `cmp -s proto/gen/iop/control.pb.go "$tmpdir/proto/gen/iop/control.pb.go"` - PASS; byte 단위 일치.
- 임시 디렉터리 Dart proto 재생성 후 `cmp -s` for `control.pb.dart` and `control.pbjson.dart` - PASS; byte 단위 일치.

## 잔여 Nit

- 없음

## 후속 작업

- 없음
