<!-- task=m-high-performance-parallel-operations/03+01_payload_matrix plan=0 tag=PAYLOAD_MATRIX -->

# Code Review Reference - PAYLOAD_MATRIX

> **[IMPLEMENTING AGENT - READ FIRST] Filling in this file is the mandatory final step of implementation.**

## 구현 체크리스트

- [x] `01_lang_baseline` 완료 근거를 확인한다.
- [x] payload size matrix를 추가한다. 검증: 1KB, 64KB, 1MB payload에서 latency, throughput, memory peak, gateway backlog가 기록된다.
- [x] quick mode는 작은 샘플, full mode는 Milestone 기준 payload matrix를 실행하도록 한다.
- [x] payload별 결과 row가 공통 schema의 `Payload(bytes)`와 stability counters를 채운다.
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## 구현 메모

- 변경 파일:
  - `typescript/bench/stress.ts` — `payload` profile 추가(PAYLOAD_MATRIX-1). `ALL_PROFILES`/`TRANSPORT_PROFILES`에 `payload` 등록, `payloadFiller`/`payloadLabel` helper, `profilePayload` 추가, `transportRunners`에 연결.
  - `go/bench/stress.go` — `payload` profile 추가. `allProfiles`/runners 등록, `payloadFiller`/`payloadLabel`, `profilePayload`. Go WS는 nhooyr 기본 32KiB read limit 때문에 ~32KB 초과 WS payload를 deferred SKIP으로 남긴다.
  - `python/bench/stress.py` — `payload` profile 추가. `ALL_PROFILES`/`RUNNERS` 등록, `payload_filler`/`payload_label`, `profile_payload`.
  - `dart/bench/stress.dart` — `payload` profile 추가. `_allProfiles`/`_runners` 등록, `_payloadFiller`/`_payloadLabel`, `_profilePayload`.
  - `kotlin/crosstest/stress.kt` — `payload` profile 추가. `ALL_PROFILES`/runners 등록, `payloadFiller`/`payloadLabel`, `sendPayloadOne`, `profilePayload`. 기존 `deferredBottleneck`을 재사용해 Kotlin TCP(delayed-ACK)는 deferred로 남기고 WS만 측정한다.
  - `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_stress.sh` — usage Profiles 목록에 `payload` 설명 추가. orchestrator는 `--profile payload`를 각 언어 harness에 그대로 전달하므로 추가 로직 변경 없음.
- 주요 결정:
  - payload profile은 4개 공통 profile(roundtrip/burst/sustained/parallel)과 같은 5개 언어 공통 축으로 구현했다(gateway만 TypeScript 전용 유지). request-response 기반으로 만들어 payload별 p50/p95/p99 latency, throughput, peak memory를 한 번에 측정한다.
  - payload sizes: quick=[1KB, 64KB], full=[1KB, 64KB, 1MB]. concurrency quick=4/full=8, requests/size quick=20/full=100. `Payload(bytes)` 열에는 deterministic filler(`0123456789abcdef` 반복)로 채운 message의 실제 serialized payload bytes를 기록한다.
  - 두 transport 한계는 라이브러리 수정 없이 기존 deferred 패턴으로 surface했다(라이브러리 변경은 본 subtask 범위 밖, optimize Epic 대상): (1) Go WS는 nhooyr 기본 32KiB read limit으로 ~32KB 초과 WS payload를 deferred SKIP, (2) Kotlin TCP는 기존 `deferredBottleneck`의 delayed-ACK 한계로 deferred(WS만 측정).
- 계획 대비 변경:
  - 계획의 `quick payload smoke` 중간 검증 명령은 `--quick --profile payload`로 그대로 따랐다. payload helper를 별도 파일이 아니라 각 언어 stress harness 내부 함수로 추가해 기존 구조(공통 profile들과 동일 위치)를 따랐다.
  - 계획에 없던 사항으로, payload 축에서만 드러나는 Go WS 32KiB / Kotlin TCP delayed-ACK 한계를 deferred로 명시 기록했다(stability 위반이 아니라 baseline 미완결 표시).

## 검증 결과

- 실행 명령:
  - `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_stress.sh --quick --profile payload`
  - `cd typescript && npm run check && npm test`
  - `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --all`
  - `git diff --check`
- 결과 기록 파일:
  - payload stress quick: `agent-test/runs/20260602-203309-proto-socket-stress-quick.md`
  - full matrix: `agent-test/runs/20260602-203419-proto-socket-full-matrix.md`
- stdout/stderr 요약:
  - payload stress quick: 측정된 모든 payload row(TS/Go/Python/Dart tcp·ws 1KB·64KB, Kotlin ws 1KB·64KB)가 `Payload(bytes)`(예: 1027/65540)와 p50/p95/p99/throughput/peak memory를 채우고 stability_violations=0. 전체 결과값은 `INCOMPLETE`(exit 4)이며 사유는 stability 실패가 아니라 문서화된 deferred 2건뿐: Kotlin tcp(required SKIP 2, delayed-ACK) + Go ws 64KB(required SKIP 1, nhooyr 32KiB read limit). 이는 기존 lang-baseline의 Kotlin TCP deferred와 동일한 baseline 미완결 표기다.
  - full matrix: exit 0, schema sync PASS, 동일언어 5개 PASS, 언어 PASS 매트릭스(Dart.io/Dart.web/Dart.web(WSS)/Go/Kotlin/Python/TypeScript) 전부 PASS, 크로스테스트 일반 방향 16/16, Dart.web·Dart.web(WSS) 방향 2/2 모두 PASS. payload 변경은 bench harness 한정이라 protocol/crosstest 매트릭스에 영향 없음을 재확인.
  - TypeScript: `tsc --noEmit` 통과, vitest 50/50 통과.
  - `git diff --check`: whitespace 오류 없음.
- 미실행 항목:
  - `--full` payload(1MB 포함) 전체 실행은 수행하지 않았다. quick으로 1KB/64KB 측정 경로와 stability gate를 확인했고, full 1MB 경로는 동일 코드 경로에 size만 추가되는 형태다. 후속 에이전트가 `run_stress.sh --full --profile payload` 재실행으로 1MB row까지 수집 가능하다(자동 후속 가능, 사용자 리뷰 요청 아님).

## 사용자 리뷰 요청

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

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

## 코드리뷰 결과

- 종합 판정: FAIL
- 차원별 평가:
  - correctness: Pass
  - completeness: Fail
  - test coverage: Fail
  - API contract: Pass
  - code quality: Pass
  - plan deviation: Fail
  - verification trust: Fail
- 발견된 문제:
  - Required: [agent-task/m-high-performance-parallel-operations/03+01_payload_matrix/CODE_REVIEW-cloud-G08.md](/config/workspace/proto-socket/agent-task/m-high-performance-parallel-operations/03+01_payload_matrix/CODE_REVIEW-cloud-G08.md:47) marks the integrated payload matrix checklist complete while explicitly stating that `--full` payload, the only evidence path that includes 1MB rows, was not run. The planned item requires 1KB, 64KB, and 1MB payload rows with latency, throughput, memory peak, gateway backlog/common schema fields before completion ([PLAN-cloud-G08.md](/config/workspace/proto-socket/agent-task/m-high-performance-parallel-operations/03+01_payload_matrix/PLAN-cloud-G08.md:67)). Fix: run `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_stress.sh --full --profile payload`, record the generated result file, and update the review evidence with the actual 1MB rows or concrete failures/deferred axes.
  - Required: [agent-task/m-high-performance-parallel-operations/03+01_payload_matrix/CODE_REVIEW-cloud-G08.md](/config/workspace/proto-socket/agent-task/m-high-performance-parallel-operations/03+01_payload_matrix/CODE_REVIEW-cloud-G08.md:42) provides summaries and result-file references, but not the actual stdout/stderr required by the review stub. Fix: paste the relevant command stdout/stderr tails or exact saved evidence paths for the quick/full payload, TypeScript check/test, full matrix, and `git diff --check` commands so a reviewer can verify the claims deterministically.
- 다음 단계: WARN/FAIL 후속 plan/review를 작성한다.

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

- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다.
- [x] active `CODE_REVIEW-*-G??.md`를 `code_review_{review_lane}_GNN_N.log`로 아카이브한다.
- [x] active `PLAN-*-G??.md`를 `plan_{build_lane}_GNN_M.log`로 아카이브한다.
- [x] `.gitignore`의 Agent-Ops 관리 block이 `agent-task/**/*.md`와 `agent-task/**/*.log`를 unignore하여 plan/review/archive 산출물이 추적 가능한지 확인한다.
- [ ] PASS이면 `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준으로 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다.
- [ ] PASS이면 active task 디렉터리 `agent-task/{task_name}/`를 `agent-task/archive/YYYY/MM/{task_name}/`로 이동하고 최종 archive 경로에서 이 체크리스트를 갱신한다.
- [ ] PASS이고 task group이 `m-<milestone-slug>`이면 런타임이 읽을 완료 이벤트 메타데이터를 보고하고, roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다.
- [ ] PASS split 작업이면 이동 후 빈 active parent `agent-task/{task_group}/`를 제거하거나, 남은 sibling/file이 있어 유지했다고 확인한다.
- [x] WARN/FAIL이고 user-review gate가 트리거되지 않았으면 다음 active `PLAN-{build_lane}-GNN.md`와 `CODE_REVIEW-{review_lane}-GNN.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로 이동한다.
