test(perf): Kotlin TCP 병렬 기준선을 보강한다
Kotlin TCP parallel>=128이 baseline run을 멈추는 병목으로 확인되어 해당 행을 deferred로 기록하고, idle full baseline 후보와 후속 판단 근거를 로드맵과 작업 로그에 남긴다.
This commit is contained in:
parent
c3bbd70f4c
commit
d79e6cf2d7
13 changed files with 932 additions and 8 deletions
|
|
@ -29,7 +29,7 @@ Proto Socket은 여러 언어와 플랫폼에서 일관되게 동작하는 얇
|
|||
|
||||
- [안정화 기준선](milestones/stability-baseline.md) - 상태: 완료; 목표: 현재 5개 언어 구현을 완성형 후보로 보고 안정성 판단과 유지 기준을 정리한다.
|
||||
- [수신 큐와 처리 순서 보장](archive/phase/stability-maintenance/milestones/inbound-queue-ordering.md) - 상태: 완료; 목표: 현재 5개 언어 구현에 per-connection 수신 큐와 언어별 worker gateway 후보를 도입해 수신 처리 순서, 자동 응답 출력 순서, thread-safe한 공유 상태 접근, 대량 처리 성능 개선 가능성을 보장한다.
|
||||
- [고성능 병렬 운용 기준선과 최적화](milestones/high-performance-parallel-operations.md) - 상태: [진행중]; 목표: 현재 5개 언어 구현의 병렬 운용 성능을 언어별/transport별로 측정하고 gateway, queue, worker, serialization 병목을 최적화한다.
|
||||
- [고성능 병렬 운용 기준선과 최적화](milestones/high-performance-parallel-operations.md) - 상태: [계획]; 목표: 현재 5개 언어 구현의 병렬 운용 성능을 언어별/transport별로 측정하고 gateway, queue, worker, serialization 병목을 최적화한다.
|
||||
- [언어별 성능 병목 개선](milestones/performance-hotspot-optimization.md) - 상태: [진행중]; 목표: 측정 결과에서 확인된 Dart TCP fixed latency/large payload 및 isolate receive path hardening, TypeScript WS large payload, Kotlin WS latency/slow-mix 검증 모델, TypeScript gateway `worker_threads` overhead 병목을 안정성 hard gate와 단일 mandatory receive path 원칙을 유지하면서 개선하고, Go/Python reference 기준점을 보강한다.
|
||||
|
||||
### 남은 native platform 포팅
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
## 상태
|
||||
|
||||
[진행중]
|
||||
[계획]
|
||||
|
||||
## 구현 잠금
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ idle 상태에서 성능 기준점을 다시 찍고, 개선 전후 비교 기준
|
|||
|
||||
기존 결과와 idle baseline을 비교해 언어별 병목 우선순위를 확정한다.
|
||||
|
||||
- [ ] [hotspot-report] Dart TCP fixed latency/large payload/isolate gateway hardening, TypeScript WS large payload, Kotlin WS latency/slow-mix 검증 모델, TypeScript gateway overhead를 병목 리포트로 정리한다. 검증: 각 병목 후보에 근거 결과 파일, 대상 row, p99/throughput/memory 수치, 개선 전 기준값이 기록된다.
|
||||
- [x] [hotspot-report] Dart TCP fixed latency/large payload/isolate gateway hardening, TypeScript WS large payload, Kotlin WS latency/slow-mix 검증 모델, TypeScript gateway overhead를 병목 리포트로 정리한다. 검증: 각 병목 후보에 근거 결과 파일, 대상 row, p99/throughput/memory 수치, 개선 전 기준값이 기록된다.
|
||||
- [x] [fast-path-ref] Go/Python 결과를 reference fast path로 정리해 다른 언어 경로와 비교한다. 검증: Go/Python concurrency 256 및 1MB payload rows가 같은 표에 포함되고, Go/Python은 최우선 런타임 최적화 대상이 아니라 기준점 보강 대상으로 분류된다.
|
||||
|
||||
### Epic: [go-reference] Go reference 기준점 보강
|
||||
|
|
@ -97,9 +97,9 @@ Kotlin TCP는 현재 same-language 기준에서 안정적인 유지 대상이다
|
|||
|
||||
이 Epic은 TypeScript gateway에 한정한다. gateway는 순차 이벤트 보장과 event loop 보호를 담당하는 mandatory receive path이며, 사용자/운영 설정으로 켜고 끄는 옵션을 두지 않는다. 현재 `worker_threads` per-frame offload 비용은 gateway를 끄는 근거가 아니라, worker hop을 기본 경로에서 제거하거나 내부 구현으로 재설계해야 하는 hardening 근거로 분류한다.
|
||||
|
||||
- [ ] [ts-gateway-single-path] TypeScript gateway를 제품 기본 수신 경로로 유지하기 위한 단일 경로 조건을 정의한다. 검증: gateway가 FIFO, nonce matching, close cleanup, bounded backlog hard gate를 유지하고, gateway/worker on-off 같은 외부 옵션 없이 같은 idle baseline 대비 p99/throughput 회귀 기준을 넘지 않는 조건이 문서화된다.
|
||||
- [ ] [ts-worker-hop-removal] TypeScript `worker_threads` 기반 per-frame offload를 기본 gateway 경로에서 제거하거나, 동일 단일 경로 내부 구현으로 재설계한다. 검증: worker hop, buffer copy, reorder wait, sink serialization, backpressure 차이, memory 증가, p99 악화 원인이 줄어들고, 결과가 `run_performance.sh --full --baseline <baseline>` 병목 리포트에 기록된다.
|
||||
- [ ] [gateway-overhead] TypeScript gateway 경로의 남은 overhead를 legacy inline control row와 비교해 정량화한다. 검증: 차이가 제품 정책 옵션으로 해석되지 않도록 control row는 분석용 대조군으로만 기록되고, 결론은 단일 mandatory receive path hardening 항목으로 남는다.
|
||||
- [x] [ts-gateway-single-path] TypeScript gateway를 제품 기본 수신 경로로 유지하기 위한 단일 경로 조건을 정의한다. 검증: gateway가 FIFO, nonce matching, close cleanup, bounded backlog hard gate를 유지하고, gateway/worker on-off 같은 외부 옵션 없이 같은 idle baseline 대비 p99/throughput 회귀 기준을 넘지 않는 조건이 문서화된다.
|
||||
- [x] [ts-worker-hop-removal] TypeScript `worker_threads` 기반 per-frame offload를 기본 gateway 경로에서 제거하거나, 동일 단일 경로 내부 구현으로 재설계한다. 검증: worker hop, buffer copy, reorder wait, sink serialization, backpressure 차이, memory 증가, p99 악화 원인이 줄어들고, 결과가 `run_performance.sh --full --baseline <baseline>` 병목 리포트에 기록된다.
|
||||
- [x] [gateway-overhead] TypeScript gateway 경로의 남은 overhead를 legacy inline control row와 비교해 정량화한다. 검증: 차이가 제품 정책 옵션으로 해석되지 않도록 control row는 분석용 대조군으로만 기록되고, 결론은 단일 mandatory receive path hardening 항목으로 남는다.
|
||||
|
||||
### Epic: [verify] 회귀 검증
|
||||
|
||||
|
|
@ -167,7 +167,13 @@ Kotlin TCP는 현재 same-language 기준에서 안정적인 유지 대상이다
|
|||
- 병목 리포트:
|
||||
|
||||
> [!WARNING]
|
||||
> **Full Idle Baseline 부재**: 성능/스트레스 측정을 위한 최상위 통제 환경(Idle Host)에서의 Full Baseline(`run_performance.sh --full`) 결과가 아직 수집되지 않았습니다. 현재 기록된 개선 전 기준값들은 기존 local/remote 환경에서의 stress-full/quick 테스트 실행 결과(`agent-test/runs/*`)를 토대로 취합한 임시 기준입니다. `[idle-full]` 및 `[compare-rule]` 작업이 완료되어 전용 Baseline record가 남겨지기 전까지는 이 값들을 잠정적인 비교 기준으로 사용합니다.
|
||||
> **Full Idle Baseline 후보 — 미확정 (2026-06-05)**: idle host에서 `run_performance.sh --full` 결과를 수집했다. 측정 host는 code-server 컨테이너이며 load ~6/10코어 상태를 이 환경의 idle 기준으로 인정한다(컨테이너 상시 부하를 차단/감점 사유로 보지 않는다). 후보 record: [`agent-test/runs/20260605-025842-proto-socket-performance-full.md`](file:///config/workspace/proto-socket/agent-test/runs/20260605-025842-proto-socket-performance-full.md). 구성요소 record는 same-language [`...025842-...stress-full.md`](file:///config/workspace/proto-socket/agent-test/runs/20260605-025842-proto-socket-stress-full.md), cross-language [`...091449-...stress-full-cross.md`](file:///config/workspace/proto-socket/agent-test/runs/20260605-091449-proto-socket-stress-full-cross.md), typescript-gateway [`...092037-...stress-full.md`](file:///config/workspace/proto-socket/agent-test/runs/20260605-092037-proto-socket-stress-full.md)이다.
|
||||
> - 이 record는 아직 `idle-full` 완료 baseline으로 **확정하지 않는다**. record에 기록된 최상위 `overall_result`는 **FAIL**, `regression_result`는 `--baseline` 미지정으로 SKIPPED다. 구성요소는 same-language **FAIL**, cross-language PASS, typescript-gateway PASS이며, same-language 내부는 dart/go/python PASS, kotlin INCOMPLETE, typescript FAIL이다.
|
||||
> - 구성요소 same-language / cross-language / typescript-gateway 모두 포함. sustained 30초/5분/30분은 5개 언어 TCP/WS 전부 stability violation 0 PASS.
|
||||
> - 기록된 FAIL의 단일 원인은 `parallel clients=1024 / TypeScript / tcp` 행의 timeout 72건(512,000 요청 중 0.014%, 그 외 nonce/FIFO/leak violation 0)이다. 2026-06-05 동일 조건 재측정([`agent-test/runs/20260605-100551-proto-socket-stress-full.md`](file:///config/workspace/proto-socket/agent-test/runs/20260605-100551-proto-socket-stress-full.md), `overall_result: PASS`)에서 16/128/512/1024 전부 timeout 0 PASS로 재현되지 않아 일시적 컨테이너 부하 transient로 판정한다. TypeScript TCP 구현의 회귀/병목이 아니다. 다만 이 재측정은 TypeScript focused rerun이므로 full aggregate PASS를 대체하는 근거로 쓰지 않는다.
|
||||
> - TypeScript transient를 제외해도 이 record는 PASS가 될 수 없다. Kotlin TcpClient가 연결당 timeout 없는 blocking read-thread-per-connection 구조라 TCP parallel clients>=128에서 thread starvation으로 deadlock하며, 해당 축을 harness에서 deferred(required SKIP)로 처리했다. harness가 required SKIP을 INCOMPLETE로 분류하는 것은 의도된 설계이고 optional 우회로 PASS를 만들지 않는다. 따라서 transient를 걷어낸 본질 상태는 Kotlin deferred로 인한 **INCOMPLETE**다. 이 Kotlin TCP parallel>=128 deadlock은 별도 최적화 대상(Epic)으로 남긴다.
|
||||
> - `idle-full`의 완료 기준은 `overall_result: PASS`이지만 위 Kotlin deadlock(required SKIP→INCOMPLETE, 의도된 설계) 때문에 구조적으로 충족 불가하다. 이 완료 기준 완화(INCOMPLETE 수용) 여부는 사용자 결정 사항이며 [`03_idle_full_baseline/CODE_REVIEW-cloud-G07.md`](file:///config/workspace/proto-socket/agent-task/m-performance-hotspot-optimization/03_idle_full_baseline/CODE_REVIEW-cloud-G07.md)의 `사용자 리뷰 요청`에 기록했다. 결정 전까지 `idle-full` 완료를 암시하는 문구를 쓰지 않는다.
|
||||
> - 서로 다른 host/runtime/profile의 절대 수치는 고정 합격선으로 삼지 않는다. 이 record는 개선 전후를 같은 환경에서 비교하기 위한 후보 record로만 사용한다.
|
||||
|
||||
### 1. 언어별 병목 후보 및 개선 목표
|
||||
|
||||
|
|
@ -218,4 +224,7 @@ Kotlin TCP는 현재 same-language 기준에서 안정적인 유지 대상이다
|
|||
- `agent-test/runs/20260603-095712-proto-socket-performance-quick.md`는 baseline 비교 경로가 `compared rows: 90`, `missing baseline rows: 0`, `warning rows: 0`으로 동작함을 확인했다.
|
||||
- 즉시 처리:
|
||||
- [fast-path-ref] Go/Python reference fast path 분류는 `agent-test/runs/20260603-062724-proto-socket-stress-full.md`의 concurrency 256 및 1MB payload rows와 `agent-test/runs/20260602-232000-proto-socket-stress-full.md`의 burst/parallel/sustained rows를 근거로 완료 처리했다. Go는 fast path 기준점, Python은 중간 reference 기준점이며 둘 다 최우선 런타임 최적화 대상이 아니라 기준점 보강 대상으로 유지한다.
|
||||
- 확인 필요: idle host에서 full baseline을 다시 측정한 뒤, 위 참고 결과 중 환경 잡음이 큰 quick 수치를 최종 개선 기준으로 쓸지 여부를 판단한다.
|
||||
- [hotspot-report] 병목 리포트 정리는 `agent-task/archive/2026/06/m-performance-hotspot-optimization/01_hotspot_report/complete.log`의 PASS 완료 이벤트와 `Roadmap Completion` 근거로 완료 처리했다.
|
||||
- [ts-gateway-single-path] TypeScript default receive gateway 단일 경로 정리는 `agent-task/archive/2026/06/m-performance-hotspot-optimization/01_ts_gateway_single_path/complete.log`의 PASS 완료 이벤트와 TypeScript check/test 결과를 근거로 완료 처리했다.
|
||||
- [ts-worker-hop-removal], [gateway-overhead] TypeScript gateway 성능 row 분리와 worker_threads/control overhead 정량화는 `agent-task/archive/2026/06/m-performance-hotspot-optimization/02+01_ts_gateway_perf_rows/complete.log`의 PASS 완료 이벤트, `agent-test/runs/20260604-103828-proto-socket-stress-quick.md`, `agent-test/runs/20260604-102233-proto-socket-performance-quick.md`, `agent-test/runs/20260604-104812-proto-socket-full-matrix.md`를 근거로 완료 처리했다.
|
||||
- 확인 필요: idle full baseline record(`20260605-025842-proto-socket-performance-full.md`)는 아직 확정하지 않은 후보다. 기록 결과는 `overall_result: FAIL`(TypeScript transient 단일 원인)이고 transient 제외 시 Kotlin deferred로 인한 INCOMPLETE라, `overall_result: PASS` 완료 기준 완화 여부에 대한 사용자 결정이 선행돼야 `idle-full`을 완료 처리할 수 있다(`03_idle_full_baseline/CODE_REVIEW-cloud-G07.md`의 `사용자 리뷰 요청` 참조). 그 결정 후 위 병목 표의 개선 전 기준값을 quick/이전 stress 수치에서 이 full baseline의 same-language full rows로 교체할지 판단한다(`[compare-rule]`로 같은 환경 비교 시 반영). Kotlin TCP parallel>=128은 deadlock으로 deferred 상태라 해당 축은 별도 최적화 후 측정한다.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,61 @@
|
|||
# User Review Resolved - m-performance-hotspot-optimization/03_idle_full_baseline
|
||||
|
||||
## 요청 일시
|
||||
|
||||
2026-06-05
|
||||
|
||||
## 상태
|
||||
|
||||
RESOLVED
|
||||
|
||||
## 사유
|
||||
|
||||
- 유형: implementation-blocked
|
||||
- 현재 리뷰 회차: 2
|
||||
- 최종 판정: PASS/RESOLVED
|
||||
- 요약: 사용자가 Kotlin TCP parallel>=128 deferred로 인한 INCOMPLETE를 이번 `idle-full` 완료 기준으로 수용하기로 결정했다. 이에 따라 `20260605-025842` full record를 개선 전 baseline evidence로 받아들이고 task를 완료 처리한다.
|
||||
|
||||
## 루프 이력
|
||||
|
||||
| Plan | Review | Verdict | 메모 |
|
||||
|------|--------|---------|------|
|
||||
| `plan_cloud_G07_1.log` | `code_review_cloud_G07_1.log` | FAIL | 실패한 full aggregate record를 “확정” baseline처럼 기록했고 실제 `overall_result: FAIL`과 Milestone 문구가 불일치했다. |
|
||||
| `plan_cloud_G07_2.log` | `code_review_cloud_G07_2.log` | WARN | Milestone 문구를 “후보 — 미확정”으로 바로잡았고, 남은 차단은 `overall_result: PASS` 기준 완화 여부에 대한 사용자 결정이다. |
|
||||
|
||||
## 차단 근거
|
||||
|
||||
- 문제: `agent-test/runs/20260605-025842-proto-socket-performance-full.md`는 `overall_result: FAIL`, `regression_result: SKIPPED`, same-language FAIL, cross-language PASS, typescript-gateway PASS다. TypeScript TCP parallel 1024 timeout 72건은 focused rerun `agent-test/runs/20260605-100551-proto-socket-stress-full.md`에서 재현되지 않아 transient로 보이지만, Kotlin TCP parallel>=128은 required SKIP으로 남아 full aggregate PASS를 만들 수 없다.
|
||||
- 현재 archive plan: `plan_cloud_G07_2.log`
|
||||
- 현재 archive review: `code_review_cloud_G07_2.log`
|
||||
- 검증 명령: `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`
|
||||
- 실제 출력: `20260605-025842`는 `overall_result: FAIL`, same-language FAIL, cross-language PASS, typescript-gateway PASS, Kotlin INCOMPLETE, TypeScript FAIL이다. `20260605-100551`은 TypeScript TCP parallel focused rerun `overall_result: PASS`다.
|
||||
- 차단 판단 근거: `overall_result: PASS`를 요구하는 원래 완료 기준을 완화할지, Kotlin TCP deadlock을 먼저 고쳐 full PASS aggregate를 다시 만들지는 제품/검증 범위 결정이다. 후속 에이전트가 같은 full 명령을 재실행해도 Kotlin required SKIP 때문에 구조적으로 PASS completion evidence를 만들 수 없다.
|
||||
|
||||
## 사용자 결정 필요
|
||||
|
||||
- [x] Kotlin deferred로 인한 INCOMPLETE를 이번 `idle-full` 완료 기준으로 수용하고, `20260605-025842` record를 baseline 후보에서 확정 baseline으로 전환한다.
|
||||
- [ ] Kotlin TCP parallel>=128 deadlock을 먼저 별도 구현 작업으로 해결한 뒤 `run_performance.sh --full`을 재실행해 `overall_result: PASS` aggregate를 만든다.
|
||||
- [ ] `idle-full` 완료 기준을 재작성한다.
|
||||
- [ ] 작업 범위를 줄이거나 보류/폐기한다.
|
||||
|
||||
## 해소 내용
|
||||
|
||||
- 사용자 결정: “1번 방향으로 해” — Kotlin deferred INCOMPLETE를 `idle-full` 완료 기준으로 수용한다.
|
||||
- 해소 판정: PASS/RESOLVED.
|
||||
- 완료 근거: `agent-test/runs/20260605-025842-proto-socket-performance-full.md`는 same-language/cross-language/typescript-gateway 구성요소를 포함하고 `regression_result: SKIPPED`를 기록했다. TypeScript FAIL은 focused rerun `agent-test/runs/20260605-100551-proto-socket-stress-full.md`에서 재현되지 않은 transient로 분리했고, 남은 non-PASS 본질은 별도 최적화 대상으로 분리된 Kotlin TCP parallel>=128 required SKIP이다.
|
||||
|
||||
## 해소 후 상태
|
||||
|
||||
- `USER_REVIEW.md`는 해소 상태로 갱신되었다.
|
||||
- `complete.log`가 작성되었고 task directory는 archive로 이동되었다.
|
||||
- 이후 runtime completion event가 `idle-full` roadmap completion 반영을 맡는다.
|
||||
|
||||
## 다음 실행 힌트
|
||||
|
||||
- 이 task는 완료되었다.
|
||||
- 다음 활성 task path: `agent-task/m-performance-hotspot-optimization/04+03_compare_rule_full_baseline/`
|
||||
|
||||
## 종료 규칙
|
||||
|
||||
- 사용자가 이 stop state를 완료/PASS로 해소하면 `USER_REVIEW.md`를 해소 상태로 갱신하고, `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준 `complete.log`를 작성한 뒤 task directory를 archive로 이동한다.
|
||||
- 새 구현이 필요하면 `plan` 스킬이 `USER_REVIEW.md`를 `user_review_N.log`로 아카이브한 뒤 새 `PLAN-*-G??.md` / `CODE_REVIEW-*-G??.md`를 작성한다.
|
||||
|
|
@ -0,0 +1,144 @@
|
|||
<!-- task=m-performance-hotspot-optimization/03_idle_full_baseline plan=0 tag=BASELINE -->
|
||||
|
||||
# Code Review Reference - BASELINE
|
||||
|
||||
> **[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.
|
||||
> 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=0, tag=BASELINE
|
||||
|
||||
## 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 performance record가 실제로 `overall_result: PASS`이고 same-language/cross-language/typescript-gateway 구성요소를 포함하는지 확인하세요.
|
||||
|
||||
---
|
||||
|
||||
## 구현 항목별 완료 여부
|
||||
|
||||
| 항목 | 완료 여부 |
|
||||
|------|---------|
|
||||
| [BASELINE-1] Full Idle Baseline 수집 | [x] |
|
||||
|
||||
## 구현 체크리스트
|
||||
|
||||
- [x] idle host 조건에서 `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full`을 실행하고 `agent-test/runs/20260605-025842-proto-socket-performance-full.md` 결과 파일을 확보했다.
|
||||
- [x] 결과 파일에서 `regression_result: SKIPPED`, same-language/cross-language/typescript-gateway 구성요소 포함을 확인했다. `overall_result`는 PASS가 아니라 INCOMPLETE/FAIL이다(아래 `계획 대비 변경 사항` 참조).
|
||||
- [x] `agent-roadmap/milestones/performance-hotspot-optimization.md`의 Full Idle Baseline 부재 경고와 작업 컨텍스트에 새 full baseline record 경로와 해석을 반영했다.
|
||||
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채웠다.
|
||||
|
||||
## 코드리뷰 전용 체크리스트
|
||||
|
||||
- [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이면 `complete.log`를 작성하고 active task 디렉터리를 archive로 이동한다.
|
||||
- [ ] PASS이고 task group이 `m-performance-hotspot-optimization`이면 완료 이벤트 메타데이터를 보고하고 roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다.
|
||||
- [x] FAIL이고 user-review gate가 트리거되지 않았으므로 다음 active `PLAN-cloud-G07.md`와 `CODE_REVIEW-cloud-G07.md`를 작성하고 `complete.log`를 작성하지 않는다.
|
||||
|
||||
## 계획 대비 변경 사항
|
||||
|
||||
- **`overall_result: PASS` 미충족 → INCOMPLETE 수용 (사용자 결정).** 계획 체크리스트와 최종 검증은 `overall_result: PASS`를 기대했으나, 실제 record는 PASS가 아니다. Kotlin TcpClient가 연결당 timeout 없는 blocking read-thread-per-connection 구조라 TCP parallel clients>=128에서 thread starvation으로 deadlock한다(첫 run이 3시간+ 멈춰 종료). 이를 harness(`kotlin/crosstest/stress.kt`)에서 `parallelDeadlockBottleneck()`로 deferred(required SKIP) 처리했고, harness가 required SKIP을 INCOMPLETE로 분류하는 것은 의도된 설계다. optional 우회로 PASS를 위조하지 않기로 사용자가 결정했다. 따라서 PASS 검증 기준은 충족 불가이며, Kotlin TCP parallel>=128 제외로 인한 INCOMPLETE를 정당한 결과로 본다.
|
||||
- **harness 수정 범위 확장 (사용자 승인).** 계획은 baseline record 수집과 milestone 갱신에 한정했으나, 측정을 끝내기 위해 harness deadlock fix가 불가피해 `kotlin/crosstest/stress.kt`에 deferred 처리를 추가했다. product 코드(`kotlin/src/main`)는 건드리지 않았다. WS parallel과 TCP clients<128은 정상 측정된다.
|
||||
- **컨테이너 부하 = idle 기준 인정 (사용자 결정).** code-server 컨테이너 load ~6/10코어 상태를 이 환경의 idle baseline 기준으로 인정한다. host 상시 부하를 차단/감점 사유로 보지 않는다.
|
||||
- **1차 FAIL은 transient로 판정 후 재측정.** 1차 full record는 TypeScript TCP parallel clients=1024 timeout 72건(512,000 요청 중 0.014%)으로 `overall_result: FAIL`을 기록했다. 동일 조건 재측정(`agent-test/runs/20260605-100551-proto-socket-stress-full.md`)에서 timeout 0 PASS로 재현되지 않아 일시적 컨테이너 부하 transient로 판정했다. 이 판정과 근거 record를 milestone 컨텍스트에 투명하게 남겼다.
|
||||
|
||||
## 주요 설계 결정
|
||||
|
||||
- **측정을 detached 백그라운드로 수행.** full baseline은 5개 언어 × TCP/WS × roundtrip/burst/sustained(30초/5분/30분)/parallel/payload long-running 측정이라 세션과 무관하게 디스크에 결과를 남기도록 detached로 실행했다.
|
||||
- **sustained 30초/5분/30분 표준 유지 (변경 안 함).** 5개 언어 bench, `agent-test/local/proto-socket-performance-baseline.md`, milestone의 30분 sustained 관련 task들이 의존하는 프로젝트 표준이다. 측정 단축은 별도 표준 변경 결정으로 다루며 이 작업에서 바꾸지 않았다.
|
||||
- **절대 수치를 고정 합격선으로 단정하지 않음.** milestone 컨텍스트에 host/runtime/profile이 다른 절대 throughput/p99 수치를 고정 합격선으로 박지 않고, 같은 환경 개선 전후 비교용 기준 record로만 사용하도록 기록했다.
|
||||
- **Kotlin TCP parallel>=128 deadlock은 별도 최적화 대상으로 분리.** harness deferred는 측정을 진행시키기 위한 조치이고, deadlock 자체는 optimize Epic 후보로 milestone에 남겼다.
|
||||
|
||||
## 사용자 리뷰 요청
|
||||
|
||||
_기본값은 `없음`이다. 구현 중 사용자 결정, 사용자 소유 외부 환경/secret/서비스 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없으면 아래 항목을 실제 내용으로 교체하고, 구현을 중단한 뒤 active 파일을 그대로 둔 채 리뷰를 요청한다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해소할 수 있는 검증 증거 공백만으로는 사용자 리뷰 요청을 작성하지 않는다._
|
||||
|
||||
- 상태: 없음
|
||||
- 사유 유형: 없음
|
||||
- 결정 필요: 없음
|
||||
- 차단 근거: 없음
|
||||
- 실행한 검증/명령: 없음
|
||||
- 자동 후속 불가 이유: 없음
|
||||
- 재개 조건: 없음
|
||||
|
||||
## 리뷰어를 위한 체크포인트
|
||||
|
||||
- full baseline이 quick 결과가 아니라 `proto-socket-performance-full` record인지 확인한다.
|
||||
- baseline record가 PASS이고 regression은 baseline 미지정으로 SKIPPED인지 확인한다.
|
||||
- Milestone context가 서로 다른 host/runtime/profile 절대 수치를 고정 기준으로 단정하지 않는지 확인한다.
|
||||
|
||||
## 검증 결과
|
||||
|
||||
### BASELINE-1 중간 검증
|
||||
```bash
|
||||
$ rg --sort path -n "overall_result|regression_result: SKIPPED|same-language|cross-language|typescript-gateway" agent-test/runs/20260605-025842-proto-socket-performance-full.md
|
||||
6:overall_result: FAIL
|
||||
7:regression_result: SKIPPED
|
||||
36:| same-language | FAIL | 1 | agent-test/runs/20260605-025842-proto-socket-stress-full.md | .../same-language.log |
|
||||
37:| cross-language | PASS | 0 | agent-test/runs/20260605-091449-proto-socket-stress-full-cross.md | .../cross-language.log |
|
||||
38:| typescript-gateway | PASS | 0 | agent-test/runs/20260605-092037-proto-socket-stress-full.md | .../typescript-gateway.log |
|
||||
397:### same-language
|
||||
432:### cross-language
|
||||
467:### typescript-gateway
|
||||
```
|
||||
|
||||
- regression SKIPPED, 세 구성요소(same-language/cross-language/typescript-gateway) 모두 포함 확인.
|
||||
- `overall_result`는 PASS가 아니라 FAIL/INCOMPLETE. 언어별 요약: dart/go/python PASS, kotlin INCOMPLETE(required SKIP=3, TCP parallel>=128 deferred), typescript FAIL(parallel 1024 timeout 72 — transient). 상세는 `계획 대비 변경 사항` 참조.
|
||||
|
||||
### 재측정 검증 (TS transient 확인)
|
||||
```bash
|
||||
$ bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_stress.sh --full --lang typescript --transport tcp --profile parallel
|
||||
[parallel] transport=tcp clients=16 done violations=0
|
||||
[parallel] transport=tcp clients=128 done violations=0
|
||||
[parallel] transport=tcp clients=512 done violations=0
|
||||
[parallel] transport=tcp clients=1024 done violations=0
|
||||
DONE typescript: PASS (rows=4 skips=0 required_skips=0 violations=0)
|
||||
전체 결과값: PASS
|
||||
결과 기록 파일: `agent-test/runs/20260605-100551-proto-socket-stress-full.md`
|
||||
```
|
||||
|
||||
- 1차 FAIL 지점(TS tcp parallel 1024)이 재측정에서 timeout 0 PASS로 재현되지 않아 transient 확정.
|
||||
|
||||
### 최종 검증
|
||||
```bash
|
||||
$ git diff --check
|
||||
(출력 없음, rc=0)
|
||||
```
|
||||
|
||||
- baseline record: `agent-test/runs/20260605-025842-proto-socket-performance-full.md` (구성요소: same-language `...025842-...stress-full.md`, cross-language `...091449-...stress-full-cross.md`, typescript-gateway `...092037-...stress-full.md`).
|
||||
- 재측정 record: `agent-test/runs/20260605-100551-proto-socket-stress-full.md`.
|
||||
- 미커밋 변경: `kotlin/crosstest/stress.kt`(harness deferred fix), milestone/CODE_REVIEW 문서 갱신. 사용자 commit 요청 전까지 커밋하지 않는다.
|
||||
|
||||
## 코드리뷰 결과
|
||||
|
||||
- 종합 판정: FAIL
|
||||
- 차원별 평가:
|
||||
- correctness: Fail
|
||||
- completeness: Fail
|
||||
- test coverage: Pass
|
||||
- API contract: Pass
|
||||
- code quality: Pass
|
||||
- plan deviation: Fail
|
||||
- verification trust: Fail
|
||||
- 발견된 문제:
|
||||
- Required: `agent-roadmap/milestones/performance-hotspot-optimization.md:170`에서 `20260605-025842-proto-socket-performance-full.md`를 “Full Idle Baseline 확정” 기준 record로 기록했지만, 실제 record는 `agent-test/runs/20260605-025842-proto-socket-performance-full.md:6`과 `:22`에서 `overall_result: FAIL`이고 same-language 구성도 `:36`에서 FAIL입니다. 계획의 필수 검증은 `PLAN-cloud-G07.md:101` 및 `:113-115`처럼 새 full record의 전체 PASS였으므로, 이 상태로는 `[idle-full]` 완료 신호를 낼 수 없습니다. 수정은 full aggregate record가 PASS가 되도록 원인을 해결해 재측정하거나, PASS 기준을 의도적으로 완화해야 한다면 구현 완료가 아니라 사용자 리뷰/후속 결정 상태로 남기고 Milestone 문구를 “확정”이 아닌 미완료 후보로 되돌리는 것입니다.
|
||||
- Required: `agent-roadmap/milestones/performance-hotspot-optimization.md:173`은 선택된 aggregate record의 `overall_result`를 **INCOMPLETE**라고 설명하지만, 실제 aggregate는 `agent-test/runs/20260605-025842-proto-socket-performance-full.md:428`에서 `전체 결과값: FAIL`입니다. Kotlin required SKIP과 TypeScript timeout transient를 함께 설명할 수는 있지만, 현재 선택 record의 최상위 결과값을 다르게 적으면 후속 baseline 비교와 runtime 완료 판단이 잘못됩니다. 수정은 record의 실제 FAIL을 정확히 기록하고, partial TypeScript 재측정은 별도 보조 근거로만 분리하는 것입니다.
|
||||
- 다음 단계: WARN/FAIL 후속 plan/review를 작성해 baseline 완료 기준과 Milestone 기록을 바로잡는다.
|
||||
|
|
@ -0,0 +1,156 @@
|
|||
<!-- 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를 아카이브한다.
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
# Complete - m-performance-hotspot-optimization/03_idle_full_baseline
|
||||
|
||||
## 완료 일시
|
||||
|
||||
2026-06-05
|
||||
|
||||
## 요약
|
||||
|
||||
2회 리뷰 루프와 USER_REVIEW 해소를 거쳐 `idle-full` baseline evidence 수집을 완료했다. 최종 판정은 PASS/RESOLVED이며, 사용자가 Kotlin TCP parallel>=128 deferred로 인한 INCOMPLETE를 이번 baseline 완료 기준으로 수용했다.
|
||||
|
||||
## 루프 이력
|
||||
|
||||
| Plan | Review | Verdict | 메모 |
|
||||
|------|--------|---------|------|
|
||||
| `plan_cloud_G07_1.log` | `code_review_cloud_G07_1.log` | FAIL | full aggregate `overall_result: FAIL` record를 “확정” baseline처럼 기록했고 실제 record와 Milestone 문구가 불일치했다. |
|
||||
| `plan_cloud_G07_2.log` | `code_review_cloud_G07_2.log` | WARN | Milestone 문구를 “후보 — 미확정”으로 바로잡고, 완료 기준 완화 여부를 USER_REVIEW로 넘겼다. |
|
||||
| `USER_REVIEW.md` | user decision | PASS/RESOLVED | 사용자가 Kotlin deferred INCOMPLETE를 `idle-full` 완료 기준으로 수용했다. |
|
||||
|
||||
## 구현/정리 내용
|
||||
|
||||
- `agent-test/runs/20260605-025842-proto-socket-performance-full.md` full performance record를 확보했다.
|
||||
- same-language/cross-language/typescript-gateway 구성요소 포함과 `regression_result: SKIPPED`를 확인했다.
|
||||
- TypeScript TCP parallel 1024 timeout은 `agent-test/runs/20260605-100551-proto-socket-stress-full.md` focused rerun PASS로 transient로 분리했다.
|
||||
- Kotlin TCP parallel>=128 required SKIP은 별도 최적화 대상으로 남기고, 사용자가 이 INCOMPLETE를 이번 baseline 완료 기준으로 수용했다.
|
||||
- `agent-roadmap/milestones/performance-hotspot-optimization.md`에는 PASS aggregate 미확보와 사용자 결정 필요 상태가 명시되어 있으며, runtime completion event가 후속 roadmap completion 처리를 맡는다.
|
||||
|
||||
## 최종 검증
|
||||
|
||||
- `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` - PASS; `20260605-025842`는 `overall_result: FAIL`, `regression_result: SKIPPED`, same-language FAIL, cross-language PASS, typescript-gateway PASS, Kotlin INCOMPLETE, TypeScript FAIL을 기록했고 `20260605-100551`은 TypeScript focused rerun PASS를 기록했다.
|
||||
- `git diff --check` - PASS; 출력 없음, exit code 0.
|
||||
|
||||
## Roadmap Completion
|
||||
|
||||
- Milestone: `agent-roadmap/milestones/performance-hotspot-optimization.md`
|
||||
- Completed task ids:
|
||||
- `idle-full`: PASS/RESOLVED; evidence=`plan_cloud_G07_2.log`, `code_review_cloud_G07_2.log`, `USER_REVIEW.md`; verification=`agent-test/runs/20260605-025842-proto-socket-performance-full.md`, `agent-test/runs/20260605-100551-proto-socket-stress-full.md`, `git diff --check`
|
||||
- Not completed task ids: 없음
|
||||
|
||||
## 잔여 Nit
|
||||
|
||||
- 없음
|
||||
|
||||
## 후속 작업
|
||||
|
||||
- runtime completion event가 `idle-full` roadmap completion을 반영해야 한다.
|
||||
- 다음 split task `04+03_compare_rule_full_baseline`에서 같은 host/runtime/profile 기준 baseline 비교 규칙을 이어서 처리한다.
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
<!-- task=m-performance-hotspot-optimization/03_idle_full_baseline plan=0 tag=BASELINE -->
|
||||
|
||||
# Implementation Plan - BASELINE
|
||||
|
||||
## 이 파일을 읽는 구현 에이전트에게
|
||||
|
||||
이 작업은 long-running full performance baseline 수집이다. 구현 후에는 active `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션에 실제 변경/검증 출력과 결과 기록 파일 경로를 채운다. finalization(`코드리뷰 결과`, log rename, `complete.log`, archive move)은 code-review 전용이다.
|
||||
|
||||
## 배경
|
||||
|
||||
`언어별 성능 병목 개선` Milestone은 개선 전후 비교를 같은 host/runtime/profile의 full baseline끼리 수행해야 한다. 현재 문서에는 full idle baseline 부재 경고가 남아 있어 병목 우선순위와 후속 최적화 판정이 잠정값에 의존한다. 이 작업은 idle host에서 `run_performance.sh --full` 결과를 생성하고 그 record를 Milestone 컨텍스트에 남긴다.
|
||||
|
||||
## 사용자 리뷰 요청 흐름
|
||||
|
||||
구현 중 차단은 active `CODE_REVIEW-*-G??.md`의 `사용자 리뷰 요청` 섹션에 기록한다. code-review가 그 요청을 검증하고 실제 `USER_REVIEW.md` 작성 여부를 결정한다.
|
||||
|
||||
## 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
|
||||
|
||||
## 분석 결과
|
||||
|
||||
### 읽은 파일
|
||||
|
||||
- `agent-roadmap/current.md`
|
||||
- `agent-roadmap/milestones/performance-hotspot-optimization.md`
|
||||
- `agent-test/local/rules.md`
|
||||
- `agent-test/local/proto-socket-performance-baseline.md`
|
||||
- `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh`
|
||||
- `agent-ops/skills/common/_templates/implementation-user-review-request-section.md`
|
||||
|
||||
### 테스트 환경 규칙
|
||||
|
||||
`test_env=local`이다. `agent-test/local/rules.md`와 `agent-test/local/proto-socket-performance-baseline.md`를 읽었다. 적용 명령은 full 성능 기준 후보 측정 `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full`이다. 결과 파일은 `agent-test/runs/YYYYMMDD-HHMMSS-proto-socket-performance-full.md`에 남아야 하며 구성요소 요약에 same-language, cross-language, typescript-gateway가 포함되어야 한다.
|
||||
|
||||
### 테스트 커버리지 공백
|
||||
|
||||
코드 동작 변경이 아니라 full baseline evidence 수집과 roadmap context 갱신 작업이다. 별도 unit test는 만들지 않는다. 검증은 `run_performance.sh --full` record의 `overall_result`, 구성요소 요약, 측정 row, regression `SKIPPED` 여부로 판단한다.
|
||||
|
||||
### 심볼 참조
|
||||
|
||||
renamed/removed symbol 없음.
|
||||
|
||||
### 분할 판단
|
||||
|
||||
split policy를 먼저 평가했다. baseline 작업은 두 하위 작업으로 나눈다.
|
||||
|
||||
- shared task group: `agent-task/m-performance-hotspot-optimization`
|
||||
- `03_idle_full_baseline`: full idle baseline record 생성. 선행 의존 없음.
|
||||
- `04+03_compare_rule_full_baseline`: 이 작업의 `complete.log`가 생긴 뒤 baseline 비교를 수행한다.
|
||||
|
||||
### 범위 결정 근거
|
||||
|
||||
이 작업은 baseline record 생성과 `agent-roadmap/milestones/performance-hotspot-optimization.md`의 baseline evidence 갱신에 한정한다. 성능 최적화 구현, threshold 변경, `run_performance.sh` 기능 변경, full matrix 실행은 범위 밖이다.
|
||||
|
||||
### 빌드 등급
|
||||
|
||||
`cloud-G07`. long-running terminal benchmark, wrapper stdout/stderr, result record 신뢰성, idle host 조건 판단이 중심이다.
|
||||
|
||||
## 구현 체크리스트
|
||||
|
||||
- [ ] idle host 조건에서 `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full`을 실행하고 `agent-test/runs/*-proto-socket-performance-full.md` 결과 파일을 확보한다.
|
||||
- [ ] 결과 파일에서 `overall_result: PASS`, `regression_result: SKIPPED`, same-language/cross-language/typescript-gateway 구성요소 포함을 확인한다.
|
||||
- [ ] `agent-roadmap/milestones/performance-hotspot-optimization.md`의 Full Idle Baseline 부재 경고와 작업 컨텍스트에 새 full baseline record 경로와 해석을 반영한다.
|
||||
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
|
||||
|
||||
## [BASELINE-1] Full Idle Baseline 수집
|
||||
|
||||
### 문제
|
||||
|
||||
[performance-hotspot-optimization.md](/config/workspace/proto-socket/agent-roadmap/milestones/performance-hotspot-optimization.md:38)는 `[idle-full]`을 미완료로 두고 있고, [performance-hotspot-optimization.md](/config/workspace/proto-socket/agent-roadmap/milestones/performance-hotspot-optimization.md:113)는 full baseline을 idle host에서만 확정하라고 제한한다.
|
||||
|
||||
### 해결 방법
|
||||
|
||||
idle host에서 full performance wrapper를 실행한다.
|
||||
|
||||
```bash
|
||||
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full
|
||||
```
|
||||
|
||||
`run_performance.sh`는 [run_performance.sh](/config/workspace/proto-socket/agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh:122)에서 same-language, [run_performance.sh](/config/workspace/proto-socket/agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh:124)에서 cross-language, [run_performance.sh](/config/workspace/proto-socket/agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh:126)에서 TypeScript gateway 구성요소를 실행한다.
|
||||
|
||||
### 수정 파일 및 체크리스트
|
||||
|
||||
- [ ] `agent-test/runs/*-proto-socket-performance-full.md`: 새 full baseline record 생성.
|
||||
- [ ] `agent-roadmap/milestones/performance-hotspot-optimization.md`: baseline warning/context를 새 record 기준으로 갱신.
|
||||
|
||||
### 테스트 작성
|
||||
|
||||
별도 unit test 없음. 이 작업의 테스트 산출물은 full performance result record다.
|
||||
|
||||
### 중간 검증
|
||||
|
||||
```bash
|
||||
rg --sort path -n "overall_result: PASS|regression_result: SKIPPED|same-language|cross-language|typescript-gateway" agent-test/runs/<new-full-record>.md
|
||||
```
|
||||
|
||||
기대 결과: 새 full record에서 전체 PASS, regression SKIPPED, 세 구성요소가 확인된다.
|
||||
|
||||
## 수정 파일 요약
|
||||
|
||||
| 파일 | 항목 |
|
||||
|---|---|
|
||||
| `agent-test/runs/*-proto-socket-performance-full.md` | BASELINE-1 |
|
||||
| `agent-roadmap/milestones/performance-hotspot-optimization.md` | BASELINE-1 |
|
||||
|
||||
## 최종 검증
|
||||
|
||||
```bash
|
||||
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full
|
||||
rg --sort path -n "overall_result: PASS|regression_result: SKIPPED|same-language|cross-language|typescript-gateway" agent-test/runs/<new-full-record>.md
|
||||
git diff --check
|
||||
```
|
||||
|
||||
모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
<!-- task=m-performance-hotspot-optimization/03_idle_full_baseline plan=1 tag=BASELINE-FIX -->
|
||||
|
||||
# Implementation Plan - BASELINE-FIX
|
||||
|
||||
## 이 파일을 읽는 구현 에이전트에게
|
||||
|
||||
이 작업은 1차 코드리뷰 FAIL 후속이다. 실패한 full aggregate record를 완료 baseline으로 확정하지 말고, 실제 결과값과 Milestone 문구를 일치시킨다. 구현 중 사용자 결정 없이는 `idle-full` 완료 기준을 완화하지 않는다. 사용자 결정이 필요하면 채팅으로 묻지 말고 active `CODE_REVIEW-*-G??.md`의 `사용자 리뷰 요청` 섹션을 채운 뒤 멈춘다.
|
||||
|
||||
## 배경
|
||||
|
||||
1차 구현은 `agent-test/runs/20260605-025842-proto-socket-performance-full.md`를 full idle baseline record로 남겼지만 해당 aggregate record는 `overall_result: FAIL`이다. 계획의 완료 기준은 새 full record의 `overall_result: PASS`, `regression_result: SKIPPED`, same-language/cross-language/typescript-gateway 구성요소 포함이었다. 현재 Milestone 문서는 이 record를 “Full Idle Baseline 확정”으로 기록하면서 최상위 결과값을 `INCOMPLETE`로 설명해 실제 record와도 맞지 않는다.
|
||||
|
||||
## 사용자 리뷰 요청 흐름
|
||||
|
||||
구현 중 차단은 active `CODE_REVIEW-*-G??.md`의 `사용자 리뷰 요청` 섹션에 기록한다. code-review가 그 요청을 검증하고 실제 `USER_REVIEW.md` 작성 여부를 결정한다. 구현 에이전트는 사용자에게 직접 질문하거나 선택지를 제시하지 않는다.
|
||||
|
||||
## 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
|
||||
|
||||
## 범위 결정 근거
|
||||
|
||||
이 후속 작업은 `idle-full` 완료 기준과 evidence 기록을 바로잡는 데 한정한다. 새 성능 최적화 구현, Kotlin TCP deadlock 제품 수정, benchmark 표준 변경은 별도 작업이다. 다만 full aggregate PASS를 얻기 위해 같은 명령을 재실행하거나 기존 evidence를 정확히 정리하는 것은 이 작업 범위에 포함한다.
|
||||
|
||||
## 구현 체크리스트
|
||||
|
||||
- [ ] `agent-test/runs/20260605-025842-proto-socket-performance-full.md`와 replacement full record가 있다면 그 record의 `overall_result`, `regression_result`, same-language/cross-language/typescript-gateway 상태를 실제 값 그대로 확인해 기록한다.
|
||||
- [ ] `overall_result: PASS`, `regression_result: SKIPPED`, same-language/cross-language/typescript-gateway 포함 조건을 만족하는 `proto-socket-performance-full` aggregate record를 확보하거나, 이 완료 기준을 완화/보류해야 하는 이유와 필요한 사용자 결정을 `사용자 리뷰 요청`에 기록하고 완료 처리하지 않는다.
|
||||
- [ ] `agent-roadmap/milestones/performance-hotspot-optimization.md`의 Full Idle Baseline 문구를 선택한 상태와 일치시킨다. PASS aggregate가 없으면 “확정”으로 쓰지 않고, FAIL/INCOMPLETE 후보와 남은 결정/후속 작업을 명확히 남긴다.
|
||||
- [ ] `git diff --check`를 실행하고 출력과 exit code를 검증 결과에 기록한다.
|
||||
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
|
||||
|
||||
## [BASELINE-FIX-1] Full aggregate 결과 정합성 회복
|
||||
|
||||
### 문제
|
||||
|
||||
`agent-test/runs/20260605-025842-proto-socket-performance-full.md`는 최상위 `overall_result: FAIL`인데, Milestone 문서는 이 record를 확정 baseline처럼 기록하고 일부 문구에서 `INCOMPLETE`로 설명한다.
|
||||
|
||||
### 해결 방법
|
||||
|
||||
아래 명령으로 선택 record의 최상위 결과와 구성요소 결과를 다시 확인한다.
|
||||
|
||||
```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
|
||||
```
|
||||
|
||||
가능하면 idle host 조건에서 replacement full aggregate를 생성한다.
|
||||
|
||||
```bash
|
||||
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full
|
||||
```
|
||||
|
||||
replacement record가 PASS면 그 record를 기준으로 Milestone context를 갱신한다. PASS aggregate를 만들 수 없고 `idle-full` 완료 기준 완화가 필요하면 구현 완료로 표시하지 말고 `사용자 리뷰 요청`에 필요한 결정과 근거를 기록한다.
|
||||
|
||||
## [BASELINE-FIX-2] Milestone context 수정
|
||||
|
||||
### 문제
|
||||
|
||||
현재 Milestone context는 실패한 aggregate record를 baseline 확정 근거처럼 보여 후속 `compare-rule` 작업과 runtime completion event가 잘못된 상태를 소비할 수 있다.
|
||||
|
||||
### 해결 방법
|
||||
|
||||
`agent-roadmap/milestones/performance-hotspot-optimization.md`의 Full Idle Baseline note를 실제 상태와 일치시킨다.
|
||||
|
||||
- PASS aggregate record가 있으면 record path, 세 구성요소 포함, `overall_result: PASS`, `regression_result: SKIPPED`를 기록한다.
|
||||
- PASS aggregate가 없으면 `20260605-025842` record를 failed/incomplete candidate로 기록하고, TypeScript focused rerun은 transient 판단 보조 evidence로 분리한다.
|
||||
- PASS aggregate가 없을 때는 `idle-full` 완료를 암시하는 문구를 쓰지 않는다.
|
||||
|
||||
## 수정 파일 요약
|
||||
|
||||
| 파일 | 항목 |
|
||||
|---|---|
|
||||
| `agent-roadmap/milestones/performance-hotspot-optimization.md` | BASELINE-FIX-1, BASELINE-FIX-2 |
|
||||
| `agent-task/m-performance-hotspot-optimization/03_idle_full_baseline/CODE_REVIEW-cloud-G07.md` | 구현 evidence 기록 |
|
||||
|
||||
## 최종 검증
|
||||
|
||||
```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
|
||||
git diff --check
|
||||
```
|
||||
|
||||
PASS aggregate를 새로 생성했다면 위 `rg` 명령의 대상에 replacement `agent-test/runs/*-proto-socket-performance-full.md`도 포함한다.
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
# User Review Resolved - m-performance-hotspot-optimization/03_idle_full_baseline
|
||||
|
||||
## 요청 일시
|
||||
|
||||
2026-06-05
|
||||
|
||||
## 상태
|
||||
|
||||
RESOLVED
|
||||
|
||||
## 사유
|
||||
|
||||
- 유형: implementation-blocked
|
||||
- 현재 리뷰 회차: 2
|
||||
- 최종 판정: PASS/RESOLVED
|
||||
- 요약: 사용자가 Kotlin TCP parallel>=128 deferred로 인한 INCOMPLETE를 이번 `idle-full` 완료 기준으로 수용하기로 결정했다. 이에 따라 `20260605-025842` full record를 개선 전 baseline evidence로 받아들이고 task를 완료 처리한다.
|
||||
|
||||
## 루프 이력
|
||||
|
||||
| Plan | Review | Verdict | 메모 |
|
||||
|------|--------|---------|------|
|
||||
| `plan_cloud_G07_1.log` | `code_review_cloud_G07_1.log` | FAIL | 실패한 full aggregate record를 “확정” baseline처럼 기록했고 실제 `overall_result: FAIL`과 Milestone 문구가 불일치했다. |
|
||||
| `plan_cloud_G07_2.log` | `code_review_cloud_G07_2.log` | WARN | Milestone 문구를 “후보 — 미확정”으로 바로잡았고, 남은 차단은 `overall_result: PASS` 기준 완화 여부에 대한 사용자 결정이다. |
|
||||
|
||||
## 차단 근거
|
||||
|
||||
- 문제: `agent-test/runs/20260605-025842-proto-socket-performance-full.md`는 `overall_result: FAIL`, `regression_result: SKIPPED`, same-language FAIL, cross-language PASS, typescript-gateway PASS다. TypeScript TCP parallel 1024 timeout 72건은 focused rerun `agent-test/runs/20260605-100551-proto-socket-stress-full.md`에서 재현되지 않아 transient로 보이지만, Kotlin TCP parallel>=128은 required SKIP으로 남아 full aggregate PASS를 만들 수 없다.
|
||||
- 현재 archive plan: `plan_cloud_G07_2.log`
|
||||
- 현재 archive review: `code_review_cloud_G07_2.log`
|
||||
- 검증 명령: `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`
|
||||
- 실제 출력: `20260605-025842`는 `overall_result: FAIL`, same-language FAIL, cross-language PASS, typescript-gateway PASS, Kotlin INCOMPLETE, TypeScript FAIL이다. `20260605-100551`은 TypeScript TCP parallel focused rerun `overall_result: PASS`다.
|
||||
- 차단 판단 근거: `overall_result: PASS`를 요구하는 원래 완료 기준을 완화할지, Kotlin TCP deadlock을 먼저 고쳐 full PASS aggregate를 다시 만들지는 제품/검증 범위 결정이다. 후속 에이전트가 같은 full 명령을 재실행해도 Kotlin required SKIP 때문에 구조적으로 PASS completion evidence를 만들 수 없다.
|
||||
|
||||
## 사용자 결정 필요
|
||||
|
||||
- [x] Kotlin deferred로 인한 INCOMPLETE를 이번 `idle-full` 완료 기준으로 수용하고, `20260605-025842` record를 baseline 후보에서 확정 baseline으로 전환한다.
|
||||
- [ ] Kotlin TCP parallel>=128 deadlock을 먼저 별도 구현 작업으로 해결한 뒤 `run_performance.sh --full`을 재실행해 `overall_result: PASS` aggregate를 만든다.
|
||||
- [ ] `idle-full` 완료 기준을 재작성한다.
|
||||
- [ ] 작업 범위를 줄이거나 보류/폐기한다.
|
||||
|
||||
## 해소 내용
|
||||
|
||||
- 사용자 결정: “1번 방향으로 해” — Kotlin deferred INCOMPLETE를 `idle-full` 완료 기준으로 수용한다.
|
||||
- 해소 판정: PASS/RESOLVED.
|
||||
- 완료 근거: `agent-test/runs/20260605-025842-proto-socket-performance-full.md`는 same-language/cross-language/typescript-gateway 구성요소를 포함하고 `regression_result: SKIPPED`를 기록했다. TypeScript FAIL은 focused rerun `agent-test/runs/20260605-100551-proto-socket-stress-full.md`에서 재현되지 않은 transient로 분리했고, 남은 non-PASS 본질은 별도 최적화 대상으로 분리된 Kotlin TCP parallel>=128 required SKIP이다.
|
||||
'
|
||||
## 재개 조건
|
||||
|
||||
- 사용자가 INCOMPLETE 수용을 승인하면, `USER_REVIEW.md`를 해소 상태로 갱신하고 `complete.log`를 작성해 이 task를 archive한다. 이후 runtime completion event가 `idle-full` 완료 처리를 맡는다.
|
||||
- 사용자가 Kotlin TCP 수정 우선을 선택하면, `plan` 스킬이 이 `USER_REVIEW.md`를 `user_review_N.log`로 아카이브하고 새 구현 plan/review를 작성한다.
|
||||
- 사용자가 기준 재작성/보류를 선택하면, 선택한 기준에 따라 새 plan 또는 보류 기록을 만든다.
|
||||
|
||||
## 다음 실행 힌트
|
||||
|
||||
- 사용자 결정 문구 예: “Kotlin deferred INCOMPLETE를 `idle-full` 완료로 수용해” 또는 “Kotlin TCP parallel deadlock 먼저 고치자”.
|
||||
- 현재 task path: `agent-task/m-performance-hotspot-optimization/03_idle_full_baseline/`
|
||||
|
||||
## 종료 규칙
|
||||
|
||||
- 사용자가 이 stop state를 완료/PASS로 해소하면 `USER_REVIEW.md`를 해소 상태로 갱신하고, `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준 `complete.log`를 작성한 뒤 task directory를 archive로 이동한다.
|
||||
- 새 구현이 필요하면 `plan` 스킬이 `USER_REVIEW.md`를 `user_review_N.log`로 아카이브한 뒤 새 `PLAN-*-G??.md` / `CODE_REVIEW-*-G??.md`를 작성한다.
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
<!-- task=m-performance-hotspot-optimization/04+03_compare_rule_full_baseline plan=0 tag=BASELINE -->
|
||||
|
||||
# Code Review Reference - BASELINE
|
||||
|
||||
> **[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.
|
||||
> Finalization (`코드리뷰 결과`, log rename, `complete.log`, archive moves, `코드리뷰 전용 체크리스트`) is review-agent-only, even after compaction/resume.
|
||||
|
||||
## 개요
|
||||
|
||||
date=2026-06-05
|
||||
task=m-performance-hotspot-optimization/04+03_compare_rule_full_baseline, plan=0, tag=BASELINE
|
||||
|
||||
## Roadmap Targets
|
||||
|
||||
- Milestone: `agent-roadmap/milestones/performance-hotspot-optimization.md`
|
||||
- Task ids:
|
||||
- `compare-rule`: 같은 host/runtime/profile의 full performance record끼리 baseline 비교를 수행한다.
|
||||
- Completion mode: check-on-pass
|
||||
|
||||
## 이 파일을 읽는 리뷰 에이전트에게
|
||||
|
||||
> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다.
|
||||
|
||||
선행 `03_idle_full_baseline` PASS 여부와 full comparison record의 compared/missing/warning row 수를 확인하세요.
|
||||
|
||||
---
|
||||
|
||||
## 구현 항목별 완료 여부
|
||||
|
||||
| 항목 | 완료 여부 |
|
||||
|------|---------|
|
||||
| [BASELINE-1] Full Baseline 비교 실행 | [ ] |
|
||||
|
||||
## 구현 체크리스트
|
||||
|
||||
- [ ] `03_idle_full_baseline`의 `complete.log` 존재를 확인하고 baseline record 경로를 추출한다.
|
||||
- [ ] `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full --baseline <idle-full-record>`를 실행해 full comparison record를 생성한다.
|
||||
- [ ] comparison record에서 `compared rows`, `missing baseline rows`, `warning rows`, `regression_result`가 기록되었는지 확인한다.
|
||||
- [ ] `agent-roadmap/milestones/performance-hotspot-optimization.md`의 compare-rule context에 baseline record, comparison record, compared/missing/warning row 수를 반영한다.
|
||||
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
|
||||
|
||||
## 코드리뷰 전용 체크리스트
|
||||
|
||||
- [ ] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
|
||||
- [ ] 판정과 차원별 평가, Required/Suggested/Nit 분류가 서로 일치한다.
|
||||
- [ ] active `CODE_REVIEW-*-G??.md`를 `code_review_cloud_G07_N.log`로 아카이브한다.
|
||||
- [ ] active `PLAN-*-G??.md`를 `plan_cloud_G07_M.log`로 아카이브한다.
|
||||
- [ ] PASS이면 `complete.log`를 작성하고 active task 디렉터리를 archive로 이동한다.
|
||||
- [ ] PASS이고 task group이 `m-performance-hotspot-optimization`이면 완료 이벤트 메타데이터를 보고하고 roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다.
|
||||
|
||||
## 계획 대비 변경 사항
|
||||
|
||||
_구현 에이전트가 계획과 다르게 구현한 부분을 이유와 함께 기록한다._
|
||||
|
||||
## 주요 설계 결정
|
||||
|
||||
_구현 에이전트가 주요 설계 결정 사항을 기록한다._
|
||||
|
||||
## 사용자 리뷰 요청
|
||||
|
||||
_기본값은 `없음`이다. 구현 중 사용자 결정, 사용자 소유 외부 환경/secret/서비스 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없으면 아래 항목을 실제 내용으로 교체하고, 구현을 중단한 뒤 active 파일을 그대로 둔 채 리뷰를 요청한다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해소할 수 있는 검증 증거 공백만으로는 사용자 리뷰 요청을 작성하지 않는다._
|
||||
|
||||
- 상태: 없음
|
||||
- 사유 유형: 없음
|
||||
- 결정 필요: 없음
|
||||
- 차단 근거: 없음
|
||||
- 실행한 검증/명령: 없음
|
||||
- 자동 후속 불가 이유: 없음
|
||||
- 재개 조건: 없음
|
||||
|
||||
## 리뷰어를 위한 체크포인트
|
||||
|
||||
- `03_idle_full_baseline`의 complete.log가 선행 조건으로 충족되었는지 확인한다.
|
||||
- baseline과 current comparison이 모두 full profile인지 확인한다.
|
||||
- comparison record가 compared/missing/warning row 수를 실제로 기록했는지 확인한다.
|
||||
|
||||
## 검증 결과
|
||||
|
||||
### BASELINE-1 중간 검증
|
||||
```bash
|
||||
$ rg --sort path -n "regression_result:|compared rows:|missing baseline rows:|warning rows:" agent-test/runs/<new-comparison-record>.md
|
||||
(output)
|
||||
```
|
||||
|
||||
### 최종 검증
|
||||
```bash
|
||||
$ bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full --baseline agent-test/runs/<idle-full-record>.md
|
||||
(output)
|
||||
|
||||
$ rg --sort path -n "regression_result:|compared rows:|missing baseline rows:|warning rows:" agent-test/runs/<new-comparison-record>.md
|
||||
(output)
|
||||
|
||||
$ git diff --check
|
||||
(output)
|
||||
```
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
<!-- task=m-performance-hotspot-optimization/04+03_compare_rule_full_baseline plan=0 tag=BASELINE -->
|
||||
|
||||
# Implementation Plan - BASELINE
|
||||
|
||||
## 이 파일을 읽는 구현 에이전트에게
|
||||
|
||||
이 작업은 `03_idle_full_baseline`의 PASS `complete.log`가 선행 조건이다. 선행 조건이 없으면 구현을 시작하지 말고 현재 상태를 보고한다. 구현 후에는 active `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션에 실제 명령 출력과 비교 결과 record를 채운다. finalization은 code-review 전용이다.
|
||||
|
||||
## 배경
|
||||
|
||||
`compare-rule`은 full baseline끼리 같은 host/runtime/profile에서 비교되는지 증명해야 한다. `run_performance.sh`는 baseline record가 주어지면 row key를 맞춰 compared/missing/warning rows를 기록한다. 이 작업은 `03_idle_full_baseline`이 만든 full record를 baseline으로 사용해 full comparison record를 생성하고 Milestone context에 남긴다.
|
||||
|
||||
## 사용자 리뷰 요청 흐름
|
||||
|
||||
구현 중 차단은 active `CODE_REVIEW-*-G??.md`의 `사용자 리뷰 요청` 섹션에 기록한다. code-review가 그 요청을 검증하고 실제 `USER_REVIEW.md` 작성 여부를 결정한다.
|
||||
|
||||
## Roadmap Targets
|
||||
|
||||
- Milestone: `agent-roadmap/milestones/performance-hotspot-optimization.md`
|
||||
- Task ids:
|
||||
- `compare-rule`: 같은 host/runtime/profile의 full performance record끼리 baseline 비교를 수행한다.
|
||||
- Completion mode: check-on-pass
|
||||
|
||||
## 분석 결과
|
||||
|
||||
### 읽은 파일
|
||||
|
||||
- `agent-roadmap/current.md`
|
||||
- `agent-roadmap/milestones/performance-hotspot-optimization.md`
|
||||
- `agent-test/local/rules.md`
|
||||
- `agent-test/local/proto-socket-performance-baseline.md`
|
||||
- `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh`
|
||||
- `agent-ops/skills/common/_templates/implementation-user-review-request-section.md`
|
||||
|
||||
### 테스트 환경 규칙
|
||||
|
||||
`test_env=local`이다. `agent-test/local/proto-socket-performance-baseline.md`의 baseline 비교 규칙을 적용한다. 계획 문서에는 quick 예시가 있지만 Milestone task 검증은 full 비교를 요구하므로 실행 명령은 `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full --baseline <idle-full-record>`로 고정한다.
|
||||
|
||||
### 테스트 커버리지 공백
|
||||
|
||||
코드 동작 변경이 아니라 full comparison evidence 수집과 roadmap context 갱신 작업이다. 별도 unit test는 만들지 않는다. 검증은 comparison record의 `regression_result`, `compared rows`, `missing baseline rows`, `warning rows` 기록으로 판단한다.
|
||||
|
||||
### 심볼 참조
|
||||
|
||||
renamed/removed symbol 없음.
|
||||
|
||||
### 분할 판단
|
||||
|
||||
split policy를 먼저 평가했다.
|
||||
|
||||
- shared task group: `agent-task/m-performance-hotspot-optimization`
|
||||
- 이 subtask: `04+03_compare_rule_full_baseline`
|
||||
- predecessor `03`: `03_idle_full_baseline`
|
||||
- 현재 predecessor 상태: 작성 시점에는 active `agent-task/m-performance-hotspot-optimization/03_idle_full_baseline/`가 있으나 `complete.log`는 아직 없다. 구현은 `03`의 active 또는 archived `complete.log`가 생긴 뒤 시작한다.
|
||||
|
||||
### 범위 결정 근거
|
||||
|
||||
이 작업은 full baseline comparison record 생성과 `agent-roadmap/milestones/performance-hotspot-optimization.md`의 compare-rule evidence 갱신에 한정한다. 병목 최적화 구현, threshold 변경, `--fail-on-regression` hard exit 적용, full matrix 실행은 범위 밖이다.
|
||||
|
||||
### 빌드 등급
|
||||
|
||||
`cloud-G07`. long-running full benchmark 재실행, baseline file routing, regression summary 신뢰성 확인이 중심이다.
|
||||
|
||||
## 의존 관계 및 구현 순서
|
||||
|
||||
디렉터리명 `04+03_compare_rule_full_baseline`의 predecessor는 `03`뿐이다. 구현 시작 전 아래 중 하나가 있어야 한다.
|
||||
|
||||
- active: `agent-task/m-performance-hotspot-optimization/03_idle_full_baseline/complete.log`
|
||||
- archive: `agent-task/archive/*/*/m-performance-hotspot-optimization/03_idle_full_baseline/complete.log`
|
||||
|
||||
`complete.log`에서 `agent-test/runs/*-proto-socket-performance-full.md` baseline record 경로를 확인한 뒤 이 작업을 실행한다.
|
||||
|
||||
## 구현 체크리스트
|
||||
|
||||
- [ ] `03_idle_full_baseline`의 `complete.log` 존재를 확인하고 baseline record 경로를 추출한다.
|
||||
- [ ] `bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full --baseline <idle-full-record>`를 실행해 full comparison record를 생성한다.
|
||||
- [ ] comparison record에서 `compared rows`, `missing baseline rows`, `warning rows`, `regression_result`가 기록되었는지 확인한다.
|
||||
- [ ] `agent-roadmap/milestones/performance-hotspot-optimization.md`의 compare-rule context에 baseline record, comparison record, compared/missing/warning row 수를 반영한다.
|
||||
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.
|
||||
|
||||
## [BASELINE-1] Full Baseline 비교 실행
|
||||
|
||||
### 문제
|
||||
|
||||
[performance-hotspot-optimization.md](/config/workspace/proto-socket/agent-roadmap/milestones/performance-hotspot-optimization.md:39)의 `[compare-rule]`은 full baseline 비교 결과가 필요하다. `run_performance.sh`는 [run_performance.sh](/config/workspace/proto-socket/agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh:322)에서 baseline rows를 읽고 [run_performance.sh](/config/workspace/proto-socket/agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh:327)에서 regression result와 compared/missing/warning row 수를 기록한다.
|
||||
|
||||
### 해결 방법
|
||||
|
||||
선행 `idle-full` record를 baseline으로 지정해 full comparison을 실행한다.
|
||||
|
||||
```bash
|
||||
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full --baseline agent-test/runs/<idle-full-record>.md
|
||||
```
|
||||
|
||||
### 수정 파일 및 체크리스트
|
||||
|
||||
- [ ] `agent-test/runs/*-proto-socket-performance-full.md`: 새 full comparison record 생성.
|
||||
- [ ] `agent-roadmap/milestones/performance-hotspot-optimization.md`: compare-rule evidence 갱신.
|
||||
|
||||
### 테스트 작성
|
||||
|
||||
별도 unit test 없음. 이 작업의 테스트 산출물은 full performance comparison result record다.
|
||||
|
||||
### 중간 검증
|
||||
|
||||
```bash
|
||||
rg --sort path -n "regression_result:|compared rows:|missing baseline rows:|warning rows:" agent-test/runs/<new-comparison-record>.md
|
||||
```
|
||||
|
||||
기대 결과: comparison record에 compared/missing/warning row 수와 regression result가 기록된다.
|
||||
|
||||
## 수정 파일 요약
|
||||
|
||||
| 파일 | 항목 |
|
||||
|---|---|
|
||||
| `agent-test/runs/*-proto-socket-performance-full.md` | BASELINE-1 |
|
||||
| `agent-roadmap/milestones/performance-hotspot-optimization.md` | BASELINE-1 |
|
||||
|
||||
## 최종 검증
|
||||
|
||||
```bash
|
||||
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_performance.sh --full --baseline agent-test/runs/<idle-full-record>.md
|
||||
rg --sort path -n "regression_result:|compared rows:|missing baseline rows:|warning rows:" agent-test/runs/<new-comparison-record>.md
|
||||
git diff --check
|
||||
```
|
||||
|
||||
모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
|
||||
|
|
@ -188,6 +188,18 @@ private fun deferredBottleneck(transport: String, profile: String, concurrency:
|
|||
return null
|
||||
}
|
||||
|
||||
// Kotlin TcpClient uses one blocking read thread per connection without a bounded read
|
||||
// timeout. At high parallel client counts the read threads starve and the TCP parallel
|
||||
// load makes no forward progress (no timeout fires, the run hangs). Defer those rows as a
|
||||
// known optimize-Epic bottleneck instead of deadlocking the baseline run. WS parallel and
|
||||
// low TCP client counts are unaffected and still measured.
|
||||
private fun parallelDeadlockBottleneck(transport: String, clientCount: Int): String? {
|
||||
if (transport == "tcp" && clientCount >= 128) {
|
||||
return "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)"
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
private fun summarize(
|
||||
profile: String,
|
||||
axis: String,
|
||||
|
|
@ -519,6 +531,11 @@ private suspend fun profileParallel(transport: String, mode: String) {
|
|||
return
|
||||
}
|
||||
for (clientCount in clientCounts) {
|
||||
val parallelDeferred = parallelDeadlockBottleneck(transport, clientCount)
|
||||
if (parallelDeferred != null) {
|
||||
emitSkip("parallel", "clients=$clientCount", transport, parallelDeferred)
|
||||
continue
|
||||
}
|
||||
val s = StressStability()
|
||||
val srv = startEchoServer(transport, freePort())
|
||||
val handles = mutableListOf<StressClientHandle>()
|
||||
|
|
|
|||
Loading…
Reference in a new issue