<!-- task=m-high-performance-parallel-operations/05+04_slow_mix plan=1 tag=REVIEW_TEST -->

# Plan - REVIEW_TEST

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

`CODE_REVIEW-cloud-G08.md`의 구현 에이전트 소유 섹션을 실제 구현 내용, 검증 명령, stdout/stderr로 채우는 것이 구현의 마지막 단계다. 이전 리뷰는 `code_review_cloud_G08_0.log`이며, Required 2건만 해결한다. archive, `complete.log`, 최종 판정은 code-review 전용이다.

## 배경

첫 리뷰에서 `slow-mix` row가 cleanup 전에 emit되어 `pendingLeak` hard gate가 결과에 반영되지 않는 문제가 발견됐다. 또한 Go `slow-mix`는 같은 connection 안에서 요청을 순차로만 보내므로 느린 handler 뒤에 빠른 요청이 pending 되는 FIFO 지연 축을 검증하지 못한다. 이번 후속은 새 profile의 검증 신뢰를 회복하는 데만 집중한다.

## 사용자 리뷰 요청 흐름

구현 중 blocker는 active `CODE_REVIEW-cloud-G08.md`의 `사용자 리뷰 요청` 섹션에 기록한다. code-review가 그 요청을 검증하고 실제 `USER_REVIEW.md` 작성 여부를 판단한다.

## Roadmap Targets

- Milestone: `agent-roadmap/milestones/high-performance-parallel-operations.md`
- Task ids:
  - `slow-mix`: 빠른 handler와 느린 handler가 섞인 혼합 부하 추가
- Completion mode: check-on-pass

## 분석 결과

### 읽은 파일

- `agent-ops/rules/project/rules.md`
- `agent-ops/rules/common/rules-roadmap.md`
- `agent-roadmap/current.md`
- `agent-roadmap/milestones/high-performance-parallel-operations.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-test/local/rules.md`
- `agent-test/local/proto-socket-full-matrix.md`
- `agent-test/local/typescript-smoke.md`
- `agent-task/m-high-performance-parallel-operations/05+04_slow_mix/plan_cloud_G08_0.log`
- `agent-task/m-high-performance-parallel-operations/05+04_slow_mix/code_review_cloud_G08_0.log`
- `agent-task/archive/2026/06/m-high-performance-parallel-operations/04+01_load_profile_scales/complete.log`
- `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_stress.sh`
- `typescript/bench/stress.ts`
- `dart/bench/stress.dart`
- `go/bench/stress.go`
- `python/bench/stress.py`
- `kotlin/crosstest/stress.kt`
- `typescript/src/communicator.ts`
- `dart/lib/src/communicator.dart`
- `go/communicator.go`
- `python/proto_socket/communicator.py`
- `kotlin/src/main/kotlin/com/tokilabs/proto_socket/Communicator.kt`
- `PROTOCOL.md`
- `agent-test/runs/20260603-031533-proto-socket-stress-quick.md`
- `agent-test/runs/20260603-031543-proto-socket-stress-quick.md`
- `agent-test/runs/20260603-031624-proto-socket-stress-quick.md`
- `agent-test/runs/20260603-031633-proto-socket-full-matrix.md`

### 테스트 환경 규칙

`test_env=local`. `agent-test/local/rules.md`를 읽었고 project-wide/full-cycle은 `agent-test/local/proto-socket-full-matrix.md`, TypeScript 변경은 `agent-test/local/typescript-smoke.md`가 매칭된다. 후속 검증은 focused `run_stress.sh --profile slow-mix`, TypeScript smoke, 전체 matrix, `git diff --check`를 사용한다.

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

- `slow-mix` cleanup leak: 현재 row emit이 close/leak 검사보다 먼저라 close 후 leak을 결과 row와 일부 SUMMARY가 보지 못한다.
- Go same-connection FIFO delay: 현재 Go row는 client별 순차 `SendRequestTyped` 루프라 같은 connection의 in-flight slow/fast mix를 검증하지 못한다.

### 심볼 참조

renamed/removed symbol 없음.

### 분할 판단

split policy를 재평가했다. 이 작업은 기존 `05+04_slow_mix` 첫 리뷰의 Required 후속이고, 같은 파일 집합 안에서 row contract를 보강하는 좁은 수정이다. 별도 subtask로 나누면 같은 profile 계약을 둘로 쪼개 검증이 중복되므로 단일 follow-up plan으로 유지한다.

### 범위 결정 근거

wire format, proto schema, nonce 의미, production communicator API 변경은 제외한다. Kotlin deferred bottleneck 자체 수정은 optimize Epic 범위라 이번 후속에서 해결하지 않는다. `slow-mix` profile의 결과 신뢰와 Go stress harness 보강만 다룬다.

### 빌드 등급

cloud-G08. concurrency stress harness와 verification trust 회복이 핵심이고, 첫 리뷰 Required가 테스트 결과의 PASS 신뢰성에 직접 닿는다.

## 구현 체크리스트

- [ ] [REVIEW_TEST-1] TypeScript/Dart/Go/Python/Kotlin `slow-mix`에서 client close와 pending leak 검사를 row/SUMMARY emission 전에 반영한다.
- [ ] [REVIEW_TEST-2] Go `slow-mix`가 같은 connection의 in-flight slow/fast request FIFO 지연을 실제로 검증하도록 보강한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## [REVIEW_TEST-1] Cleanup Gate Before Row

### 문제

`slow-mix` row emission이 cleanup보다 먼저 실행된다.

Before:

```ts
// typescript/bench/stress.ts:644
summarizeLatencies("slow-mix", axis, latencies, performance.now() - started, stability, "off", peakMem, {
  transport: transportName(transport),
  payloadBytes: testDataPayloadBytes("sm-0-0"),
  clientCount,
});
// ...
if (!leakClear(client)) {
  stability.pendingLeak += 1;
}
```

같은 패턴이 `dart/bench/stress.dart:625`, `go/bench/stress.go:734`, `python/bench/stress.py:554`, `kotlin/crosstest/stress.kt:583`에도 있다.

### 해결 방법

각 `slow-mix` 구현에서 요청 완료 후 바로 row를 emit하지 말고, client close와 `pendingLeak` 검사까지 끝낸 뒤 row를 emit한다. TypeScript는 printed ROW와 SUMMARY가 같은 최종 stability 값을 보도록 `summarizeLatencies` 호출을 cleanup 이후로 옮긴다. Dart/Go/Python/Kotlin은 `_totalViolations`/`totalViol` 누적이 emit 시점 값이므로 반드시 cleanup 이후에 `_emitRow`/`emitRow`가 호출되어야 한다.

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

- [ ] `typescript/bench/stress.ts` slow-mix cleanup 순서를 보정한다.
- [ ] `dart/bench/stress.dart` slow-mix cleanup 순서를 보정한다.
- [ ] `go/bench/stress.go` slow-mix cleanup 순서를 보정한다.
- [ ] `python/bench/stress.py` slow-mix cleanup 순서를 보정한다.
- [ ] `kotlin/crosstest/stress.kt` slow-mix cleanup 순서를 보정한다.

### 테스트 작성

별도 unit test는 작성하지 않는다. 이 파일들이 stress result producer 자체이므로 focused stress 결과 row가 regression artifact다.

### 중간 검증

```bash
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_stress.sh --quick --profile slow-mix --lang typescript --transport tcp
```

기대: TypeScript slow-mix row PASS, `PendLeak` 0, SUMMARY `stability_violations=0`, 결과 파일 기록.

## [REVIEW_TEST-2] Go Same-Connection Slow/Fast Verification

### 문제

[go/bench/stress.go](/config/workspace/proto-socket/go/bench/stress.go:693)의 Go slow-mix는 client별 goroutine 안에서 request를 하나 보내고 응답을 기다린 뒤 다음 request를 보낸다. 이 방식은 cross-connection concurrency는 만들지만, 같은 connection 안에서 느린 request 뒤 빠른 request가 이미 pending인 상황을 만들지 못한다.

### 해결 방법

Go slow-mix가 PASS row를 낼 때는 같은 connection에 slow/fast 요청이 겹친 근거가 있어야 한다. 선호 구현은 bench-only helper를 추가해 한 connection에서 여러 request를 in-flight로 만들고, 느린 index 뒤 fast index가 먼저 완료되면 `fifoViolations`를 증가시키는 방식이다. public request API만으로 deterministic send order를 만들 수 없다는 것이 구현 중 확인되면, Go slow-mix는 PASS row 대신 required SKIP/INCOMPLETE를 emit하고 `계획 대비 변경 사항`에 public API 제약과 재개 조건을 남긴다. 단, sequential per-client request loop를 PASS로 유지하면 안 된다.

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

- [ ] `go/bench/stress.go` slow-mix가 same-connection in-flight slow/fast 축을 검증하도록 보강한다.
- [ ] deterministic in-flight 검증이 불가능하면 Go slow-mix를 required SKIP으로 바꾸고, runner 결과가 PASS가 아닌 INCOMPLETE로 남는지 확인한다.
- [ ] Dart/TypeScript/Python/Kotlin의 slow-mix semantics와 result axis는 변경하지 않는다.

### 테스트 작성

별도 unit test는 작성하지 않는다. Go stress harness의 focused `slow-mix` row 또는 required SKIP 결과를 검증 증거로 사용한다.

### 중간 검증

```bash
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_stress.sh --quick --profile slow-mix --lang go --transport tcp
```

기대: Go가 PASS row를 내는 경우 same-connection in-flight FIFO 검증이 실제 수행되고 stability counters가 0이다. deterministic 검증 불가로 required SKIP을 선택한 경우 전체 결과는 INCOMPLETE이며 PASS로 기록하지 않는다.

## 의존 관계 및 구현 순서

1. REVIEW_TEST-1을 먼저 적용해 result contract 신뢰를 회복한다.
2. REVIEW_TEST-2로 Go slow-mix의 PASS 의미를 보강한다.
3. 최종 검증을 실행하고 active review stub에 실제 stdout/stderr와 결과 파일 경로를 기록한다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| `typescript/bench/stress.ts` | REVIEW_TEST-1 |
| `dart/bench/stress.dart` | REVIEW_TEST-1 |
| `go/bench/stress.go` | REVIEW_TEST-1, REVIEW_TEST-2 |
| `python/bench/stress.py` | REVIEW_TEST-1 |
| `kotlin/crosstest/stress.kt` | REVIEW_TEST-1 |

## 최종 검증

```bash
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_stress.sh --quick --profile slow-mix --lang typescript --transport tcp
cd typescript && npm run check && npm test
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_stress.sh --quick --profile slow-mix --lang dart,go,python,typescript --transport tcp
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_stress.sh --quick --profile slow-mix --lang kotlin --transport tcp,ws
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --all
git diff --check
```

기대: focused TypeScript slow-mix PASS, TypeScript smoke PASS, Dart/Go/Python/TypeScript quick TCP slow-mix PASS 또는 Go가 deterministic 검증 불가를 증명한 required SKIP/INCOMPLETE, Kotlin 기존 required SKIP/INCOMPLETE 유지, full matrix PASS, whitespace 오류 없음.

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