<!-- task=m-performance-hotspot-optimization/03_idle_full_baseline plan=1 tag=BASELINE-FIX -->

# Code Review Reference - BASELINE-FIX

> **[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.
> Do not ask the user directly, present choices in chat, or call `request_user_input` during implementation; record the needed decision in `사용자 리뷰 요청` and stop for code-review.
> Finalization (`코드리뷰 결과`, log rename, `complete.log`, archive moves, `코드리뷰 전용 체크리스트`) is review-agent-only, even after compaction/resume.

## 개요

date=2026-06-05
task=m-performance-hotspot-optimization/03_idle_full_baseline, plan=1, tag=BASELINE-FIX

## Roadmap Targets

- Milestone: `agent-roadmap/milestones/performance-hotspot-optimization.md`
- Task ids:
  - `idle-full`: idle host에서 `run_performance.sh --full`을 실행해 개선 전 full baseline을 남긴다.
- Completion mode: check-on-pass

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

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

full aggregate record가 실제로 `overall_result: PASS`인지 확인하세요. PASS aggregate가 없으면 Milestone 문구가 “확정”으로 남지 않았는지, 그리고 필요한 경우 `사용자 리뷰 요청`이 충분한 근거와 재개 조건을 갖췄는지 확인하세요.

---

## 구현 항목별 완료 여부

| 항목 | 완료 여부 |
|------|---------|
| [BASELINE-FIX-1] Full aggregate 결과 정합성 회복 | [x] |
| [BASELINE-FIX-2] Milestone context 수정 | [x] |

## 구현 체크리스트

- [x] `agent-test/runs/20260605-025842-proto-socket-performance-full.md`와 replacement full record가 있다면 그 record의 `overall_result`, `regression_result`, same-language/cross-language/typescript-gateway 상태를 실제 값 그대로 확인해 기록한다. → 아래 `BASELINE-FIX-1 중간 검증`에 실제 출력 기록. record 기록값 `overall_result: FAIL`, `regression_result: SKIPPED`, same-language FAIL / cross-language PASS / typescript-gateway PASS.
- [x] `overall_result: PASS`, `regression_result: SKIPPED`, same-language/cross-language/typescript-gateway 포함 조건을 만족하는 `proto-socket-performance-full` aggregate record를 확보하거나, 이 완료 기준을 완화/보류해야 하는 이유와 필요한 사용자 결정을 `사용자 리뷰 요청`에 기록하고 완료 처리하지 않는다. → PASS aggregate는 Kotlin TCP parallel>=128 deadlock(required SKIP→INCOMPLETE, 의도된 설계)으로 구조적으로 확보 불가. 완료 기준 완화 결정을 `사용자 리뷰 요청`에 기록하고 완료 처리하지 않음.
- [x] `agent-roadmap/milestones/performance-hotspot-optimization.md`의 Full Idle Baseline 문구를 선택한 상태와 일치시킨다. PASS aggregate가 없으면 “확정”으로 쓰지 않고, FAIL/INCOMPLETE 후보와 남은 결정/후속 작업을 명확히 남긴다. → NOTE를 `[!WARNING] Full Idle Baseline 후보 — 미확정`으로 교체하고 기록값 FAIL + TS transient + Kotlin deferred INCOMPLETE + 완료 기준 사용자 결정 필요를 명시. `확인 필요` 라인도 갱신.
- [x] `git diff --check`를 실행하고 출력과 exit code를 검증 결과에 기록한다. → 아래 `최종 검증`에 출력 없음 / `EXIT=0` 기록.
- [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_cloud_G07_N.log`로 아카이브한다.
- [x] active `PLAN-*-G??.md`를 `plan_cloud_G07_M.log`로 아카이브한다.
- [x] `.gitignore`의 Agent-Ops 관리 block이 `agent-task/**/*.md`와 `agent-task/**/*.log`를 unignore하고 `agent-roadmap/current.md`를 ignore하는지 확인한다.
- [ ] PASS이면 `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준으로 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다.
- [ ] PASS이면 active task 디렉터리 `agent-task/m-performance-hotspot-optimization/03_idle_full_baseline/`를 `agent-task/archive/YYYY/MM/m-performance-hotspot-optimization/03_idle_full_baseline/`로 이동하고 최종 archive 경로에서 이 체크리스트를 갱신한다.
- [ ] PASS이고 task group이 `m-performance-hotspot-optimization`이면 런타임이 읽을 완료 이벤트 메타데이터를 보고하고, roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다.
- [ ] PASS split 작업이면 이동 후 빈 active parent `agent-task/m-performance-hotspot-optimization/`를 제거하거나, 남은 sibling/file이 있어 유지했다고 확인한다.
- [ ] WARN/FAIL이고 user-review gate가 트리거되지 않았으면 다음 active `PLAN-cloud-G07.md`와 `CODE_REVIEW-cloud-G07.md`를 작성하고 `complete.log`를 작성하지 않는다.
- [x] USER_REVIEW이면 `agent-ops/skills/common/code-review/templates/user-review-template.md` 기준으로 `USER_REVIEW.md`를 작성하고 active `PLAN-*.md`, `CODE_REVIEW-*.md`, `complete.log`를 남기지 않는다.
- [x] USER_REVIEW가 사용자 결정으로 완료/PASS 해소되면 `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log`를 작성한 뒤 task directory를 archive로 이동한다.

## 계획 대비 변경 사항

- replacement full aggregate 재생성은 수행하지 않았다. PLAN은 "가능하면 idle host 조건에서 replacement full aggregate를 생성한다"이지만, Kotlin TCP parallel clients>=128 deadlock이 harness에서 deferred(required SKIP)→INCOMPLETE로 분류되는 구조라 어떤 재실행도 `overall_result: PASS` aggregate를 만들 수 없다(의도된 설계). full 측정은 sustained 30분 표준 포함으로 수 시간이 소요되며 결과가 구조적으로 non-PASS이므로, 재실행 대신 PLAN의 대체 경로(완료 기준 완화 필요를 `사용자 리뷰 요청`에 기록하고 완료 처리하지 않음)를 따랐다.
- 그 외에는 PLAN 체크리스트와 수정 파일 요약(`performance-hotspot-optimization.md`, 이 CODE_REVIEW)을 그대로 따랐다.

## 주요 설계 결정

- milestone `작업 컨텍스트`의 Full Idle Baseline 블록을 `[!NOTE] ... 확정`에서 `[!WARNING] ... 후보 — 미확정`으로 바꿨다. 기록값 `overall_result: FAIL`(record 헤더 실제값)을 1차로 명시하고, FAIL 단일 원인(TS parallel 1024 TCP timeout 72건)이 재측정 record `20260605-100551`(PASS)에서 재현되지 않은 transient임을 분리했다. transient를 제외해도 Kotlin deferred로 인해 본질이 INCOMPLETE라는 점, 그리고 `overall_result: PASS` 완료 기준이 구조적으로 충족 불가하다는 점을 명시했다.
- 기존 milestone 문구의 핵심 불일치(record는 FAIL인데 문서는 INCOMPLETE로 단정 + "확정" 표현)를 해소했다. record 기록값(FAIL)과 본질 해석(INCOMPLETE)을 분리해 둘 다 정확히 남겼고, PASS aggregate가 없는 상태에서 `idle-full` 완료를 암시하는 문구를 제거했다.
- TypeScript focused rerun(`20260605-100551`)을 full aggregate PASS의 대체 근거로 쓰지 않는다고 명시해, 리뷰 체크포인트("TypeScript focused rerun이 full aggregate PASS를 대체하는 근거로 쓰이지 않았는지")를 충족했다.

## 사용자 리뷰 요청

_기본값은 `없음`이다. 구현 중 사용자 결정, 사용자 소유 외부 환경/secret/서비스 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없으면 아래 항목을 실제 내용으로 교체하고, 구현을 중단한 뒤 active 파일을 그대로 둔 채 리뷰를 요청한다. 구현 에이전트는 사용자에게 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해소할 수 있는 검증 증거 공백만으로는 사용자 리뷰 요청을 작성하지 않는다._

- 상태: 필요
- 사유 유형: 완료 기준(범위) 완화에 대한 사용자 결정
- 결정 필요: `idle-full` Task의 완료 기준 `overall_result: PASS`를, Kotlin TCP parallel>=128 deadlock으로 인한 `INCOMPLETE`(transient 제외 후 본질 상태) 수용으로 완화해 `idle-full`을 완료 처리할지 여부.
- 차단 근거: PLAN/CODE_REVIEW가 명시한 완료 기준은 `overall_result: PASS`다. 그러나 Kotlin TcpClient의 연결당 timeout 없는 blocking read-thread-per-connection 구조 때문에 TCP parallel clients>=128에서 deadlock하고, 이 축은 harness에서 deferred(required SKIP)로 처리되어 harness 설계상 required SKIP은 INCOMPLETE로 분류된다. optional 우회로 PASS를 만드는 것은 금지되어 있으므로, 어떤 full 재실행도 `overall_result: PASS` aggregate를 만들 수 없다. 완료 기준 완화는 제품/검증 범위 결정이라 구현 에이전트가 임의로 정할 수 없다.
- 실행한 검증/명령: 아래 `검증 결과`의 `rg`(record 기록값 FAIL / SKIPPED / same-language FAIL / cross-language PASS / typescript-gateway PASS, same-language 내부 kotlin INCOMPLETE / typescript FAIL 확인)과 `git diff --check`(출력 없음, EXIT=0)를 실행했다. 재측정 record `20260605-100551`은 `overall_result: PASS`로 TS FAIL이 transient임을 확인.
- 자동 후속 불가 이유: 이 차단은 재실행이나 산출물 수집으로 해소되는 evidence 공백이 아니라, 완료 기준 자체(PASS vs INCOMPLETE 수용)에 대한 사용자 범위 결정이다. full 재실행은 구조적으로 non-PASS 결과만 다시 만든다.
- 재개 조건: 사용자가 (1) Kotlin deferred로 인한 INCOMPLETE를 `idle-full` 완료로 수용하면 `20260605-025842` record를 baseline으로 확정하고 `idle-full`을 완료 처리한다. 또는 (2) Kotlin TCP parallel>=128 deadlock을 별도 Epic으로 먼저 해소한 뒤 PASS aggregate를 재생성하기로 하면 그 작업 완료 후 full을 재실행한다. (참고: 진행 중 세션 메모리상 사용자가 INCOMPLETE 수용을 이미 승인한 정황이 있으나, 그 승인이 이 BASELINE-FIX 후속 task의 완료 기준 완화로 공식 적용되는지는 code-review가 확정한다.)

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

- full aggregate record의 실제 `overall_result`와 Milestone 문구가 일치하는지 확인한다.
- PASS aggregate가 없을 때 `idle-full` 완료를 암시하는 문구가 남지 않았는지 확인한다.
- TypeScript focused rerun이 full aggregate PASS를 대체하는 근거로 쓰이지 않았는지 확인한다.

## 검증 결과

_구현 에이전트가 각 중간 검증 및 최종 검증 명령 실행 후 출력을 여기에 붙여 넣는다._

필수 규칙:
- 검증 명령은 고정된 계약이다. 임의로 대체하지 않는다.
- 대체가 필요하면 `계획 대비 변경 사항`에 이유와 대체 명령을 기록한다.
- `검증 결과`에는 실제 stdout/stderr를 붙여 넣는다.
- 사용자 리뷰 요청으로 명령을 끝까지 실행하지 못했다면 `사용자 리뷰 요청`에 실행한 명령, 실제 출력, 미실행 명령의 사유를 기록한다.

### BASELINE-FIX-1 중간 검증
```bash
$ rg --sort path -n "overall_result|regression_result|same-language|cross-language|typescript-gateway|전체 결과값|DONE typescript|kotlin \| INCOMPLETE|typescript \| FAIL" agent-test/runs/20260605-025842-proto-socket-performance-full.md agent-test/runs/20260605-100551-proto-socket-stress-full.md
agent-test/runs/20260605-025842-proto-socket-performance-full.md:6:overall_result: FAIL
agent-test/runs/20260605-025842-proto-socket-performance-full.md:7:regression_result: SKIPPED
agent-test/runs/20260605-025842-proto-socket-performance-full.md:22:- 전체 결과값: FAIL
agent-test/runs/20260605-025842-proto-socket-performance-full.md:36:| same-language | FAIL | 1 | agent-test/runs/20260605-025842-proto-socket-stress-full.md | /tmp/claude-1000/proto-socket-performance.OcWcDA/same-language.log |
agent-test/runs/20260605-025842-proto-socket-performance-full.md:37:| cross-language | PASS | 0 | agent-test/runs/20260605-091449-proto-socket-stress-full-cross.md | /tmp/claude-1000/proto-socket-performance.OcWcDA/cross-language.log |
agent-test/runs/20260605-025842-proto-socket-performance-full.md:38:| typescript-gateway | PASS | 0 | agent-test/runs/20260605-092037-proto-socket-stress-full.md | /tmp/claude-1000/proto-socket-performance.OcWcDA/typescript-gateway.log |
agent-test/runs/20260605-025842-proto-socket-performance-full.md:417:DONE typescript: FAIL (rows=34 skips=0 required_skips=0 violations=72)
agent-test/runs/20260605-025842-proto-socket-performance-full.md:424:| kotlin | INCOMPLETE | 31 | 3 | 3 | 0 | required SKIP=3 (deferred: optimize Epic — Kotlin TcpClient blocking read-thread-per-connection without bounded read timeout deadlocks at TCP parallel clients>=128 (thread starvation, no forward progress)) |
agent-test/runs/20260605-025842-proto-socket-performance-full.md:426:| typescript | FAIL | 34 | 0 | 0 | 72 |  |
agent-test/runs/20260605-025842-proto-socket-performance-full.md:428:전체 결과값: FAIL
agent-test/runs/20260605-025842-proto-socket-performance-full.md:463:전체 결과값: PASS   # cross-language 구성요소
agent-test/runs/20260605-025842-proto-socket-performance-full.md:489:전체 결과값: PASS   # typescript-gateway 구성요소
agent-test/runs/20260605-100551-proto-socket-stress-full.md:6:overall_result: PASS
agent-test/runs/20260605-100551-proto-socket-stress-full.md:20:- 전체 결과값: PASS

# 해석: 후보 record(025842)의 기록값은 overall_result=FAIL / regression=SKIPPED.
#   구성요소 same-language=FAIL, cross-language=PASS, typescript-gateway=PASS.
#   same-language 내부 kotlin=INCOMPLETE(TCP parallel>=128 deferred), typescript=FAIL(parallel 1024 TCP timeout 72건).
#   재측정 record(100551)는 overall_result=PASS → TS FAIL은 transient.
```

### 최종 검증
```bash
$ git diff --check
$ echo "EXIT=$?"
EXIT=0
```
출력 없음, exit code 0 (whitespace/conflict marker 문제 없음).

---

> **[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.

## 코드리뷰 결과

- 종합 판정: WARN
- 차원별 평가:
  - correctness: Pass
  - completeness: Warn
  - test coverage: Pass
  - API contract: Pass
  - code quality: Pass
  - plan deviation: Pass
  - verification trust: Pass
- 발견된 문제:
  - Suggested: `agent-task/m-performance-hotspot-optimization/03_idle_full_baseline/CODE_REVIEW-cloud-G07.md:81`의 사용자 리뷰 요청은 타당합니다. Milestone 문구는 `agent-roadmap/milestones/performance-hotspot-optimization.md:170`에서 “후보 — 미확정”으로 바뀌었고, 실제 record 상태도 `agent-test/runs/20260605-025842-proto-socket-performance-full.md:6`의 `overall_result: FAIL` 및 `:424`의 Kotlin `INCOMPLETE`로 정확히 기록되었습니다. 남은 쟁점은 코드/검증 재실행으로 해소할 evidence 공백이 아니라 `idle-full`의 `overall_result: PASS` 완료 기준을 Kotlin deferred 본질 상태인 INCOMPLETE 수용으로 완화할지에 대한 사용자 범위 결정입니다. 수정은 자동 follow-up plan이 아니라 `USER_REVIEW.md` stop state를 작성해 사용자의 결정을 받는 것입니다.
- 다음 단계: USER_REVIEW stop state를 작성하고 active PLAN/CODE_REVIEW를 아카이브한다.
