<!-- task=dart_web_e2e/02+01_multilang_matrix plan=1 tag=REVIEW_TEST -->

# Dart Web Matrix Verification Recovery Plan

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

`CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채우는 것이 필수다. 이 follow-up은 코드 확장이 아니라 검증 신뢰 회복이다. `ssh toki@toki-labs.com` 원격 환경에서 Chrome 기반 browser E2E와 matrix entrypoint를 실제 실행하고, 실제 stdout/stderr 또는 `/tmp` 로그 경로를 기록한다. finalization은 code-review-skill에 맡긴다.

## 배경

이전 리뷰는 Dart.web E2E 구현 자체보다 검증 기록의 신뢰도 문제로 FAIL 처리됐다. TEST-1 출력은 생략/재구성되어 있었고, TEST-4의 필수 `--unit`/`--cross` 최종 검증은 실행되지 않은 상태로 완료 표시됐다. 사용자는 `ssh toki@toki-labs.com` 원격 접속 환경에서 테스트하도록 가이드하라고 요청했다.

## 분석 결과

### 읽은 파일

- `AGENTS.md`
- `agent-ops/rules/project/rules.md`
- `agent-ops/rules/private/rules.md`
- `agent-ops/rules/common/rules-roadmap.md`
- `agent-ops/roadmap/current.md`
- `agent-ops/skills/common/router.md`
- `agent-ops/skills/common/code-review/SKILL.md`
- `agent-ops/skills/common/plan/SKILL.md`
- `agent-task/dart_web_e2e/02+01_multilang_matrix/plan_cloud_G07_0.log`
- `agent-task/dart_web_e2e/02+01_multilang_matrix/code_review_cloud_G07_0.log`
- `dart/test/browser_ws_runtime_helper.dart`
- `dart/test/browser_ws_runtime_test.dart`
- `dart/test/browser_ws_dart_io_test.dart`
- `dart/test/browser_ws_kotlin_test.dart`
- `dart/test/browser_ws_python_test.dart`
- `dart/test/browser_ws_typescript_test.dart`
- `dart/crosstest/dart_web.dart`
- `go/crosstest/go_dart_web.go`
- `kotlin/crosstest/kotlin_dart_web.kt`
- `python/crosstest/python_dart_web.py`
- `typescript/crosstest/typescript_dart_web.ts`
- `agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh`
- `agent-ops/skills/project/run-proto-socket-test-matrix/SKILL.md`
- `README.md`
- `dart/lib/src/communicator.dart`
- `go/communicator.go`
- `kotlin/src/main/kotlin/com/tokilabs/proto_socket/Communicator.kt`
- `python/proto_socket/communicator.py`
- `typescript/src/communicator.ts`

### 테스트 커버리지 공백

- Dart.web browser WS client와 Dart.io/Go/Kotlin/Python/TypeScript WS server 간 runtime E2E는 코드상 runner가 있으나 Chrome 없는 환경에서 PASS가 확인되지 않았다.
- Matrix entrypoint `--cross`가 Dart.web 표를 포함해 실제 PASS하는지 확인되지 않았다.
- `--unit`은 이전 리뷰 파일에서 로컬 미실행으로 기록되어 최종 acceptance 증거가 없다.

### 심볼 참조

- rename/remove 없음.

### 분할 판단

split policy를 다시 평가했다. 이번 follow-up은 동일 active subtask에서 검증 증거를 회복하는 단일 루프이며, 독립적인 API/문서/언어별 구현 경계가 없다. 문제 2개 모두 같은 원격 검증 세션과 같은 `CODE_REVIEW-cloud-G07.md` 증거 작성에 묶여 있으므로 추가 split은 만들지 않는다.

### 범위 결정 근거

우선 범위는 `ssh toki@toki-labs.com` 원격 환경에서 실제 검증을 실행하고 새 `CODE_REVIEW-cloud-G07.md`에 raw evidence를 남기는 것이다. 검증 중 코드 실패가 드러나면 해당 실패를 통과시키는 최소 source fix만 허용한다. README 표, matrix 구조, runner 설계의 확장/재설계는 새 실패 증거 없이는 건드리지 않는다.

### 빌드 등급

build=`cloud-G07`, review=`cloud-G07`. SSH 원격 실행, browser runner, stdout/stderr 증거 복구, matrix exit-status 계약 확인이 포함된 terminal/browser automation follow-up이다.

## 구현 체크리스트

- [ ] [REVIEW_TEST-1] SSH 원격 환경에서 Dart.web 서버별 runner 5개를 실행하고 실제 stdout/stderr를 기록한다.
- [ ] [REVIEW_TEST-2] SSH 원격 환경에서 `--unit`과 `--cross` 최종 matrix를 실행하고 완료 표시를 증거와 일치시킨다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## 의존 관계 및 구현 순서

원격 환경에 현재 작업트리 변경이 존재해야 한다. 먼저 `ssh toki@toki-labs.com`로 접속해 `/config/workspace/proto-socket`에서 파일 존재와 Chrome 실행 파일을 확인한 뒤 TEST-1, TEST-2 순서로 실행한다.

### [REVIEW_TEST-1] SSH Runner Evidence

#### 문제

[code_review_cloud_G07_0.log](/config/workspace/proto-socket/agent-task/dart_web_e2e/02+01_multilang_matrix/code_review_cloud_G07_0.log:97)의 TEST-1 출력은 `Compiled ...`, `Failed to run Chromium: ...`, `...`처럼 생략되어 실제 stdout/stderr 계약을 충족하지 않는다.

#### 해결 방법

원격 shell에 접속한 뒤 현재 변경본과 browser runner 환경을 확인하고 서버별 runner 5개를 그대로 실행한다. 출력이 너무 길면 `/tmp/proto-socket-dart-web-e2e/` 아래 로그로 저장하고, `CODE_REVIEW-cloud-G07.md`에는 exact command와 로그 경로를 적는다.

```bash
ssh toki@toki-labs.com
cd /config/workspace/proto-socket
pwd
git status --short
test -f dart/test/browser_ws_runtime_helper.dart
test -f go/crosstest/go_dart_web.go
command -v google-chrome || command -v chromium || command -v chromium-browser
mkdir -p /tmp/proto-socket-dart-web-e2e
```

#### 수정 파일 및 체크리스트

- [ ] `agent-task/dart_web_e2e/02+01_multilang_matrix/CODE_REVIEW-cloud-G07.md`에 원격 환경 확인 출력 기록
- [ ] `agent-task/dart_web_e2e/02+01_multilang_matrix/CODE_REVIEW-cloud-G07.md`에 Dart.io runner 출력 기록
- [ ] `agent-task/dart_web_e2e/02+01_multilang_matrix/CODE_REVIEW-cloud-G07.md`에 Go runner 출력 기록
- [ ] `agent-task/dart_web_e2e/02+01_multilang_matrix/CODE_REVIEW-cloud-G07.md`에 Kotlin runner 출력 기록
- [ ] `agent-task/dart_web_e2e/02+01_multilang_matrix/CODE_REVIEW-cloud-G07.md`에 Python runner 출력 기록
- [ ] `agent-task/dart_web_e2e/02+01_multilang_matrix/CODE_REVIEW-cloud-G07.md`에 TypeScript runner 출력 기록

#### 테스트 작성

새 테스트는 작성하지 않는다. 기존 browser runner 5개가 acceptance test다.

#### 중간 검증

```bash
ssh toki@toki-labs.com 'cd /config/workspace/proto-socket && command -v google-chrome || command -v chromium || command -v chromium-browser'
ssh toki@toki-labs.com 'cd /config/workspace/proto-socket/dart && dart run crosstest/dart_web.dart'
ssh toki@toki-labs.com 'cd /config/workspace/proto-socket/go && go run ./crosstest/go_dart_web.go'
ssh toki@toki-labs.com 'cd /config/workspace/proto-socket/kotlin && ./gradlew run -PmainClass=com.tokilabs.proto_socket.crosstest.KotlinDartWebKt'
ssh toki@toki-labs.com 'cd /config/workspace/proto-socket/python && python3 crosstest/python_dart_web.py'
ssh toki@toki-labs.com 'cd /config/workspace/proto-socket/typescript && ./node_modules/.bin/tsx crosstest/typescript_dart_web.ts'
```

기대 결과: Chrome 경로가 출력되고, 각 runner가 종료 코드 0과 `PASS scenario=send-push`, `PASS scenario=request-response`를 출력한다.

### [REVIEW_TEST-2] SSH Matrix Acceptance

#### 문제

[code_review_cloud_G07_0.log](/config/workspace/proto-socket/agent-task/dart_web_e2e/02+01_multilang_matrix/code_review_cloud_G07_0.log:210)의 최종 검증은 `--unit`/`--cross`가 미실행으로 기록되어 있는데 구현 체크리스트는 TEST-4 완료로 표시됐다.

#### 해결 방법

같은 원격 repo에서 matrix entrypoint를 그대로 실행한다. 성공하면 새 review 파일의 TEST-4/REVIEW_TEST 체크리스트를 완료 처리한다. 실패하면 실패 로그를 원문으로 기록하고, 코드 실패인지 환경 실패인지 구분한 뒤 코드 실패만 최소 수정한다.

#### 수정 파일 및 체크리스트

- [ ] `agent-task/dart_web_e2e/02+01_multilang_matrix/CODE_REVIEW-cloud-G07.md`에 `--unit` 실제 출력 기록
- [ ] `agent-task/dart_web_e2e/02+01_multilang_matrix/CODE_REVIEW-cloud-G07.md`에 `--cross` 실제 출력 기록
- [ ] `agent-task/dart_web_e2e/02+01_multilang_matrix/CODE_REVIEW-cloud-G07.md`에 raw output placeholder가 남지 않았는지 확인
- [ ] 검증 실패가 code failure이면 관련 source file 최소 수정과 재실행 출력 기록

#### 테스트 작성

새 테스트는 작성하지 않는다. `run_matrix.sh --unit`과 `run_matrix.sh --cross`가 최종 acceptance다.

#### 중간 검증

```bash
ssh toki@toki-labs.com 'cd /config/workspace/proto-socket && bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --unit'
ssh toki@toki-labs.com 'cd /config/workspace/proto-socket && bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --cross'
rg --sort path "Compiled \\.\\.\\.|# 로컬 미실행|cloud-G07에서 재실행|\\(output\\)" agent-task/dart_web_e2e/02+01_multilang_matrix/CODE_REVIEW-cloud-G07.md
```

기대 결과: 두 matrix 명령이 종료 코드 0으로 PASS 표를 출력하고, `rg` 명령은 출력이 없다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `agent-task/dart_web_e2e/02+01_multilang_matrix/CODE_REVIEW-cloud-G07.md` | REVIEW_TEST-1, REVIEW_TEST-2 |
| source files if verification exposes code failure | REVIEW_TEST-2 |

## 최종 검증

```bash
ssh toki@toki-labs.com 'cd /config/workspace/proto-socket && bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --unit'
ssh toki@toki-labs.com 'cd /config/workspace/proto-socket && bash agent-ops/skills/project/run-proto-socket-test-matrix/scripts/run_matrix.sh --cross'
rg --sort path "Compiled \\.\\.\\.|# 로컬 미실행|cloud-G07에서 재실행|\\(output\\)" agent-task/dart_web_e2e/02+01_multilang_matrix/CODE_REVIEW-cloud-G07.md
```

기대 결과: 원격 matrix 두 명령은 종료 코드 0이고, `rg` 명령은 출력이 없다. 출력이 길면 `/tmp/proto-socket-dart-web-e2e/` 로그 경로와 exact command를 review 파일에 기록한다.

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
