4.2 KiB
4.2 KiB
Code Review Reference - IMPROVE
개요
date=2026-04-24 task=api_consistency, plan=0, tag=IMPROVE
이 파일을 읽는 리뷰 에이전트에게
각 항목의 구현을 실제 소스 파일과 대조하고, 검증 결과 섹션의 출력이 코드와 일치하는지 확인하세요.
리뷰 완료 후 반드시 아래 순서로 아카이브하세요.
CODE_REVIEW.md→code_review_0.log(기존 code_review_*.log 수 = 0)PLAN.md→plan_0.log(기존 plan_*.log 수 = 0)- PASS인 경우
complete.log작성 후 종료. WARN/FAIL인 경우 새PLAN.md+CODE_REVIEW.md스텁 작성.
구현 항목별 완료 여부
| 항목 | 완료 여부 |
|---|---|
[IMPROVE-1] Dart sendRequest timeout 파라미터 추가 |
[x] |
| [IMPROVE-2] TypeScript write queue maxsize 제한 | [x] |
계획 대비 변경 사항
- TypeScript write loop는 첫 packet을 즉시 in-flight로 소비하므로, 테스트는
1개 in-flight + 64개 queued상태에서 66번째queuePacket()이 waiter에 들어가는 방식으로 검증했다. - Dart
_pendingRequests정리 확인은 public API를 늘리지 않기 위해 테스트에서만 reflection으로 확인했다.
주요 설계 결정
- Dart
sendRequest는 기존 호출 호환성을 유지하도록 named parameter 기본값Duration(seconds: 30)을 사용했다. - Dart timeout 발생 시 해당 nonce를
_pendingRequests에서 제거하고TimeoutException을 전파한다. - TypeScript write queue 제한은 queued item 수 기준 64개로 적용하고, queue item이 소비될 때 waiter를 하나씩 깨운다.
- TypeScript
shutdown()은 대기 중인 sender를 모두 깨워 재개 시NotConnectedError로 종료되도록 했다.
리뷰어를 위한 체크포인트
dart/lib/src/communicator.dart—sendRequest시그니처에{Duration timeout = const Duration(seconds: 30)}파라미터 있는지dart/lib/src/communicator.dart— timeout 발생 시_pendingRequests.remove(requestNonce)호출 후TimeoutException전파하는지dart/test/communicator_test.dart—TimeoutException테스트 추가 및 통과 여부typescript/src/communicator.ts—MAX_WRITE_QUEUE_SIZE = 64상수 존재 여부typescript/src/communicator.ts—queuePacket()에서 queue full 시 대기 로직 구현 여부typescript/src/communicator.ts—shutdown()에서 waiters 플러시 여부typescript/src/communicator.ts—initialize()에서writeQueueWaiters = []초기화 여부typescript/test/communicator.test.ts— 큐 full 대기 테스트 추가 및 통과 여부
검증 결과
구현 에이전트가 각 중간 검증 및 최종 검증 명령 실행 후 출력을 여기에 붙여 넣는다.
IMPROVE-1 중간 검증
$ cd dart && dart test test/communicator_test.dart
00:00 +0: Communicator protocol guards response typeName mismatch completes sendRequest with error
00:00 +1: Communicator protocol guards close 후 sendRequest는 StateError로 완료된다
00:00 +2: Communicator protocol guards sendRequest가 timeout 내 응답 없으면 TimeoutException을 던진다
00:00 +3: Communicator protocol guards cannot register addRequestListener for a type already using addListener
00:00 +4: Communicator protocol guards cannot register addListener for a type already using addRequestListener
00:00 +5: Communicator protocol guards queuePacket uses injected transport
00:00 +6: All tests passed!
$ cd dart && dart analyze
No issues found!
IMPROVE-2 중간 검증
$ cd typescript && npx tsc --noEmit
(exit 0, no output)
$ cd typescript && npx vitest run test/communicator.test.ts
✓ test/communicator.test.ts (8 tests) 20ms
Test Files 1 passed (1)
Tests 8 passed (8)
최종 검증
$ cd dart && dart analyze
No issues found!
$ cd dart && dart test
00:15 +43: All tests passed!
$ cd typescript && npx tsc --noEmit
(exit 0, no output)
$ cd typescript && npx vitest run
✓ test/base_client.test.ts (7 tests) 9ms
✓ test/communicator.test.ts (8 tests) 19ms
✓ test/tcp.test.ts (2 tests) 13ms
✓ test/ws.test.ts (2 tests) 21ms
Test Files 4 passed (4)
Tests 19 passed (19)