<!-- task=01+browser_native_ws plan=2 tag=REVIEW_REVIEW_BNW -->

# Browser Native WebSocket 리뷰 문서 회복 계획 - REVIEW_REVIEW_BNW

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

**이번 후속 작업은 소스 재설계가 아니라 active `CODE_REVIEW-cloud-G08.md`의 구현 에이전트 소유 섹션과 검증 출력 회복이다.**
소스 변경은 검증 중 불일치가 발견될 때만 최소 범위로 수행한다.
구현 체크리스트를 기준으로 작업하고, plan과 review stub 양쪽 체크리스트를 모두 완료하며, 중간/최종 검증의 실제 stdout/stderr를 `CODE_REVIEW-cloud-G08.md`에 기록한다.
review 파일의 `이 파일을 읽는 리뷰 에이전트에게` 섹션에 있는 아카이브 지시는 실행하지 않는다. `코드리뷰 전용 체크리스트`도 구현 에이전트가 수정하거나 체크하지 않는다.

## 배경

이전 후속 구현은 `proto-socket/node`의 `ws` 런타임 계약을 `typescript/package.json`, `typescript/package-lock.json`, `typescript/README.md`에 반영했다.
리뷰어 재검증 기준으로 소스 계약과 지정 검증 명령은 통과했다.
하지만 active `CODE_REVIEW-cloud-G08.md`의 구현 항목 완료표, 구현 체크리스트, `계획 대비 변경 사항`, `주요 설계 결정`, `검증 결과`가 비어 있거나 placeholder로 남아 있어 code-review 계약상 완료 상태로 인정할 수 없다.

## 실패 사유

- Required: `CODE_REVIEW-cloud-G08.md`의 구현 에이전트 소유 섹션이 완료되지 않았고, 고정 검증 명령의 실제 stdout/stderr가 기록되지 않았다.

## 구현 체크리스트

- [x] [REVIEW_REVIEW_BNW-1] `REVIEW_BNW` 후속 구현의 review 문서와 검증 출력 기록을 완성한다.
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_REVIEW_BNW-1] Review 문서와 검증 출력 기록 완성

#### 문제

이전 active review stub은 아래 필수 구현-owned 상태가 완료되지 않았다.

- 구현 항목별 완료 여부가 `[ ]`로 남아 있다.
- 구현 체크리스트가 `[ ]`로 남아 있다.
- `계획 대비 변경 사항`, `주요 설계 결정`에 placeholder 문구가 남아 있다.
- `검증 결과`의 각 명령 출력이 `(output)` placeholder로 남아 있다.

#### 해결 방법

현재 적용된 `REVIEW_BNW-1` 구현 상태를 실제 파일과 대조한 뒤 active `CODE_REVIEW-cloud-G08.md`에 기록한다.

- `typescript/package.json`: `ws`는 root `dependencies`에 없어야 하고, `peerDependencies.ws` 및 optional peer meta와 테스트용 `devDependencies.ws`가 있어야 한다.
- `typescript/package-lock.json`: manifest와 같은 dependency/peer/devDependency 상태를 반영해야 한다.
- `typescript/README.md`: Node WebSocket entrypoint 사용자는 `ws` 설치가 필요하고, browser root와 Node TCP-only 사용자는 필요 없다고 설명해야 한다.
- `typescript/src/index.ts`와 `typescript/src/browser_ws_client.ts`: root/browser entrypoint guard 명령에서 `ws`, `node:*`, 단독 `Buffer`, `ClientOptions`, `RawData`가 검출되지 않아야 한다.

소스가 이미 위 조건을 만족하면 소스 파일은 수정하지 않는다.
검증 중 불일치가 발견될 경우에만 계획 범위 안에서 최소 수정하고, `계획 대비 변경 사항`에 이유를 기록한다.

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

- [x] active `CODE_REVIEW-cloud-G08.md`의 구현 항목별 완료 여부를 실제 상태에 맞게 체크한다.
- [x] active `CODE_REVIEW-cloud-G08.md`의 구현 체크리스트를 실제 상태에 맞게 체크한다.
- [x] `계획 대비 변경 사항`을 placeholder 없이 채운다. 계획과 다른 소스 변경이 없으면 `없음` 또는 그에 준하는 명확한 문장으로 기록한다.
- [x] `주요 설계 결정`에 optional peer dependency, 테스트용 devDependency 유지, README 안내, root/browser guard 유지 결정을 기록한다.
- [x] 아래 중간/최종 검증 명령을 실행하고 실제 stdout/stderr를 `검증 결과`에 붙여 넣는다.

#### 중간 검증

```bash
cd typescript && node -e "const fs=require('fs'); const p=JSON.parse(fs.readFileSync('package.json','utf8')); if (p.dependencies?.ws) throw new Error('ws must not be a root dependency'); if (p.devDependencies?.ws !== '^8.18.1') throw new Error('ws devDependency missing'); if (p.peerDependencies?.ws !== '^8.18.1') throw new Error('ws peerDependency missing'); if (p.peerDependenciesMeta?.ws?.optional !== true) throw new Error('ws peerDependency must be optional');"
```

예상 결과: 출력 없이 exit code 0.

## 최종 검증

```bash
cd typescript && npm run check
cd typescript && npm test
cd go && go run ./crosstest/go_typescript.go
rg --sort path -n 'from "ws"|node:|\bBuffer\b|ClientOptions|RawData' typescript/src/index.ts typescript/src/browser_ws_client.ts
```

마지막 `rg` 명령의 예상 결과는 출력 없음(exit code 1)이다.
