<!-- task=m-performance-hotspot-optimization/06_python_sustained_memory_metric plan=1 tag=REVIEW_TEST -->

# Python Sustained Memory Metric Follow-up Plan - REVIEW_TEST

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

구현 완료의 마지막 단계는 active `CODE_REVIEW-*-G??.md`에서 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채우는 것이다. 코드를 수정한 뒤 아래 검증을 실행하고, 실제 stdout/stderr를 리뷰 스텁에 붙여 넣은 채 active 파일을 유지하고 리뷰 준비 상태로 보고한다. 최종 판정, log rename, `complete.log`, archive 이동은 code-review-skill 전용이다.

구현 중 사용자만 결정할 수 있는 정책 변경, 사용자 소유 외부 환경/secret/서비스 준비, 또는 계획 범위 충돌 없이는 사용자에게 직접 질문하지 않는다. 그런 blocker가 생기면 review stub의 `사용자 리뷰 요청` 섹션에 정확한 결정, 근거, 실행한 명령/출력, 자동 후속 불가 이유, 재개 조건을 기록하고 중단한다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해소할 수 있는 검증 증거 공백은 사용자 리뷰 요청이 아니다.

## Roadmap Targets

- Milestone: `agent-roadmap/milestones/performance-hotspot-optimization.md`
- Task ids:
  - `python-sustained-memory-metric`: Python 30분 sustained memory peak 증가가 구현 leak인지 bench artifact인지 분리한다.
- Completion mode: check-on-pass

## 범위 결정 근거

이 후속 작업은 `code_review_local_G05_0.log`의 Required 2건만 닫는다. Python 제품 transport나 protocol schema는 변경하지 않는다. 첫 번째 Required는 focused test가 실제 `summarize()`를 검증하지 않는 문제이고, 두 번째 Required는 local 성능 규칙의 project-wide quick performance 증거가 누락된 문제다.

## 구현 체크리스트

- [ ] `python/test/test_stress_harness.py`의 `TestSummarizeRequestCount`를 실제 `bench.stress.summarize()` 호출과 `emit_row` monkeypatch 기반 regression test로 교체한다.
- [ ] `cd python && python3 -m pytest -q test/test_stress_harness.py`를 실행해 focused harness tests가 PASS인지 확인한다.
- [ ] `cd python && python3 -m pytest -q`를 실행해 Python unit 전체가 PASS인지 확인한다.
- [ ] `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --quick`을 실행해 local 성능 규칙의 필수 quick performance 검증 결과를 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_TEST-1] Make Summarize Regression Test Exercise Real Code

#### 문제

`python/test/test_stress_harness.py:64`의 `_mock_summary()`가 `summarize()` 로직을 별도로 재구현하므로, 실제 `bench.stress.summarize()`가 `request_count`를 `emit_row()`에 전달하지 않아도 테스트가 통과한다. 원 계획은 `emit_row` monkeypatch로 실제 summarize 결과를 검증하라고 요구했다.

#### 해결 방법

`bench.stress` 모듈을 import하고 `monkeypatch.setattr(stress, "emit_row", fake_emit_row)` 형태로 emitted kwargs를 capture한다. `stress.summarize("sustained", ..., [1.0, 2.0, 3.0], 1000.0, 1, stress.Stability(), 12.3, request_count=200)`를 직접 호출한 뒤 `requests == 200`, `throughput == 200.0`, `p50/p95/p99`가 sample latency 기준으로 계산되는지 assert한다. 기본 경로도 실제 `summarize()`를 호출해 `request_count`가 없을 때 `len(latencies)`를 사용하는지 확인한다.

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

- [ ] `python/test/test_stress_harness.py`: `_mock_summary()` 제거.
- [ ] `python/test/test_stress_harness.py`: 실제 `summarize()` + `emit_row` monkeypatch 테스트 추가.
- [ ] `python/test/test_stress_harness.py`: 사용하지 않는 import나 변수 정리.

#### 테스트 결정

중간 검증:

```bash
cd python && python3 -m pytest -q test/test_stress_harness.py
```

기대 결과: focused tests PASS.

### [REVIEW_TEST-2] Record Required Quick Performance Evidence

#### 문제

`agent-test/local/proto-socket-performance-baseline.md:50`은 성능 관련 코드 변경 후 `run_performance.sh --quick` 실행을 필수 검증으로 둔다. G05 구현은 focused `run_stress.sh --quick --lang python --transport tcp --profile sustained`만 기록해, same-language/cross-language/TypeScript gateway 구성요소를 포함한 quick performance evidence가 없다.

#### 해결 방법

저장소 루트에서 아래 명령을 실행하고 active review stub의 `검증 결과`에 실제 stdout/stderr와 결과 기록 파일 경로를 붙여 넣는다. 실패하면 실패한 구성요소, 재현 명령, 로그 tail을 기록한다.

```bash
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --quick
```

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

- [ ] `CODE_REVIEW-local-G06.md`: quick performance 실행 출력과 결과 기록 파일 경로를 기록.
- [ ] 실패 시 원인을 수정하거나, repo 밖 환경 차단이면 `사용자 리뷰 요청` 섹션에 증거와 재개 조건을 기록.

#### 테스트 결정

중간 검증:

```bash
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --quick
```

기대 결과: overall PASS 또는 repo-owned 실패 원인 수정 후 PASS. 결과 기록 파일이 `agent-test/runs/*-proto-socket-performance-quick.md`에 남아야 한다.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| `python/test/test_stress_harness.py` | REVIEW_TEST-1 |
| `agent-task/m-performance-hotspot-optimization/06_python_sustained_memory_metric/CODE_REVIEW-local-G06.md` | REVIEW_TEST-2 |

## 최종 검증

```bash
cd python && python3 -m pytest -q
```

기대 결과: Python unit 전체 PASS.

```bash
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --quick
```

기대 결과: quick performance 전체 결과 PASS, 결과 기록 파일 생성.

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