# Complete - flutter_first_portal_migration/04_control_plane_ws_endpoint

## 완료 일시

2026-05-24

## 요약

Control Plane Portal WS endpoint와 browser-origin handshake follow-up을 4회 리뷰 루프로 완료했다. 최종 판정은 PASS.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G08_0.log` | `code_review_cloud_G08_0.log` | FAIL | 브라우저 Origin이 있는 Flutter Web WS handshake가 403으로 거부됨. |
| `plan_cloud_G08_1.log` | `code_review_cloud_G08_1.log` | FAIL | 구현자 소유 섹션이 stub 상태이고 Origin 문제도 미해결. |
| `plan_cloud_G08_2.log` | `code_review_cloud_G08_2.log` | FAIL | 구현은 통과했으나 active review artifact가 이전 plan/tag 기준이고 sibling whitespace 검증 실패. |
| `plan_cloud_G08_3.log` | `code_review_cloud_G08_3.log` | PASS | OriginPatterns 적용, regression tests, whitespace 검증 모두 통과. |

## 구현/정리 내용

- `PortalHelloRequest`/`PortalHelloResponse` proto와 Go 생성물을 추가했다.
- Control Plane에 Portal proto-socket WS server를 연결하고 `/portal` hello request-response를 구현했다.
- `proto-socket/go` WS server에 non-breaking accept options API를 추가했다.
- Control Plane Portal WS endpoint에 제한된 local OriginPatterns를 적용했다.
- proto-socket OriginPatterns allow/reject test와 Control Plane browser-origin handshake test를 추가했다.
- sibling `proto-socket/go` EOF whitespace를 정리했다.

## 최종 검증

- `cd ../proto-socket/go && git diff --check` - PASS; 출력 없이 exit 0.
- `cd ../proto-socket/go && go test ./...` - PASS; `git.toki-labs.com/toki/proto-socket/go`와 `git.toki-labs.com/toki/proto-socket/go/test` 통과.
- `cd /config/workspace/iop && go test -count=1 ./apps/control-plane/internal/wire` - PASS; `iop/apps/control-plane/internal/wire` 통과.
- `go test -count=1 ./apps/control-plane/...` - PASS; control-plane cmd와 wire 통과.
- `go test ./...` - PASS; iop 전체 Go tests 통과.
- `git diff --check` - PASS; 출력 없이 exit 0.

## 잔여 Nit

- 없음

## 후속 작업

- 없음
