<!-- task=m-performance-hotspot-optimization/01_hotspot_report plan=1 tag=REVIEW_TEST -->

# Plan - REVIEW_TEST

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

`CODE_REVIEW-local-G06.md`의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채우는 것까지가 구현입니다. 검증을 실행하고 실제 stdout/stderr를 붙여 넣은 뒤 active 파일을 그대로 두고 리뷰 준비를 보고하세요. 사용자 결정, 사용자 소유 외부 환경, 또는 계획 범위 변경 없이는 진행할 수 없으면 review stub의 `사용자 리뷰 요청` 섹션에 근거와 재개 조건을 채우고 멈추세요. 후속 에이전트가 명령 재실행이나 산출물 수집으로 닫을 수 있는 증거 공백은 사용자 리뷰 요청이 아닙니다.

## 배경

첫 리뷰에서 병목 리포트의 핵심 근거 두 곳이 인용한 결과 파일의 실제 row와 다르게 기록된 점이 확인되었습니다. TypeScript gateway 표는 실제 gateway row의 concurrency 값을 잘못 적었고, Kotlin slow-mix 표는 인용 결과 파일의 deferred 사유와 다른 원인 설명을 기록했습니다. 이번 follow-up은 마일스톤 문서의 병목 리포트 정확도만 바로잡습니다.

## 사용자 리뷰 요청 흐름

구현 중 차단이 있으면 `agent-ops/skills/common/_templates/implementation-user-review-request-section.md` 형식으로 active review stub의 `사용자 리뷰 요청` 섹션을 채웁니다. `USER_REVIEW.md` 작성과 차단 판단은 code-review가 담당합니다.

## Roadmap Targets

- Milestone: `agent-roadmap/milestones/performance-hotspot-optimization.md`
- Task ids:
  - `hotspot-report`: Dart TCP fixed latency/large payload/isolate gateway hardening, TypeScript WS large payload, Kotlin WS latency/slow-mix 검증 모델, TypeScript gateway overhead를 병목 리포트로 정리
- Completion mode: check-on-pass

## 분석 결과

### 읽은 파일

- `agent-ops/rules/project/rules.md`
- `agent-ops/rules/common/rules-roadmap.md`
- `agent-ops/skills/common/router.md`
- `agent-ops/skills/common/code-review/SKILL.md`
- `agent-ops/skills/common/plan/SKILL.md`
- `agent-ops/skills/common/_templates/implementation-user-review-request-section.md`
- `agent-roadmap/current.md`
- `agent-roadmap/milestones/performance-hotspot-optimization.md`
- `agent-test/local/rules.md`
- `agent-test/local/proto-socket-performance-baseline.md`
- `agent-test/runs/20260603-080241-proto-socket-stress-full.md`
- `agent-test/runs/20260603-035352-proto-socket-stress-quick.md`
- `agent-task/m-performance-hotspot-optimization/01_hotspot_report/plan_local_G05_0.log`
- `agent-task/m-performance-hotspot-optimization/01_hotspot_report/code_review_local_G05_0.log`
- `.gitignore`

### 테스트 환경 규칙

test_env는 `local`입니다. `agent-test/local/rules.md`를 읽었고, 성능 row 근거 정확도 검증이므로 `agent-test/local/proto-socket-performance-baseline.md`를 적용합니다. 런타임 코드 변경이 아니므로 새 stress/performance 측정은 실행하지 않고, 인용된 기존 result row와 마일스톤 표가 일치하는지 deterministic `rg --sort path`와 `git diff --check`로 확인합니다.

### 테스트 커버리지 공백

- 문서 row label 정확도: 기존 result file이 증거이며, 새 unit test는 필요하지 않습니다.
- Kotlin deferred 사유 정확도: 기존 result file의 SKIPPED/BLOCKED 축이 증거이며, 새 stress 실행은 필요하지 않습니다.
- 런타임 동작: 변경 대상이 아니므로 커버리지 추가 대상이 없습니다.

### 심볼 참조

none. 이름 변경, 삭제, import 변경이 없습니다.

### 분할 판단

기존 split subtask `01_hotspot_report`의 follow-up입니다. 두 Required 이슈가 같은 병목 리포트 표의 근거 정확도 문제라 하나의 plan에서 함께 고치는 것이 가장 좁고 검토 가능합니다. 다른 성능 구현, 측정 harness, 언어별 코드 수정은 이번 범위가 아닙니다.

### 범위 결정 근거

수정 대상은 `agent-roadmap/milestones/performance-hotspot-optimization.md`와 active task artifact로 제한합니다. `agent-test/runs/**`는 읽기 전용 근거이며 수정하지 않습니다. `dart/`, `go/`, `kotlin/`, `python/`, `typescript/`, `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/`는 구현 대상이 아닙니다.

### 빌드 등급

build=`local-G06`, review=`local-G06`. 실패 원인은 명시적이고 deterministic하게 재검증 가능하지만, 마일스톤 완료 근거의 정확도 문제라 이전보다 한 단계 높은 local review로 둡니다.

## 구현 체크리스트

- [ ] TypeScript Gateway row의 대상 Row label을 `agent-test/runs/20260603-080241-proto-socket-stress-full.md`의 실제 `gateway transport=tcp/ws concurrency=16` rows와 일치시킨다.
- [ ] Kotlin slow-mix row의 판정 문구를 `agent-test/runs/20260603-035352-proto-socket-stress-quick.md`의 TCP/WS deferred 사유와 일치시킨다.
- [ ] `git diff --check`와 deterministic `rg --sort path` 검증을 실행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_TEST-1] TypeScript gateway row label 정정

#### 문제

[agent-roadmap/milestones/performance-hotspot-optimization.md](/config/workspace/proto-socket/agent-roadmap/milestones/performance-hotspot-optimization.md:180)의 TypeScript Gateway row는 대상 Row를 `WS Concurrency 256`, `TCP Concurrency 256`으로 적었습니다. 그러나 인용한 [agent-test/runs/20260603-080241-proto-socket-stress-full.md](/config/workspace/proto-socket/agent-test/runs/20260603-080241-proto-socket-stress-full.md:42)의 실제 gateway rows는 `gateway | transport=tcp concurrency=16` 및 `gateway | transport=ws concurrency=16`입니다.

#### 해결 방법

마일스톤 표의 TypeScript Gateway 근거 파일 / 대상 Row 칸을 실제 axis와 맞춥니다. 수치 자체는 해당 `concurrency=16` row와 일치하므로, row label만 정정하면 됩니다.

Before:

```markdown
- WS Concurrency 256
- TCP Concurrency 256
```

After:

```markdown
- Gateway transport=ws concurrency=16
- Gateway transport=tcp concurrency=16
```

#### 수정 파일 및 체크리스트

- [ ] `agent-roadmap/milestones/performance-hotspot-optimization.md`: TypeScript Gateway row의 대상 Row label을 실제 gateway axis로 바꾼다.
- [ ] `agent-roadmap/milestones/performance-hotspot-optimization.md`: 같은 row의 p99/throughput 수치는 기존 result row와 계속 일치하는지 확인한다.

#### 테스트 작성

테스트 파일은 추가하지 않습니다. 기존 result file row와 문서 표의 연결성을 deterministic search로 검증합니다.

#### 중간 검증

```bash
rg --sort path -n "TypeScript Gateway|Gateway transport=ws concurrency=16|Gateway transport=tcp concurrency=16|WS Concurrency 256|TCP Concurrency 256" agent-roadmap/milestones/performance-hotspot-optimization.md
```

기대 결과: TypeScript Gateway row는 `Gateway transport=ws concurrency=16` 및 `Gateway transport=tcp concurrency=16`을 출력하고, 해당 row 안에는 `WS Concurrency 256` 또는 `TCP Concurrency 256`이 남지 않습니다.

### [REVIEW_TEST-2] Kotlin slow-mix deferred 사유 정정

#### 문제

[agent-roadmap/milestones/performance-hotspot-optimization.md](/config/workspace/proto-socket/agent-roadmap/milestones/performance-hotspot-optimization.md:182)의 Kotlin slow-mix row는 "동일 클라이언트 concurrent request 완료 순서가 코루틴 스케줄링에 의존"한다고 기록했습니다. 하지만 인용한 [agent-test/runs/20260603-035352-proto-socket-stress-quick.md](/config/workspace/proto-socket/agent-test/runs/20260603-035352-proto-socket-stress-quick.md:47)의 실제 deferred 사유는 TCP delayed-ACK latency-bound와 WS inbound launch-per-frame FIFO break입니다.

#### 해결 방법

Kotlin slow-mix row의 판정 및 병목 의존성 칸을 실제 result file의 TCP/WS 사유가 드러나도록 고칩니다. 제품 결함으로 단정하지 않는 톤은 유지하되, 현재 인용 결과에서 확인된 TCP/WS deferred 축을 그대로 반영합니다.

Before:

```markdown
동일 클라이언트의 concurrent request 완료 순서가 코루틴 스케줄링에 의존해 순서 검증 실패.
```

After:

```markdown
TCP는 delayed-ACK latency-bound로 request/response concurrency 안정성 timeout 가능성이 있고, WS는 Dispatchers.IO launch-per-frame 수신 경로가 burst/mixed slow handler에서 per-connection FIFO를 깨는 deferred 사유로 기록됨.
```

#### 수정 파일 및 체크리스트

- [ ] `agent-roadmap/milestones/performance-hotspot-optimization.md`: Kotlin slow-mix row의 판정 문구를 실제 TCP/WS deferred 사유와 맞춘다.
- [ ] `agent-roadmap/milestones/performance-hotspot-optimization.md`: `kotlin-slow-mix-model` 후속 Task id는 유지한다.

#### 테스트 작성

테스트 파일은 추가하지 않습니다. 인용 result file의 SKIPPED/BLOCKED 축과 문서 표의 문구 일치를 search로 확인합니다.

#### 중간 검증

```bash
rg --sort path -n "Kotlin slow-mix|delayed-ACK latency-bound|launch-per-frame|coroutine scheduling|코루틴 스케줄링" agent-roadmap/milestones/performance-hotspot-optimization.md
```

기대 결과: Kotlin slow-mix row는 `delayed-ACK latency-bound`와 `launch-per-frame`을 포함하고, 해당 row의 기존 오인 문구인 `코루틴 스케줄링`은 남지 않습니다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| `agent-roadmap/milestones/performance-hotspot-optimization.md` | REVIEW_TEST-1, REVIEW_TEST-2 |
| `agent-task/m-performance-hotspot-optimization/01_hotspot_report/PLAN-local-G06.md` | task artifact |
| `agent-task/m-performance-hotspot-optimization/01_hotspot_report/CODE_REVIEW-local-G06.md` | task artifact |

## 최종 검증

```bash
git diff --check
rg --sort path -n "TypeScript Gateway|Gateway transport=ws concurrency=16|Gateway transport=tcp concurrency=16|Kotlin slow-mix|delayed-ACK latency-bound|launch-per-frame|agent-test/runs/20260603-080241-proto-socket-stress-full.md|agent-test/runs/20260603-035352-proto-socket-stress-quick.md" agent-roadmap/milestones/performance-hotspot-optimization.md
```

기대 결과: `git diff --check`는 출력 없이 0으로 종료합니다. `rg`는 TypeScript Gateway row의 실제 gateway axis와 Kotlin slow-mix row의 실제 deferred 사유를 출력합니다.

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
