<!-- task=m-protocol-evolution-compatibility/03+01,02_fullname_tests plan=1 tag=REVIEW_TEST -->

# Plan - REVIEW_TEST

## 이 파일을 읽는 구현 에이전트에게

이 plan은 직전 code-review FAIL의 Required 이슈만 처리한다. 동일 언어 테스트와 production communicator 동작은 이미 별도 검증이 있으므로, 이번 범위는 crosstest legacy simple-name receive smoke와 그 matrix evidence로 제한한다. 구현 중 사용자 결정이 필요하면 active review stub의 `사용자 리뷰 요청` 섹션에 근거를 남기고 멈춘다. 사용자에게 직접 질문하지 않는다.

## Roadmap Targets

- Milestone: `agent-roadmap/milestones/protocol-evolution-compatibility.md`
- Task ids:
  - `fullname-tests`: full name 송수신, simple name legacy 수신, request/response alias 호환, alias 충돌 감지 동일 언어 및 크로스 언어 테스트
- Completion mode: check-on-pass

## 이전 리뷰 요약

- Archived plan: `agent-task/m-protocol-evolution-compatibility/03+01,02_fullname_tests/plan_cloud_G07_0.log`
- Archived review: `agent-task/m-protocol-evolution-compatibility/03+01,02_fullname_tests/code_review_cloud_G07_0.log`
- Verdict: FAIL
- Required issue: crosstest runner에 legacy simple-name receive smoke가 없다. 기존 runner는 full-name `INFO typeName` 출력과 `send-push`/`requests` PASS만 검증한다.

## 범위 결정 근거

이번 후속은 기존 production alias 구현을 바꾸지 않고, crosstest가 실제로 simple legacy wire type을 수신하는지 증명하는 데 집중한다. 각 server-capable 언어(Dart.io, Go, Kotlin, Python, TypeScript)가 simple `TestData` typeName으로 들어온 cross-language frame을 full-name parser/listener 또는 request handler에 매칭하는지 최소 smoke를 추가한다.

## 구현 체크리스트

- [ ] Dart/Go/Kotlin/Python/TypeScript crosstest에 legacy simple-name receive smoke를 추가한다.
- [ ] 추가한 smoke가 `PASS scenario=...legacy...` 형태로 matrix 로그에 집계되도록 하고, `run_matrix.sh`의 expected scenario count를 실제 PASS line 수와 일치시킨다.
- [ ] `rg --sort path -n "legacy|simple-name|simple name|PASS scenario=.*legacy" dart/crosstest go/crosstest kotlin/crosstest python/crosstest typescript/crosstest agent-ops/skills/project/run-proto-socket-test-matrix/scripts` 결과로 새 scenario가 존재함을 확인한다.
- [ ] full matrix를 실행하고 새 record path, PASS/FAIL matrix, 변경된 Expected count를 review stub에 붙인다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_TEST-1] Cross-Language Legacy Simple Receive Smoke

문제: `fullname-tests`의 crosstest 요구 중 simple legacy receive smoke가 빠졌다. `plan_cloud_G07_0.log`의 체크리스트는 crosstest legacy smoke를 요구했지만, 실제 crosstest에는 `send-push`/`requests` phase만 있다.

대표 근거:

```text
agent-task/m-protocol-evolution-compatibility/03+01,02_fullname_tests/plan_cloud_G07_0.log:72
typescript/crosstest/go_typescript_client.ts:18-19
go/crosstest/go_dart.go:145
```

해결 방법: 각 server-capable 언어의 cross-language runner에 simple `TestData` wire type을 보내는 smoke를 추가한다. 모든 일반 cross 방향에 같은 PASS line 개수가 나오도록 scenario 이름과 실행 경로를 통일하고, `run_matrix.sh`의 `expected_cross_pass_lines`를 갱신한다. Dart.web/WSS는 browser client runtime이므로 이 task의 server-capable legacy smoke 대상에 포함하지 않는다.

수정 후보:

- `dart/crosstest/*.dart`
- `go/crosstest/*.go`
- `kotlin/crosstest/*.kt`
- `python/crosstest/*.py`
- `typescript/crosstest/*.ts`
- `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh`

테스트 작성: 필수. 새 smoke가 실패하면 해당 cross direction이 FAIL이어야 한다.

중간 검증:

```bash
rg --sort path -n "legacy|simple-name|simple name|PASS scenario=.*legacy" dart/crosstest go/crosstest kotlin/crosstest python/crosstest typescript/crosstest agent-ops/skills/project/run-proto-socket-test-matrix/scripts
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh --route auto --dry-run
```

### [REVIEW_TEST-2] Full Matrix Evidence

문제: 기존 full matrix record는 전체 PASS지만, legacy simple-name crosstest scenario가 없어서 `fullname-tests`의 cross-language legacy coverage 근거로는 부족하다.

해결 방법: full matrix를 다시 실행하고 record에 새 Expected count와 새 legacy scenario PASS가 반영되었는지 확인한다. review stub에는 record path, 언어 PASS 매트릭스, 크로스테스트 상세의 변경된 Expected count, legacy scenario 로그 확인 결과를 붙인다.

수정 후보:

- `agent-test/runs/<generated>-proto-socket-full-matrix.md`
- `CODE_REVIEW-cloud-G07.md`

테스트 작성: 새 test 추가가 아니라 검증 evidence 수집이다.

중간 검증:

```bash
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --all
```

## 최종 검증

```bash
rg --sort path -n "legacy|simple-name|simple name|PASS scenario=.*legacy" dart/crosstest go/crosstest kotlin/crosstest python/crosstest typescript/crosstest agent-ops/skills/project/run-proto-socket-test-matrix/scripts
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_test_by_change.sh --route auto --dry-run
bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --all
```

모든 구현과 검증 완료 후 반드시 `CODE_REVIEW-cloud-G07.md`의 구현 에이전트 소유 섹션을 채운다.
