<!-- task=m-performance-hotspot-optimization/16_perf_regression plan=3 tag=REVIEW_REVIEW_REVIEW_TEST -->

# Plan - REVIEW_REVIEW_REVIEW_TEST

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

이 작업은 plan=2 구현의 미완료 full performance 최종 검증 evidence를 회수하는 follow-up이다. 새 코드 변경을 하지 말고, 이미 시작된 `run_performance.sh --full --baseline ...` 실행이 완료됐는지 확인한 뒤 결과 파일과 stdout/stderr를 `CODE_REVIEW-cloud-G07.md`에 기록한다. 실행이 중단됐거나 결과 파일이 없으면 동일 명령을 재실행한다. 사용자 소유 idle host, 외부 환경, scope conflict 때문에 진행할 수 없으면 review stub의 `사용자 리뷰 요청` 섹션에 정확한 근거를 기록하고 멈춘다. 구현 중 사용자에게 직접 질문하거나 `request_user_input`, `USER_REVIEW.md`, `complete.log`, archive 로그를 만들지 않는다. 명령 재실행이나 결과 수집으로 해소 가능한 증거 공백은 사용자 리뷰 요청이 아니라 검증 결과/계획 대비 변경 사항에 남긴다.

## 배경

plan=2는 Dart WS burst hard-gate 회귀를 수정하고 focused 검증을 PASS로 전환했다. 하지만 full performance 최종 검증은 `RUN IN PROGRESS`로 남았고, review 시점에도 `run_performance.sh` PID 9839가 실행 중이었다. 이 상태에서는 `perf-regression` Task의 최종 `overall_result`, `regression_result`, compared/warning rows를 판정할 수 없다.

## 사용자 리뷰 요청 흐름

구현 중 차단은 active review stub의 `사용자 리뷰 요청` 섹션에 기록한다. 직접 사용자 프롬프트는 금지이며, code-review가 요청 타당성을 검증하고 실제 `USER_REVIEW.md` 작성을 소유한다. 명령 재실행이나 결과 수집으로 해소 가능한 증거 공백은 사용자 리뷰 요청이 아니라 검증 결과/계획 대비 변경 사항에 남긴다.

## Roadmap Targets

- Milestone: `agent-roadmap/milestones/performance-hotspot-optimization.md`
- Task ids:
  - `perf-regression`: 개선 후 `run_performance.sh --full --baseline <baseline>`을 실행해 throughput 20% 이상 하락 또는 p99 25% 이상 악화 WARN 후보를 확인한다.
- Completion mode: check-on-pass

## 분석 결과

### 읽은 파일

- `agent-task/m-performance-hotspot-optimization/16_perf_regression/plan_cloud_G07_2.log`
- `agent-task/m-performance-hotspot-optimization/16_perf_regression/code_review_cloud_G07_2.log`
- `agent-test/local/proto-socket-performance-baseline.md`
- `.tmp/perf-regression-G07-fix-20260607-041332.log`
- `dart/lib/src/inbound_gateway_io.dart`
- `dart/lib/src/ws_protobuf_client_io.dart`
- `dart/lib/src/ws_protobuf_client_web.dart`
- `dart/test/socket_test.dart`

### 테스트 환경 규칙

`test_env=local`이다. 성능 회귀 확인이므로 `agent-test/local/proto-socket-performance-baseline.md`의 baseline 지정 full 비교를 적용한다. 필수 명령은 `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full --baseline agent-test/runs/20260605-025842-proto-socket-performance-full.md --throughput-drop-pct 20 --p99-worse-pct 25`다. 실행 결과 파일은 `agent-test/runs/YYYYMMDD-HHMMSS-proto-socket-performance-full.md`에 남아야 한다.

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

Dart unit/focused stress evidence는 plan=2 review stub에 기록됐다. 남은 공백은 full performance aggregate result와 regression comparison evidence다. 이 공백은 실행 중인 명령 완료 또는 동일 명령 재실행으로 해소 가능하다.

### 심볼 참조

none. 새 symbol 변경은 이 follow-up 범위가 아니다.

### 분할 판단

기존 split subtask `16_perf_regression`의 follow-up이다. 새 split을 만들지 않는다. sibling `17+16_compat_matrix`는 16번 완료 뒤 실행되는 별도 compatibility 검증이므로 이 plan에 포함하지 않는다.

### 범위 결정 근거

소스 수정 없음. Dart/TypeScript 추가 수정, threshold 변경, baseline 변경, result format 변경은 범위 밖이다. full run이 hard-gate FAIL이면 fix를 시도하지 말고 row와 원인을 기록해 다음 code-review가 별도 follow-up을 라우팅하게 한다.

### 빌드 등급

`cloud-G07`: 장시간 terminal benchmark-style 검증, 백그라운드 process/result-file 회수, stdout/stderr 신뢰 확인이 핵심이므로 cloud route를 유지한다.

## 구현 체크리스트

- [ ] 실행 중인 full performance process(PID 9839 또는 `.tmp/perf-regression-G07-fix-20260607-041332.log`의 `PERF_PID`) 상태를 확인하고, 아직 실행 중이면 완료까지 기다린다.
- [ ] 완료된 full performance 결과 파일을 찾고, 없거나 실행이 중단됐으면 동일 full baseline 비교 명령을 재실행한다.
- [ ] 결과 파일의 `overall_result`, `regression_result`, 구성요소 요약, compared rows, missing baseline rows, warning rows를 기록한다.
- [ ] hard-gate FAIL 또는 regression WARN row가 있으면 row key, throughput/p99 변화, hard gate 위반 여부, watchlist/후속 처리 판단을 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_REVIEW_REVIEW_TEST-1] Full Performance Result Recovery

문제: `agent-task/m-performance-hotspot-optimization/16_perf_regression/code_review_cloud_G07_2.log:46`, `:54`, `:176`-`:190`은 full performance 최종 검증을 `RUN IN PROGRESS`로 남겼다. 리뷰 시점에 `run_performance.sh --full --baseline ...` PID 9839가 실행 중이었고, fix 후 `proto-socket-performance-full.md` 결과 파일은 아직 생성되지 않았다.

해결 방법: 먼저 `ps`와 `.tmp/perf-regression-G07-fix-20260607-041332.log`로 기존 run 상태를 확인한다. 실행 중이면 완료를 기다려 결과 파일을 찾는다. 프로세스가 종료됐는데 결과 파일이 없거나 stdout/stderr가 부족하면 동일 명령을 재실행하고 결과를 기록한다.

수정 파일 및 체크리스트:

- [ ] 소스 수정 없음.
- [ ] `CODE_REVIEW-cloud-G07.md`: full run 상태 확인 출력, 결과 파일 경로, `overall_result`, `regression_result`, compared/warning rows, WARN/FAIL 분류를 실제 내용으로 기록.

테스트 작성: 작성하지 않는다. 이 작업은 full performance 검증 evidence 회수다.

중간 검증:

```bash
ps -p 9839 -o pid,etime,cmd || true
tail -n 80 .tmp/perf-regression-G07-fix-20260607-041332.log || true
ls -t agent-test/runs/*proto-socket-performance-full.md | head -5
```

기대 결과: 기존 run이 실행 중이면 완료를 기다릴 수 있고, 종료됐다면 결과 파일 또는 재실행 필요 사유가 확인된다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| 소스 수정 없음 | REVIEW_REVIEW_REVIEW_TEST-1 |
| `agent-test/runs/YYYYMMDD-HHMMSS-proto-socket-performance-full.md` | REVIEW_REVIEW_REVIEW_TEST-1 |
| `CODE_REVIEW-cloud-G07.md` | REVIEW_REVIEW_REVIEW_TEST-1 |

## 최종 검증

```bash
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full --baseline agent-test/runs/20260605-025842-proto-socket-performance-full.md --throughput-drop-pct 20 --p99-worse-pct 25
```

기대 결과: 같은 baseline 기준 full performance 결과 파일이 생성된다. stability hard gate 위반이 없어야 한다. `regression_result`가 PASS이면 `perf-regression` 완료 evidence로 기록한다. `regression_result`가 WARN이면 warning rows를 모두 분류하고, 남은 WARN의 원인과 후속 처리가 기록되어야 한다. hard-gate FAIL이 남으면 이 task는 PASS가 아니다.

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