<!-- task=crosstest_coverage_gaps plan=2 tag=REVIEW_REVIEW_CROSSTEST-COVERAGE -->

# Code Review Reference - REVIEW_REVIEW_CROSSTEST-COVERAGE

## 개요

date=2026-04-25
task=crosstest_coverage_gaps, plan=2, tag=REVIEW_REVIEW_CROSSTEST-COVERAGE

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

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

1. `CODE_REVIEW.md` → `code_review_N.log` (N = 기존 code_review_*.log 수)
2. `PLAN.md` → `plan_M.log` (M = 기존 plan_*.log 수)
3. PASS인 경우 `complete.log` 작성 후 종료. WARN/FAIL인 경우 새 `PLAN.md` + `CODE_REVIEW.md` 스텁 작성.

---

## 구현 항목별 완료 여부

| 항목 | 완료 여부 |
|------|---------|
| [REVIEW_REVIEW_CROSSTEST-COVERAGE-1] Kotlin 테스트 listener/request handler readiness 보장 | [x] |

## 계획 대비 변경 사항

없음. 계획과 동일하게 구현함.

## 주요 설계 결정

- `testTcpSendReceive` / `testWsSendReceive`: `val listenerReady = CompletableDeferred<Unit>()`을 선언하고, `onClientConnected` 안에서 `addListenerTyped` 직후 `listenerReady.complete(Unit)` 호출. 기존 `waitForCondition { server.clients().size == 1 }`을 `listenerReady.await()`으로 교체.
- `testTcpConcurrentRequests` / `testWsConcurrentRequests`: `val handlerReady = CompletableDeferred<Unit>()`을 선언하고, `onClientConnected` 안에서 `addRequestListenerTyped` 블록 이후 `handlerReady.complete(Unit)` 호출. 요청 시작(`map { async { ... } }`) 직전에 `handlerReady.await()` 삽입.
- concurrent 테스트의 `try/finally` cleanup(`client.close()` / `server.stop()`)은 그대로 유지.
- production 코드(`TcpServer`, `WsServer`, `TcpClient`, `WsClient` 등) 변경 없음.

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

- `testTcpSendReceive` / `testWsSendReceive`가 listener 등록 완료 신호를 await한 뒤 send하는지 확인
- `testTcpConcurrentRequests` / `testWsConcurrentRequests`가 request listener 등록 완료 신호를 await한 뒤 요청을 시작하는지 확인
- concurrent 테스트의 `try/finally` cleanup이 유지되는지 확인
- Kotlin production server/client 동작이 불필요하게 변경되지 않았는지 확인
- `./gradlew test`가 timeout 없이 완료되는지 확인

## 검증 결과

### REVIEW_REVIEW_CROSSTEST-COVERAGE-1 중간 검증
```
$ cd kotlin && ./gradlew test --tests com.tokilabs.toki_socket.TcpTest
BUILD SUCCESSFUL in 6s
10 actionable tasks: 2 executed, 8 up-to-date

$ cd kotlin && ./gradlew test --tests com.tokilabs.toki_socket.WsTest
BUILD SUCCESSFUL in 4s
10 actionable tasks: 1 executed, 9 up-to-date
```

### 최종 검증
```
$ cd kotlin && ./gradlew test
BUILD SUCCESSFUL in 12s
10 actionable tasks: 1 executed, 9 up-to-date

$ git diff --check
(출력 없음 — whitespace 이상 없음)
```

---

## 코드리뷰 결과

### 종합 판정

PASS

### 차원별 평가

| 차원 | 평가 | 근거 |
|------|------|------|
| correctness | Pass | listener/request handler 등록 완료 신호를 await한 뒤 send/request를 시작함 |
| completeness | Pass | plan=2 체크리스트의 TCP/WS send 및 concurrent request readiness 보장이 모두 구현됨 |
| test coverage | Pass | `TcpTest`, `WsTest`, 전체 `./gradlew test` 재검증 통과 |
| API contract | Pass | Kotlin production server/client 코드는 변경하지 않고 테스트 안정성만 보강함 |
| code quality | Pass | concurrent 테스트의 `try/finally` cleanup이 유지됨 |
| plan deviation | Pass | 계획 대비 추가 변경 없음 |
| verification trust | Pass | `CODE_REVIEW.md`의 검증 명령을 재실행해 통과 확인 |

### 발견된 문제

없음

### 다음 단계

PASS: `complete.log` 작성 후 종료한다.
