From 3bc131c269dfa5a5d61ea4ea48618b790b30d3f2 Mon Sep 17 00:00:00 2001 From: toki Date: Mon, 15 Jun 2026 10:47:58 +0900 Subject: [PATCH] update roadmap: archive large-payload-followup-optimization milestone --- agent-roadmap/ROADMAP.md | 8 ++--- .../large-payload-followup-optimization.md | 29 ++++++++-------- agent-roadmap/milestones/csharp-port.md | 33 ++++++++++--------- 3 files changed, 37 insertions(+), 33 deletions(-) rename agent-roadmap/{ => archive/phase/stability-maintenance}/milestones/large-payload-followup-optimization.md (80%) diff --git a/agent-roadmap/ROADMAP.md b/agent-roadmap/ROADMAP.md index 0004456..c4b6b5e 100644 --- a/agent-roadmap/ROADMAP.md +++ b/agent-roadmap/ROADMAP.md @@ -11,7 +11,7 @@ Proto Socket은 여러 언어와 플랫폼에서 일관되게 동작하는 얇 - 프로토콜 기반: 프로토콜 버전 `0.1`, 와이어 포맷, 버전 정책, canonical proto 원본, 레퍼런스 구현 패턴을 정의한다. - 검증과 호환성: 동일 언어 테스트, 크로스 언어 테스트, proto 동기화 검사, 지속 검증으로 사용 가능한 구현체들을 정렬한다. - 안정화와 유지: 현재 5개 언어 구현을 완성형 후보로 보고 안정성 판단, 문서 정합성, 유지 기준을 정리한다. -- 남은 native platform 포팅: 실제 수요가 생기기 전까지 C# 및 Swift 구현 추가를 보류한다. +- 남은 native platform 포팅: 사용자 요청에 따라 C# Unity/.NET 포트를 다음 진행 대상으로 두고, Swift 구현 추가는 실제 수요가 생길 때까지 보류한다. - 릴리즈 준비: 현재 릴리즈 표준은 Git ref/tag 기반 소비로 둔다. 외부 package registry 릴리즈는 별도 수요가 생길 때 후속 작업으로 분리한다. ## Milestone 목록 @@ -34,12 +34,12 @@ Proto Socket은 여러 언어와 플랫폼에서 일관되게 동작하는 얇 - [워크스페이스 포트/환경 표준화](archive/phase/stability-maintenance/milestones/workspace-port-env-standardization.md) - 상태: 완료; 목표: proto-socket이 runtime service port를 소유하지 않는다는 점과 cross-language test runner의 fixed local port 대역을 workspace 표준 예외로 문서화한다. - [변경 기반 테스트 라우팅 정형화](archive/phase/stability-maintenance/milestones/change-aware-test-routing.md) - 상태: 완료; 목표: 마지막 통과 테스트 지점과 현재 변경 내용을 분석해 기능, 속도, 안정성 테스트 중 필요한 검증 범위를 자동 선택하고, 언어별 anchor x5와 야간 장시간 측정을 분리한다. - [야간 대용량 패킷 성능 기준선](archive/phase/stability-maintenance/milestones/nightly-large-payload-baseline.md) - 상태: 완료; 목표: 64KB/1MB payload 성능 baseline과 회귀 판단을 실행 host local time 20:00 이후 야간 window에서 별도 수집해 주간 작업 부하 편차와 분리한다. -- [대용량 WS/병렬 전송 후속 최적화](milestones/large-payload-followup-optimization.md) - 상태: [진행중]; 목표: TypeScript WS 1MB, TypeScript TCP 1024 tail, Kotlin TCP parallel, Dart large-packet guard 작업 완료 이후 남은 WS fixed latency 후보를 후속 최적화로 구체화한다. +- [대용량 WS/병렬 전송 후속 최적화](archive/phase/stability-maintenance/milestones/large-payload-followup-optimization.md) - 상태: 완료; 목표: TypeScript WS 1MB, TypeScript TCP 1024 tail, Kotlin TCP parallel, Dart large-packet guard 작업 완료 이후 남은 WS fixed latency 후보까지 분리 분석했다. ### 남은 native platform 포팅 -- [C# Unity/.NET 포트](milestones/csharp-port.md) - 상태: 보류; 목표: 실제 Unity/.NET 소비 수요가 생길 때까지 C# 구현 추가를 보류한다. -- [Swift Apple 플랫폼 포트](milestones/swift-port.md) - 상태: 보류; 목표: 실제 iOS/macOS 소비 수요가 생길 때까지 Swift 구현 추가를 보류한다. +- [C# Unity/.NET 포트](milestones/csharp-port.md) - 상태: [진행중]; 목표: 프로토콜 `0.1` 계약과 native-first 런타임 방향을 유지하면서 Unity 및 .NET 소비자를 지원하는 C# 구현을 추가한다. +- [Swift Apple 플랫폼 포트](milestones/swift-port.md) - 상태: [보류]; 목표: 실제 iOS/macOS 소비 수요가 생길 때까지 Swift 구현 추가를 보류한다. ### 릴리즈 준비 diff --git a/agent-roadmap/milestones/large-payload-followup-optimization.md b/agent-roadmap/archive/phase/stability-maintenance/milestones/large-payload-followup-optimization.md similarity index 80% rename from agent-roadmap/milestones/large-payload-followup-optimization.md rename to agent-roadmap/archive/phase/stability-maintenance/milestones/large-payload-followup-optimization.md index db4f6d4..c0374ab 100644 --- a/agent-roadmap/milestones/large-payload-followup-optimization.md +++ b/agent-roadmap/archive/phase/stability-maintenance/milestones/large-payload-followup-optimization.md @@ -2,7 +2,7 @@ ## 목표 -야간 대용량 패킷 기준선에서 병목이 유지되는 row를 근거로, 64KB/1MB WebSocket 및 병렬 전송 성능을 추가 개선한다. TypeScript WS 1MB, TypeScript TCP 1024-client tail, Kotlin TCP parallel required skip 해제와 Dart large-packet guard는 완료 근거를 반영했고, 남은 후보는 WS fixed latency로 유지한다. +야간 대용량 패킷 기준선에서 병목이 유지되는 row를 근거로, 64KB/1MB WebSocket 및 병렬 전송 성능을 추가 개선한다. TypeScript WS 1MB, TypeScript TCP 1024-client tail, Kotlin TCP parallel required skip 해제, Dart large-packet guard, WS fixed latency 경로 분리까지 완료 근거를 반영했다. ## 단계 @@ -10,7 +10,7 @@ ## 상태 -[진행중] +[완료] ## 승격 조건 @@ -27,7 +27,7 @@ - 야간 기준선에서 재현되는 병목 row만 구현 대상으로 삼는다. - TypeScript WS 1MB, TypeScript TCP 1024-client 병렬 tail timeout, Kotlin TCP parallel required skip 해제는 완료 반영된 후보로 둔다. -- 남은 활성 후보는 WS 계열 fixed latency다. +- WS 계열 fixed latency는 Kotlin WS same-language 수신 plateau와 TypeScript gateway worker_threads tail의 별도 경로로 분리 분석 완료했다. - Kotlin WS 1MB는 야간 record에서 안정성 유지가 확인되어 이번 후보 창에서는 별도 구현 대상으로 승격하지 않는다. - stability hard gate는 timeout, nonce mismatch, response type mismatch, FIFO violation, pending leak, queue/gateway backlog leak 0을 유지한다. - 성능 개선은 cross-language matrix와 focused payload/stress record로 검증한다. 야간 full record 완료를 막는 same-language hard gate 실패는 focused stress로 먼저 좁힌 뒤 full record에서 재확인한다. @@ -49,19 +49,22 @@ - [x] [typescript-ws-1mb-path] TypeScript WS 1MB 병목이 야간에도 유지되면 mask/protobuf/parse queue 경로를 우선 분석한다. 완료 근거: `agent-task/archive/2026/06/m-large-payload-followup-optimization/01_typescript_ws_1mb/complete.log`; 검증: `npm run check`, `npm test -- test/ws.test.ts test/communicator.test.ts`, `run_stress.sh --full --lang typescript --transport ws --profile payload`, `agent-test/runs/20260613-220314-proto-socket-stress-full.md`. - [x] [typescript-tcp-1024-tail-path] TypeScript TCP `parallel clients=1024` timeout tail을 focused stress로 재현하고, write queue 대기, socket write/drain, read parse queue, request timeout 시작점 중 어느 경로가 15초 hard gate를 넘기는지 계측한 뒤 transport/communicator 수정 계획을 작성한다. 완료 근거: `agent-task/archive/2026/06/m-large-payload-followup-optimization/02_typescript_tcp_tail/complete.log`; 검증: `agent-test/runs/20260614-072352-proto-socket-stress-full.md`, `agent-test/runs/20260614-072436-proto-socket-performance-quick.md`. - [x] [kotlin-tcp-parallel-unskip-path] Kotlin TCP `parallel clients>=128` required skip을 해제하기 위해 blocking read thread-per-connection 병목과 bounded read timeout 부재를 분리 분석하고, 128 -> 512 -> 1024 순서로 측정 가능하게 만드는 수정 계획을 작성한다. 완료 근거: `agent-task/archive/2026/06/m-large-payload-followup-optimization/03_kotlin_tcp_parallel/complete.log`; 검증: `cd kotlin && ./gradlew --offline test`, `run_stress.sh --full --lang kotlin --transport tcp --profile parallel`, `agent-test/runs/20260614-082714-proto-socket-stress-full.md`. -- [ ] [ws-fixed-latency-path] WS 계열 fixed latency가 야간에도 유지되면 transport별 공통 지연 경로와 언어별 worker/gateway path를 분리해 분석한다. 계획: `agent-task/m-large-payload-followup-optimization/04_ws_fixed_latency/PLAN-cloud-G07.md`. +- [x] [ws-fixed-latency-path] WS 계열 fixed latency가 야간에도 유지되면 transport별 공통 지연 경로와 언어별 worker/gateway path를 분리해 분석한다. 완료 근거: `agent-task/archive/2026/06/m-large-payload-followup-optimization/04_ws_fixed_latency_1/complete.log`; 검증: `agent-test/runs/20260614-224355-proto-socket-stress-quick.md`, `agent-test/runs/20260614-224424-proto-socket-stress-quick.md`. - [x] [kotlin-ws-guard] Kotlin WS 1MB는 야간 record에서 개선 유지 여부를 확인하고, 회귀가 보이면 별도 구현 대상으로 승격한다. 검증: `agent-test/runs/20260610-124006-proto-socket-stress-full.md`, `agent-test/runs/20260610-131132-proto-socket-stress-full.md`, `agent-test/runs/20260613-141506-proto-socket-stress-full.md`의 Kotlin WS 1MB rows가 모두 stability PASS이고 queue/backlog leak 없이 유지되어 이번 후보 창에서는 별도 구현 대상으로 승격하지 않는다. - [x] [dart-large-packet-guard] Dart TCP/WS 1MB는 기존 개선이 유지되는지 감시하고, 회귀가 보이면 guard 또는 path hardening 대상으로 승격한다. 검증: `agent-test/runs/20260614-123328-proto-socket-performance-full.md`에서 Dart TCP 1MB p99 `140.565ms`, throughput `56.4rps`, Dart WS 1MB p99 `149.095ms`, throughput `52.4rps`, timeout/nonce/type/FIFO/pending/queue/gateway violations 0으로 PASS라 별도 guard/hardening 구현 대상으로 승격하지 않는다. ## 완료 리뷰 -- 상태: 없음 -- 요청일: 없음 -- 완료 근거: 없음 +- 상태: 승인됨 +- 요청일: 2026-06-15 +- 완료 근거: + - TypeScript WS 1MB, TypeScript TCP 1024 tail, Kotlin TCP parallel, Dart large-packet guard 완료 근거가 모두 반영됐다. + - WS fixed latency는 `agent-task/archive/2026/06/m-large-payload-followup-optimization/04_ws_fixed_latency_1/complete.log`에서 Kotlin WS same-language 수신 plateau와 TypeScript gateway worker_threads tail로 분리 완료됐다. + - 모든 기능 Task와 Task 내부 검증 근거가 `[x]` 상태로 정리됐다. - 리뷰 필요: - - [ ] 사용자가 완료 결과를 확인했다 - - [ ] archive 이동을 승인했다 -- 리뷰 코멘트: 없음 + - [x] 사용자가 완료 결과를 확인했다 + - [x] archive 이동을 승인했다 +- 리뷰 코멘트: 2026-06-15 사용자 요청으로 현재 마일스톤 완료 및 다음 마일스톤 지정. ## 범위 제외 @@ -73,8 +76,8 @@ - 관련 경로: `agent-roadmap/archive/phase/stability-maintenance/milestones/nightly-large-payload-baseline.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/project/run-proto-socket-test-matrix/scripts/run_stress.sh` - 선행 작업: `야간 대용량 패킷 성능 기준선` 완료. -- 완료된 구현 대상: TypeScript WS 1MB, TypeScript TCP 1024-client 병렬 timeout tail, Kotlin TCP parallel clients>=128 required skip 해제, Dart TCP/WS 1MB large-packet guard. -- 남은 후보: WS fixed latency. +- 완료된 구현 대상: TypeScript WS 1MB, TypeScript TCP 1024-client 병렬 timeout tail, Kotlin TCP parallel clients>=128 required skip 해제, Dart TCP/WS 1MB large-packet guard, WS fixed latency 경로 분리. +- 남은 후보: 없음. WS fixed latency 분석에서 후속 구현 후보로 Kotlin WS same-language 수신 staging plateau와 TypeScript gateway worker_threads dispatch tail을 별도 후보로 분리했다. - 제외/감시: Kotlin WS 1MB는 야간 record에서 안정성 유지가 확인되어 이번 후보 창에서는 별도 구현 대상으로 승격하지 않는다. Dart TCP/WS 1MB는 2026-06-14/15 야간 full record에서 stability PASS가 확인되어 별도 구현 대상으로 승격하지 않는다. Go/Python 1MB와 TypeScript TCP 1MB payload rows는 reference/비교 대상으로 둔다. - 성공 기준: stability hard gate 0을 유지하고, 같은 host/runtime/profile의 focused 또는 quick record에서 대상 row의 p99/throughput이 개선 방향을 보이는지 기록한다. 절대값 고정 합격선은 두지 않는다. -- 구현 계획 작성 기준: `candidate-paths`의 큰 작업은 `agent-task/m-large-payload-followup-optimization/` 아래 split task로 작성한다. WS fixed latency는 `agent-task/m-large-payload-followup-optimization/04_ws_fixed_latency/PLAN-cloud-G07.md`에서 원인 분리 계획으로 유지한다. +- 구현 계획 작성 기준: `candidate-paths`의 큰 작업은 `agent-task/m-large-payload-followup-optimization/` 아래 split task로 작성했다. 이 Milestone은 완료되었으며, 추가 구현은 사용자 확인 후 새 Milestone 또는 별도 follow-up 작업으로 분리한다. diff --git a/agent-roadmap/milestones/csharp-port.md b/agent-roadmap/milestones/csharp-port.md index 0db0285..d1471db 100644 --- a/agent-roadmap/milestones/csharp-port.md +++ b/agent-roadmap/milestones/csharp-port.md @@ -10,7 +10,13 @@ ## 상태 -보류 +[진행중] + +## 구현 잠금 + +- 상태: 잠금 +- 결정 필요: + - 지원할 .NET 및 Unity version target을 선택한다. ## 범위 @@ -19,22 +25,17 @@ - 구현체를 Available로 표시하기 전에 동일 언어 테스트와 크로스 언어 테스트를 추가한다. - protobuf 외 런타임 의존성이 있다면 native API가 충분하지 않은 이유를 문서화한다. -## 필수 기능 +## 기능 -- [ ] 지원할 .NET 및 Unity version target을 선택한다. -- [ ] Canonical schema에서 C# protobuf binding을 생성하거나 유지한다. -- [ ] `ITransport`와 communicator core를 구현한다. -- [ ] TCP/TLS client와 server 지원을 구현한다. -- [ ] Native 지원이 충분하지 않은 경우에만 focused dependency로 WebSocket/WSS 지원을 구현한다. -- [ ] 동일 언어 테스트를 추가한다. -- [ ] 크로스 언어 테스트 runner를 추가한다. -- [ ] 테스트 통과 후에만 상위 구현 상태를 갱신한다. +### Epic: [csharp-port] C# 구현과 검증 -## 완료 기준 - -- [ ] C# peer가 문서화된 프로토콜을 통해 최소 하나의 사용 가능 구현체와 상호 운용된다. -- [ ] C# 구현체는 `PORTING_GUIDE.md`를 따르며 Unity main-thread concern을 프로토콜 core 밖에 둔다. -- [ ] 런타임 의존성 선택은 문서화되어 있고 protocol-relevant하다. +- [ ] [csharp-protobuf-binding] Canonical schema에서 C# protobuf binding을 생성하거나 유지한다. +- [ ] [csharp-communicator-core] `ITransport`와 communicator core를 구현한다. 검증: C# 구현체는 `PORTING_GUIDE.md`를 따르며 Unity main-thread concern을 프로토콜 core 밖에 둔다. +- [ ] [csharp-tcp-tls-transport] TCP/TLS client와 server 지원을 구현한다. +- [ ] [csharp-ws-wss-transport] Native 지원이 충분하지 않은 경우에만 focused dependency로 WebSocket/WSS 지원을 구현한다. 검증: 런타임 의존성 선택은 문서화되어 있고 protocol-relevant하다. +- [ ] [csharp-same-language-tests] 동일 언어 테스트를 추가한다. +- [ ] [csharp-cross-language-tests] 크로스 언어 테스트 runner를 추가한다. 검증: C# peer가 문서화된 프로토콜을 통해 최소 하나의 사용 가능 구현체와 상호 운용된다. +- [ ] [csharp-available-status] 테스트 통과 후에만 상위 구현 상태를 갱신한다. ## 범위 제외 @@ -45,7 +46,7 @@ ## 작업 컨텍스트 - 관련 경로: `PORTING_GUIDE.md`, `PROTOCOL.md`, `VERSIONING.md` -- 선행 작업: 안정화 기준선 완료 또는 실제 Unity/.NET 소비 수요 확인 +- 선행 작업: 안정화 기준선 완료 및 사용자 요청으로 C# 포트를 다음 마일스톤으로 지정 - 후속 작업: 릴리즈 준비 - 참고 구현: 동시성과 close-once 패턴은 Go를, public API 형태와 parser map 예시는 Dart를 참고한다. - 확인 필요: 지원할 .NET 및 Unity version target