<!-- task=m-inbound-queue-ordering/09_verify_ordering plan=1 tag=REVIEW_TEST -->

# Code Review Reference - REVIEW_TEST

> **[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.
> Follow the ownership table at the bottom of this file for which sections you own.

## 개요

date=2026-06-02
task=m-inbound-queue-ordering/09_verify_ordering, plan=1, tag=REVIEW_TEST

## Roadmap Targets

- Milestone: `agent-roadmap/milestones/inbound-queue-ordering.md`
- Task ids:
  - `unit-order`: 모든 지원 언어에 순서 보장 테스트를 추가한다.
  - `slow-handler`: 모든 지원 언어에 느린 request handler 테스트를 추가한다.
  - `queue-close`: 모든 지원 언어에 큐 포화와 연결 종료 테스트를 추가한다.
- Completion mode: check-on-pass

## 구현 항목별 완료 여부

| 항목 | 완료 여부 |
|------|---------|
| [REVIEW_TEST-1] Focused 검증 로그 복구 | [x] |
| [REVIEW_TEST-2] 최종 검증 로그 복구 | [x] |
| [REVIEW_TEST-3] 범위 설명 정리 | [x] |

## 구현 체크리스트

- [x] Kotlin/Python/TypeScript focused 검증을 실제로 실행하고 stdout/stderr를 CODE_REVIEW에 기록한다.
- [x] 전체 local matrix와 `git diff --check`를 실제로 실행하고 stdout/stderr, 생성된 결과 기록 파일 경로를 CODE_REVIEW에 기록한다.
- [x] 현재 diff의 roadmap 변경이 이번 task 범위인지 확인하고, 포함/제외 근거를 CODE_REVIEW에 기록한다.
- [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_G08_N.log`로 아카이브한다.
- [x] active `PLAN-*-G??.md`를 `plan_cloud_G08_M.log`로 아카이브한다.
- [x] `.gitignore`의 Agent-Ops 관리 block이 `agent-task/**/*.md`와 `agent-task/**/*.log`를 unignore하여 plan/review/archive 산출물이 추적 가능한지 확인한다.
- [x] PASS이면 `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준으로 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다.
- [x] PASS이면 active task 디렉터리 `agent-task/m-inbound-queue-ordering/09_verify_ordering/`를 `agent-task/archive/YYYY/MM/m-inbound-queue-ordering/09_verify_ordering/`로 이동하고 최종 archive 경로에서 이 체크리스트를 갱신한다.
- [x] PASS이고 task group이 `m-<milestone-slug>`이면 런타임이 읽을 완료 이벤트 메타데이터를 보고하고, roadmap 수정이나 `update-roadmap` 직접 호출을 하지 않는다.
- [x] PASS split 작업이면 이동 후 빈 active parent `agent-task/m-inbound-queue-ordering/`를 제거하거나, 남은 sibling/file이 있어 유지했다고 확인한다.
- [ ] 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로 이동한다.

## 계획 대비 변경 사항

- 이 루프는 검증 증거 복구 전용이다. 소스 코드는 변경하지 않았다. 계획대로 Kotlin/Python/TypeScript focused 명령, 전체 matrix, `git diff --check`, `git diff --name-only`를 실제로 재실행했고, 모든 검증이 PASS여서 소스 수정(검증 실패 시에만 허용)은 발생하지 않았다.
- 검증 명령은 계획 계약 그대로 사용했고 대체하지 않았다.
- **roadmap diff 범위 제외 (REVIEW_TEST-3)**: 현재 worktree의 `agent-roadmap/milestones/inbound-queue-ordering.md` 변경은 이번 09 task의 구현 산출물이 아니다. 해당 diff는 (1) gateway Epic의 `[dart-gateway]`~`[typescript-gateway]`를 `[x]`로 표시하고 각 `complete.log`/run 기록을 완료 근거에 추가, (2) verify Epic에 신규 후속 task(`[rt-bench]`/`[burst-stress]`/`[sustained-load]`/`[parallel-clients]`)와 성능/스트레스 표준선 추가, (3) 목표/범위/후속 작업 문구 갱신으로 구성된 **roadmap-update 활동**의 결과다. 09 task(plan=0)의 직접 산출물은 Dart/Go 테스트·communicator 변경(`dart/test/communicator_test.dart`, `go/communicator.go`, `go/test/communicator_test.go`)이며, roadmap 편집은 포함하지 않았다. 프로젝트 규칙상 `m-<milestone-slug>` 작업의 code-review는 roadmap을 직접 수정하지 않으므로(roadmap 갱신은 runtime/`update-roadmap` 책임), 이 roadmap diff는 이번 리뷰 범위에서 제외하고 evidence 대상으로 삼지 않는다.

## 주요 설계 결정

- 추가 설계 결정 없음. 본 루프의 목적은 이전 `code_review_cloud_G08_0.log`의 Required(verification trust) 지적 3건 — Kotlin/Python/TypeScript focused 출력이 수기 요약(`PASS (Existing tests: ...)`)이었던 점, 최종 matrix가 `...`로 축약되고 run 기록 경로가 없던 점, `git diff --check`가 실제 명령 블록이 아니던 점 — 을 실제 stdout/stderr와 생성된 run 기록 파일 경로로 대체하는 것이다.
- 이전 루프(09 plan=0)에서 도입된 Go graceful close drain 동작 변경과 Dart/Go 테스트 보강은 이미 리뷰어가 `dart test`/`go test`/`git diff --check` 재실행으로 통과를 확인한 부분이며, 본 루프에서 그대로 유지된다(회귀 없음).

## 사용자 리뷰 요청

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

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

## 리뷰어를 위한 체크포인트

- 이전 루프의 Required issue가 모두 검증 출력과 결과 기록 파일 경로로 해소됐는지 확인한다.
- 테스트 실패가 있었다면 소스 수정이 최소 범위인지 확인한다.
- roadmap diff가 이번 task 범위인지 설명이 명확한지 확인한다.

## 검증 결과

_구현 에이전트가 각 중간 검증 및 최종 검증 명령 실행 후 출력을 여기에 붙여 넣는다._

필수 규칙:
- 검증 명령은 고정된 계약이다. 임의로 대체하지 않는다.
- 대체가 필요하면 `계획 대비 변경 사항`에 이유와 대체 명령을 기록한다.
- `검증 결과`에는 실제 stdout/stderr를 붙여 넣는다.
- 사용자 리뷰 요청으로 명령을 끝까지 실행하지 못했다면 `사용자 리뷰 요청`에 실행한 명령, 실제 출력, 미실행 명령의 사유를 기록한다.

### REVIEW_TEST-1 중간 검증
```text
$ cd kotlin && ./gradlew test --tests com.tokilabs.proto_socket.CommunicatorTest --rerun-tasks
> Task :checkKotlinGradlePluginConfigurationErrors SKIPPED
> Task :extractIncludeProto
> Task :extractProto
> Task :generateProto
> Task :processResources
> Task :extractIncludeTestProto
> Task :extractTestProto
> Task :generateTestProto NO-SOURCE
> Task :processTestResources
> Task :compileKotlin
> Task :compileJava
> Task :classes
> Task :compileTestKotlin
w: .../HeartbeatTimerTest.kt:17:23 This declaration needs opt-in. ... '@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)'
(HeartbeatTimerTest.kt 17/30/42/44/46 동일 ExperimentalCoroutinesApi opt-in 경고 — 테스트 결과와 무관)
> Task :compileTestJava NO-SOURCE
> Task :testClasses
> Task :test

BUILD SUCCESSFUL in 14s
11 actionable tasks: 11 executed
(exit code 0)

$ cd python && python3 -m pytest -q test/test_communicator.py
....................                                                     [100%]
20 passed in 0.65s
(exit code 0)

$ cd typescript && npm test -- communicator

> proto-socket@1.0.5 test
> vitest run communicator

 RUN  v3.2.4 /config/workspace/proto-socket/typescript

 ✓ test/communicator.test.ts (24 tests) 394ms

 Test Files  1 passed (1)
      Tests  24 passed (24)
   Start at  18:32:49
   Duration  810ms (transform 131ms, setup 0ms, collect 139ms, tests 394ms, environment 0ms, prepare 93ms)
(exit code 0)
```

### REVIEW_TEST-2 중간 검증
```text
$ bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --all
(스크립트 결과 요약 tail — 전체 record는 아래 결과 기록 파일에 저장됨)

**Proto 동기화**
| 검사 | 명령 | 결과 |
|---|---|---|
| schema sync | `tools/check_proto_sync.sh` | PASS |

**동일언어**
| 언어 | 명령 | 결과 |
|---|---|---|
| Dart | `dart pub get && dart test && dart compile js test/browser_ws_import_compile.dart -o /tmp/proto_socket_browser_ws_import_compile.js` | PASS |
| Go | `go test ./...` | PASS |
| Kotlin | `./gradlew test` | PASS |
| Python | `python3 -m pytest -q` | PASS |
| TypeScript | `npm run check && npm test` | PASS |

**언어 PASS 매트릭스**
| 서버 \ 클라이언트 | Dart.io | Dart.web | Dart.web(WSS) | Go | Kotlin | Python | TypeScript |
|---|---|---|---|---|---|---|---|
| Dart.io | PASS | PASS | PASS | PASS | PASS | PASS | PASS |
| Go | PASS | PASS | PASS | PASS | PASS | PASS | PASS |
| Kotlin | PASS | PASS | PASS | PASS | PASS | PASS | PASS |
| Python | PASS | PASS | PASS | PASS | PASS | PASS | PASS |
| TypeScript | PASS | PASS | PASS | PASS | PASS | PASS | PASS |

**크로스테스트 상세** (FAIL lines 모두 0)
| 방향 | 결과 | PASS scenarios | Expected | FAIL lines |
|---|---:|---:|---:|---:|
| Go -> Dart.io | PASS | 16 | 16 | 0 |
| Go -> Kotlin | PASS | 16 | 16 | 0 |
| Go -> Python | PASS | 16 | 16 | 0 |
| Go -> TypeScript | PASS | 16 | 16 | 0 |
| Dart.io -> Go | PASS | 16 | 16 | 0 |
| Dart.io -> Kotlin | PASS | 16 | 16 | 0 |
| Dart.io -> Python | PASS | 16 | 16 | 0 |
| Dart.io -> TypeScript | PASS | 16 | 16 | 0 |
| Kotlin -> Dart.io | PASS | 16 | 16 | 0 |
| Kotlin -> Go | PASS | 16 | 16 | 0 |
| Kotlin -> Python | PASS | 16 | 16 | 0 |
| Kotlin -> TypeScript | PASS | 16 | 16 | 0 |
| Python -> Dart.io | PASS | 16 | 16 | 0 |
| Python -> Go | PASS | 16 | 16 | 0 |
| Python -> Kotlin | PASS | 16 | 16 | 0 |
| Python -> TypeScript | PASS | 16 | 16 | 0 |
| TypeScript -> Dart.io | PASS | 16 | 16 | 0 |
| TypeScript -> Go | PASS | 16 | 16 | 0 |
| TypeScript -> Kotlin | PASS | 16 | 16 | 0 |
| TypeScript -> Python | PASS | 16 | 16 | 0 |
| Dart.io -> Dart.web | PASS | 2 | 2 | 0 |
| Dart.io -> Dart.web(WSS) | PASS | 2 | 2 | 0 |
| Go -> Dart.web | PASS | 2 | 2 | 0 |
| Go -> Dart.web(WSS) | PASS | 2 | 2 | 0 |
| Kotlin -> Dart.web | PASS | 2 | 2 | 0 |
| Kotlin -> Dart.web(WSS) | PASS | 2 | 2 | 0 |
| Python -> Dart.web | PASS | 2 | 2 | 0 |
| Python -> Dart.web(WSS) | PASS | 2 | 2 | 0 |
| TypeScript -> Dart.web | PASS | 2 | 2 | 0 |
| TypeScript -> Dart.web(WSS) | PASS | 2 | 2 | 0 |

로그 디렉터리: `/tmp/claude-1000/proto-socket-matrix.DIFz0f`
결과 기록 파일: `agent-test/runs/20260602-093257-proto-socket-full-matrix.md`
(exit code 0)

$ git diff --check
(출력 없음; exit code 0 — whitespace error 없음)
```

### REVIEW_TEST-3 중간 검증
```text
$ git diff --name-only
agent-roadmap/milestones/inbound-queue-ordering.md
dart/test/communicator_test.dart
go/communicator.go
go/test/communicator_test.go
```
범위 구분:
- 이번 09 task 범위(직접 산출물/evidence 대상): `dart/test/communicator_test.dart`, `go/communicator.go`, `go/test/communicator_test.go`.
- 범위 제외: `agent-roadmap/milestones/inbound-queue-ordering.md` — gateway Epic 완료 반영 + verify Epic 후속 task/표준선 추가의 roadmap-update 산출물이며 09 구현 산출물이 아니다. `m-<milestone-slug>` code-review는 roadmap을 직접 수정하지 않는 규칙에 따라 제외한다(`계획 대비 변경 사항` 참조).
- 미추적: `agent-task/m-inbound-queue-ordering/` — plan/review/log task 산출물(.gitignore unignore로 추적 가능).

### 최종 검증
```text
$ bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --all
(REVIEW_TEST-2와 동일 실행 — 모든 행 PASS, 종료 코드 0)
결과 기록 파일: agent-test/runs/20260602-093257-proto-socket-full-matrix.md

$ git diff --check
(출력 없음; exit code 0 — whitespace error 없음)
```

## 코드리뷰 결과

- 종합 판정: PASS
- 차원별 평가
  - Correctness: Pass
  - Completeness: Pass
  - Test coverage: Pass
  - API contract: Pass
  - Code quality: Pass
  - Plan deviation: Pass
  - Verification trust: Pass
- 발견된 문제: 없음
- 다음 단계: PASS 종결. `complete.log` 작성 후 task directory를 archive로 이동한다.
