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

# Code Review Reference - REVIEW_TEST

> **[IMPLEMENTING AGENT — READ FIRST] Filling in this file is the mandatory final step of implementation.**
> The task is NOT complete until every implementation-owned section below is filled in.
> Complete the `구현 체크리스트`; the final checklist item is mandatory before saving.
> Fill implementation-owned sections, then stop with active files in place and report ready for review.
> If implementation is blocked by a user-only decision, user-owned external environment prerequisite, or scope conflict, fill `사용자 리뷰 요청` with evidence and stop with active files in place; code-review decides whether to write `USER_REVIEW.md`. Evidence gaps that a follow-up agent can close by rerunning commands or collecting artifacts are normal follow-up issues, not user-review blockers by themselves.
> Finalization (`코드리뷰 결과`, log rename, `complete.log`, archive moves, `코드리뷰 전용 체크리스트`) is review-agent-only, even after compaction/resume.
> Follow the ownership table at the bottom of this file for which sections you own.

## 개요

date=2026-06-04
task=m-performance-hotspot-optimization/01_hotspot_report, plan=1, tag=REVIEW_TEST

## 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

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

> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다.

각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요.
리뷰 완료는 아래 순서까지 끝난 상태를 의미합니다.

1. 판정을 append한다.
2. `CODE_REVIEW-local-G06.md` -> `code_review_local_G06_N.log`, `PLAN-local-G06.md` -> `plan_local_G06_M.log`로 아카이브한다.
3. PASS이면 `complete.log` 작성 후 active task 디렉터리를 `agent-task/archive/YYYY/MM/m-performance-hotspot-optimization/01_hotspot_report/`로 이동한다. WARN/FAIL이면 user-review gate를 확인한 뒤 다음 active plan/review 파일 또는 `USER_REVIEW.md`를 작성한다. `USER_REVIEW.md`가 사용자 결정으로 완료/PASS 해소되면 code-review가 `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log` 작성 후 archive 이동한다.
4. PASS이고 task group이 `m-<milestone-slug>`이면 완료 이벤트 메타데이터를 보고한다. roadmap 상태 체크와 `update-roadmap` 호출은 런타임 책임이다.
5. 적용 가능한 `코드리뷰 전용 체크리스트` 항목을 최종 `.log` 위치에서 체크한 뒤 보고한다.

---

## 구현 항목별 완료 여부

| 항목 | 완료 여부 |
|------|---------|
| [REVIEW_TEST-1] TypeScript gateway row label 정정 | [x] |
| [REVIEW_TEST-2] Kotlin slow-mix deferred 사유 정정 | [x] |

## 구현 체크리스트

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

## 코드리뷰 전용 체크리스트

> **[REVIEW AGENT ONLY]** 이 체크리스트는 코드리뷰 에이전트만 사용한다.
> 구현 에이전트는 이 섹션을 수정하거나 체크하지 않는다.

- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다.
- [x] active `CODE_REVIEW-*-G??.md`를 `code_review_local_G06_N.log`로 아카이브한다.
- [x] active `PLAN-*-G??.md`를 `plan_local_G06_M.log`로 아카이브한다.
- [x] `.gitignore`의 Agent-Ops 관리 block이 `agent-task/**/*.md`와 `agent-task/**/*.log`를 unignore하고 `agent-roadmap/current.md`를 ignore하는지 확인한다.
- [x] PASS이면 `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준으로 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다.
- [x] PASS이면 active task 디렉터리 `agent-task/m-performance-hotspot-optimization/01_hotspot_report/`를 `agent-task/archive/2026/06/m-performance-hotspot-optimization/01_hotspot_report/`로 이동하고 최종 archive 경로에서 이 체크리스트를 갱신한다.
- [x] PASS이고 task group이 `m-<milestone-slug>`이면 런타임이 읽을 완료 이벤트 메타데이터를 보고하고, roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다.
- [x] PASS split 작업이면 이동 후 빈 active parent `agent-task/m-performance-hotspot-optimization/`를 제거하거나, 남은 sibling/file이 있어 유지했다고 확인한다.
- [ ] WARN/FAIL이고 user-review gate가 트리거되지 않았으면 다음 active `PLAN-local-G06.md`와 `CODE_REVIEW-local-G06.md`를 작성하고 `complete.log`를 작성하지 않는다.
- [ ] USER_REVIEW이면 `agent-ops/skills/common/code-review/templates/user-review-template.md` 기준으로 `USER_REVIEW.md`를 작성하고 active `PLAN-*.md`, `CODE_REVIEW-*.md`, `complete.log`를 남기지 않는다.
- [ ] USER_REVIEW가 사용자 결정으로 완료/PASS 해소되면 `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log`를 작성한 뒤 task directory를 archive로 이동한다.

## 계획 대비 변경 사항

- 없음. 계획대로 수행되었습니다.

## 주요 설계 결정

- TypeScript Gateway row의 대상 Row label을 실제 인용된 결과 파일의 `gateway transport=tcp/ws concurrency=16` axis와 완벽히 일치시켰습니다.
- Kotlin slow-mix row의 판정 및 병목 의존성 항목의 설명을 실제 인용된 `stress-quick` 결과 파일에 기록된 구체적인 deferred 사유(TCP: delayed-ACK latency-bound, WS: Dispatchers.IO launch-per-frame 수신 경로에 의한 per-connection FIFO break)로 정정하여 완성도를 높였습니다.

## 사용자 리뷰 요청

- 상태: 없음
- 사유 유형: 없음
- 결정 필요: 없음
- 차단 근거: 없음
- 실행한 검증/명령: 없음
- 자동 후속 불가 이유: 없음
- 재개 조건: 없음

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

- TypeScript Gateway row의 대상 Row label이 실제 result file의 `gateway transport=tcp/ws concurrency=16` axis와 일치하는지 확인한다.
- Kotlin slow-mix row의 판정 문구가 `agent-test/runs/20260603-035352-proto-socket-stress-quick.md`의 TCP/WS deferred 사유를 반영하는지 확인한다.
- `hotspot-report` checkbox는 구현 중 직접 체크하지 않았는지 확인한다.

## 검증 결과

### REVIEW_TEST-1 중간 검증

```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
176:| **Dart TCP**<br>(Fixed Latency, Burst, Sustained) | [stress-full (20260603)](file:///config/workspace/proto-socket/agent-test/runs/20260603-062724-proto-socket-stress-full.md)<br>- TCP Concurrency 256<br>[stress-full (20260602)](file:///config/workspace/proto-socket/agent-test/runs/20260602-232000-proto-socket-stress-full.md)<br>- TCP Burst 100k<br>- TCP Sustained 30분 | - Concurrency 256 p99: **49.109ms**<br>- Burst 100k: **154.4 rps**<br>- Sustained throughput: **385.3 rps** / p99: **44.079ms** | `tcpNoDelay` 미설정 의심, per-packet `flush()`, write serialization, heartbeat timer churn, stream pause/resume 오버헤드 존재. | `dart-tcp-fixed-latency`<br>`dart-tcp-burst-sustained`<br>`dart-heartbeat-cost` |
180:| **TypeScript Gateway**<br>(Worker Overhead) | [stress-full (20260603-gateway)](file:///config/workspace/proto-socket/agent-test/runs/20260603-080241-proto-socket-stress-full.md)<br>- Gateway transport=ws concurrency=16<br>- Gateway transport=tcp concurrency=16 | - WS Gateway: **2499.3 rps** (vs Control: **16242.7 rps**)<br>- WS Gateway p99: **205.654ms** (vs Control: **1.887ms**)<br>- TCP Gateway p99: **193.306ms** (vs Control: **43.095ms**) | `worker_threads` 기반 frame offload hop 비용, buffer copy, reorder wait로 인해 심각한 병목 유발. worker hop 제거 또는 단일 수신 경로로 재설계 필수. | `ts-gateway-single-path`<br>`ts-worker-hop-removal`<br>`gateway-overhead` |
181:| **Kotlin WS**<br>(Fixed Latency, Large Payload) | [stress-full (20260603)](file:///config/workspace/proto-socket/agent-test/runs/20260603-062724-proto-socket-stress-full.md)<br>- WS Concurrency 256<br>- WS Payload 1KB / 1MB | - Concurrency 256 p99: **44.877ms**<br>- Payload 1KB p99: **42.651ms**<br>- Payload 1MB p99: **133.842ms**<br>- Payload 1MB Heap Peak: **~668.3MB** | OkHttp 콜백, ByteString copy, Channel staging, inbound queue, write/send flush 지연 의심. 대용량 payload 시 JVM allocation/GC 유발 가능성. | `kotlin-ws-delay`<br>`kotlin-large-payload-memory` |
191:| **Go TCP / WS**<br>(Reference Fast Path) | [stress-full (20260603)](file:///config/workspace/proto-socket/agent-test/runs/20260603-062724-proto-socket-stress-full.md)<br>- TCP Concurrency 256<br>- WS Concurrency 256<br>- TCP Payload 1MB<br>- WS Payload 1MB<br>[stress-full (20260602)](file:///config/workspace/proto-socket/agent-test/runs/20260602-232000-proto-socket-stress-full.md)<br>- TCP Burst 100k<br>- TCP Parallel 1024<br>- TCP Sustained 30분 | - TCP 256: **60748.4 rps** / p99 **4.432ms**<br>- WS 256: **62631.5 rps** / p99 **4.872ms**<br>- 1MB p99: **21.076ms** (TCP) / **35.880ms** (WS)<br>- Burst 100k: **201132.8 rps**<br>- Parallel 1024: **214665.2 rps** / p99 **154.621ms**<br>- Sustained throughput: **16264.9 rps** / p99 **0.646ms**<br>- Sustained Memory (30초/5분/30분): **57.1MB / 143.4MB / 794.1MB** | 30분 sustained memory 증가 원인이 leak인지 bench latency sample 누적 artifact인지 검증 필요. | `go-sustained-memory-metric`<br>`go-reference-guard` |
193:| **Python TCP / WS**<br>(Reference Medium Path) | [stress-full (20260603)](file:///config/workspace/proto-socket/agent-test/runs/20260603-062724-proto-socket-stress-full.md)<br>- TCP Concurrency 256<br>- WS Concurrency 256<br>- TCP Payload 1MB<br>- WS Payload 1MB<br>[stress-full (20260602)](file:///config/workspace/proto-socket/agent-test/runs/20260602-232000-proto-socket-stress-full.md)<br>- TCP Parallel (128/512/1024)<br>- Sustained Memory (30초/5분/30분) | - TCP 256: **10396.7 rps** / p99 **26.480ms**<br>- WS 256: **7790.6 rps** / p99 **29.769ms**<br>- 1MB p99: **18.856ms** (TCP) / **47.424ms** (WS)<br>- Parallel p99: **93.378ms** (128) / **501.368ms** (512) / **1288.999ms** (1024)<br>- Sustained Memory: **133.8MB / 181.1MB / 614.5MB** | 안정적인 중간 reference. 고동시성 p99 비용 정리 및 sustained memory leak/artifact 분리. gateway 관련 API 정책(사용자 옵션 배제) 정리. | `python-high-parallel-p99`<br>`python-sustained-memory-metric`<br>`python-gateway-api-policy`<br>`python-reference-guard` |
```

### REVIEW_TEST-2 중간 검증

```bash
$ rg --sort path -n "Kotlin slow-mix|delayed-ACK latency-bound|launch-per-frame|coroutine scheduling|코루틴 스케줄링" agent-roadmap/milestones/performance-hotspot-optimization.md
92:- [ ] [kotlin-slow-mix-model] Kotlin slow-mix deferred 축을 제품 결함으로 단정하지 않고, 같은 client의 concurrent request completion order가 coroutine scheduling에 의존하는 검증 모델을 보정한다. 검증: 결정론적 helper, sequential same-client row, 또는 per-connection FIFO를 직접 관찰하는 별도 row 중 하나가 제안되고, `agent-test/runs/20260603-035352-proto-socket-stress-quick.md`의 Kotlin deferred 사유가 병목 리포트에 반영된다.
182:| **Kotlin slow-mix**<br>(검증 모델 보정) | [stress-quick (20260603)](file:///config/workspace/proto-socket/agent-test/runs/20260603-035352-proto-socket-stress-quick.md)<br>- slow-mix deferred | - 검증 결과: **Deferred** | TCP는 delayed-ACK latency-bound로 request/response concurrency 안정성 timeout 가능성이 있고, WS는 Dispatchers.IO launch-per-frame 수신 경로가 burst/mixed slow handler에서 per-connection FIFO를 깨는 deferred 사유로 기록됨. | `kotlin-slow-mix-model` |
210:  - `agent-test/runs/20260603-035352-proto-socket-stress-quick.md`는 Kotlin TCP/WS slow-mix를 deferred로 기록했다. 현재 보강 방향은 제품 결함 단정이 아니라, 같은 client의 concurrent request completion order가 coroutine scheduling에 의존하는 검증 모델을 결정론적으로 보정하는 것이다.
```

### 최종 검증

```bash
$ git diff --check
(아무 출력 없음, 정상적으로 0 종료)
```

```bash
$ 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
180:| **TypeScript Gateway**<br>(Worker Overhead) | [stress-full (20260603-gateway)](file:///config/workspace/proto-socket/agent-test/runs/20260603-080241-proto-socket-stress-full.md)<br>- Gateway transport=ws concurrency=16<br>- Gateway transport=tcp concurrency=16 | - WS Gateway: **2499.3 rps** (vs Control: **16242.7 rps**)<br>- WS Gateway p99: **205.654ms** (vs Control: **1.887ms**)<br>- TCP Gateway p99: **193.306ms** (vs Control: **43.095ms**) | `worker_threads` 기반 frame offload hop 비용, buffer copy, reorder wait로 인해 심각한 병목 유발. worker hop 제거 또는 단일 수신 경로로 재설계 필수. | `ts-gateway-single-path`<br>`ts-worker-hop-removal`<br>`gateway-overhead` |
182:| **Kotlin slow-mix**<br>(검증 모델 보정) | [stress-quick (20260603)](file:///config/workspace/proto-socket/agent-test/runs/20260603-035352-proto-socket-stress-quick.md)<br>- slow-mix deferred | - 검증 결과: **Deferred** | TCP는 delayed-ACK latency-bound로 request/response concurrency 안정성 timeout 가능성이 있고, WS는 Dispatchers.IO launch-per-frame 수신 경로가 burst/mixed slow handler에서 per-connection FIFO를 깨는 deferred 사유로 기록됨. | `kotlin-slow-mix-model` |
```

---

> **[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section: completion table, implementation checklist, changes from plan, design decisions, and verification output?**
> If anything is blank, go back and fill it in before saving this file.
> Leave review-agent-only sections unchanged.

## Ownership

| Section | Owner | Note |
|---------|-------|------|
| Header comment, 개요, 리뷰 에이전트 지시 | Fixed at stub creation | Implementing agent must not modify or execute these |
| Roadmap Targets | Fixed at stub creation from plan | Implementing agent must not modify |
| 구현 항목별 완료 여부 | Implementing agent | Check `[ ]` to `[x]` only |
| 구현 체크리스트 | Implementing agent | Check `[ ]` to `[x]` only |
| 코드리뷰 전용 체크리스트 | Review agent only | Implementing agent must not modify |
| 계획 대비 변경 사항, 주요 설계 결정 | Implementing agent | Replace placeholder text with actual content |
| 사용자 리뷰 요청 | Implementing agent | Keep `상태: 없음` unless user input is required |
| 리뷰어를 위한 체크포인트 | Fixed at stub creation | Pre-filled from plan |
| 검증 결과 | Implementing agent | Fill command output only |
| 코드리뷰 결과 | Review agent appends | Not included in stub |

## 코드리뷰 결과

- 종합 판정: PASS
- 차원별 평가:
  - correctness: Pass
  - completeness: Pass
  - test coverage: Pass
  - API contract: Pass
  - code quality: Pass
  - plan deviation: Pass
  - verification trust: Pass
- 발견된 문제: 없음
- 다음 단계: PASS complete.log 작성 후 task directory를 archive로 이동한다.
