<!-- task=m-control-plane-client/01_control_plane_status_api plan=1 tag=REVIEW_CPSTATUS -->

# Control Plane Status API Follow-up Plan

## 이 파일을 읽는 구현 에이전트에게

구현 후 `CODE_REVIEW-cloud-G07.md`의 구현 에이전트 소유 섹션을 반드시 실제 구현 내용, 검증 명령, 출력 요약으로 채운다. 검증을 실행하고 active 파일은 그대로 둔 채 리뷰 준비를 보고한다. 최종 판정, log rename, `complete.log` 작성은 code-review 스킬 책임이다. 사용자만 결정할 수 있는 blocker가 있으면 review stub의 `사용자 리뷰 요청` 섹션에 정확한 결정, 증거, 재개 조건을 채우고 멈춘다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/control-plane-portal-ops/milestones/control-plane-client.md`
- Task ids:
  - `node-registry`: Control Plane은 Edge가 보고하는 Node registry와 Node 연결 상태를 운영 표면에 전달할 수 있다.
  - `edge-node-config-view`: Control Plane/Client는 Edge/Node의 현재 운영 설정 요약을 조회 중심으로 보여준다.
- Completion mode: check-on-pass

## 범위 결정 근거

이 follow-up은 `code_review_cloud_G06_0.log`의 Required 항목만 처리한다. 새 API 확장이나 Client UI 구현은 하지 않는다. 리뷰 중 `make proto-dart` 실행으로 Dart 생성물 diff가 이미 생겼으므로, 후속 구현자는 해당 생성물 변경을 의도된 산출물로 검증하고 기록한다.

## 구현 체크리스트

- [ ] `agent-roadmap/phase/control-plane-portal-ops/milestones/control-plane-client.md`의 이번 task 범위 밖 직접 완료 표시를 정리한다.
- [ ] `proto/iop/control.proto` 변경에 맞춘 Dart 생성물 갱신을 산출물로 포함하고 `make proto-dart`, `make client-test` 검증 결과를 기록한다.
- [ ] `apps/edge/internal/service/service_test.go` 또는 `apps/edge/internal/controlplane/connector_test.go`에 Node config payload가 Edge status response까지 전파되는 테스트를 추가한다.
- [ ] 변경 범위 검증으로 `go test ./apps/control-plane/...`, `go test ./apps/edge/...`, `go test ./packages/go/... ./proto/gen/...`, `make test-control-plane-edge-wire`, `make client-test`를 실행한다.
- [ ] CODE_REVIEW-cloud-G07.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW-1] Roadmap Scope Cleanup

문제: 이전 구현 diff가 이번 task의 Roadmap Targets가 아닌 `edge-mediated`, `edge-status`, `edge-event-logs`를 직접 `[x]` 처리했다. Milestone task completion은 PASS 이후 runtime completion event가 처리해야 하며, 이 task는 `node-registry`, `edge-node-config-view`만 대상으로 한다.

해결 방법: 해당 milestone 파일에서 범위 밖 직접 완료 표시를 원래 active 상태로 되돌린다. `node-registry`와 `edge-node-config-view`는 code-review PASS 전에는 직접 `[x]` 처리하지 않는다.

중간 검증: `git diff -- agent-roadmap/phase/control-plane-portal-ops/milestones/control-plane-client.md`.

### [REVIEW-2] Dart Proto Generation Evidence

문제: Go proto 생성물은 갱신되었지만 Client Dart 생성물과 검증 기록이 누락되었다. `make proto-dart`를 실행하면 `apps/client/lib/gen/proto/iop/control.pb.dart`와 `control.pbjson.dart`가 갱신된다.

해결 방법: `make proto-dart`를 실행해 Dart 생성물을 proto 원본과 맞춘다. 이미 생성된 diff가 있으면 유지하고, 생성물이 source proto와 일치하는지 `git diff`와 Client test로 확인한다.

중간 검증:

```bash
make proto-dart
make client-test
```

### [REVIEW-3] Edge Config Propagation Test

문제: Control Plane HTTP test는 fake status response에 config를 직접 주입하므로, 실제 Edge `Service.ListNodeSnapshots()`와 `Connector.buildStatusResponse()`가 NodeStore config를 보존해 전달하는지는 검증하지 않는다.

해결 방법: Edge test에 사전 등록된 NodeRecord의 adapter/runtime config를 가진 NodeStore를 주입하고, 연결 registry entry와 matching ID를 만든 뒤 `ListNodeSnapshots()` 또는 connector status response에서 `Config`가 포함되는지 검증한다. secret/settings 원문은 Control Plane HTTP JSON에서 노출하지 않는 기존 assertion과 함께 유지한다.

중간 검증:

```bash
go test ./apps/edge/internal/service ./apps/edge/internal/controlplane
```

## 최종 검증

```bash
go test ./apps/control-plane/...
go test ./apps/edge/...
go test ./packages/go/... ./proto/gen/...
make test-control-plane-edge-wire
make client-test
```

예상 결과: 모든 명령이 성공한다. `go test ./apps/client/...`는 Go 패키지 검증이 아니므로 사용하지 않는다.
