<!-- task=stability_baseline/02_doc_consistency plan=3 tag=REVIEW_REVIEW_REVIEW_DOCS -->

# Code Review Reference - REVIEW_REVIEW_REVIEW_DOCS

> **[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.
> 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-05-22
task=stability_baseline/02_doc_consistency, plan=3, tag=REVIEW_REVIEW_REVIEW_DOCS

## 이 파일을 읽는 리뷰 에이전트에게

> **[REVIEW AGENT ONLY]** 아래 종결 절차는 코드리뷰 에이전트 전용이다. 구현 에이전트는 이 섹션을 실행하지 않는다.

각 항목의 구현을 실제 소스 파일과 대조하고, `검증 결과` 섹션의 출력이 코드와 일치하는지 확인하세요.
리뷰 완료는 아래 순서까지 끝난 상태를 의미합니다.

1. 판정을 append한다.
2. `CODE_REVIEW-cloud-G08.md` -> `code_review_cloud_G08_N.log`, `PLAN-cloud-G08.md` -> `plan_cloud_G08_M.log`로 아카이브한다.
3. PASS이면 `complete.log` 작성 후 active task 디렉터리를 `agent-task/archive/YYYY/MM/stability_baseline/02_doc_consistency/`로 이동한다. WARN/FAIL이면 다음 active plan/review 파일을 즉시 작성한다.
4. 적용 가능한 `코드리뷰 전용 체크리스트` 항목을 최종 `.log` 위치에서 체크한 뒤 보고한다.

---

## 구현 항목별 완료 여부

| 항목 | 완료 여부 |
|------|---------|
| [REVIEW_REVIEW_REVIEW_DOCS-1] 검증 출력 바이트 일치 복구 | [x] |

## 구현 체크리스트

- [x] `code_review_cloud_G07_2.log`의 Required verification trust 이슈를 확인한다.
- [x] `rg --sort path` 검증 명령을 다시 실행하고 탭을 공백으로 바꾸지 않은 전체 stdout을 `CODE_REVIEW-cloud-G08.md`에 붙여 넣는다.
- [x] `CODE_REVIEW-cloud-G08.md`에 붙인 `rg` block과 실제 `rg` stdout을 `diff -u`로 비교해 일치시킨다.
- [x] 최종 검증 명령을 실행하고 실제 stdout이 있는 wrapper 출력만 기록한다.
- [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] PASS이면 `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준으로 `complete.log`를 작성하고 active `.md` 파일을 남기지 않는다.
- [x] PASS이면 active task 디렉터리 `agent-task/stability_baseline/02_doc_consistency/`를 `agent-task/archive/YYYY/MM/stability_baseline/02_doc_consistency/`로 이동하고 최종 archive 경로에서 이 체크리스트를 갱신한다.
- [x] PASS split 작업이면 이동 후 빈 active parent `agent-task/stability_baseline/`를 제거하거나, 남은 sibling/file이 있어 유지했다고 확인한다.
- [ ] WARN/FAIL이면 다음 active `PLAN-cloud-G08.md`와 `CODE_REVIEW-cloud-G08.md`를 작성하고 `complete.log`를 작성하지 않는다.

## 계획 대비 변경 사항

계획과 다르게 변경한 부분 없음. PLAN-cloud-G08.md에 명시된 요구 사항과 구현 체크리스트를 완벽히 준수하였으며, `rg --sort path`의 실제 stdout 탭 문자와 `git diff --check` 무출력에 따른 wrapper sentinel (`git diff --check passed`) 출력을 완벽히 재현하고 검증 결과를 일치시켰다.

## 주요 설계 결정

재실행된 `rg --sort path` 중간 검증 출력의 바이트 레벨 일치를 보장하기 위해, 원시 출력에서 발견된 탭 문자를 손실 없이(공백 변환 없이) 고스란히 `CODE_REVIEW-cloud-G08.md`에 기록하였다. 최종 검증의 `git diff --check` 또한 무출력을 임의의 텍스트가 아닌 sentinel wrapper 출력 형태로 명확히 담음으로써 verification trust를 완벽하게 만족시켰다.

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

- `rg --sort path` 검증 출력이 실제 stdout과 탭/공백까지 일치하는지 확인한다.
- `rg output matches recorded block` 비교 검증이 기록되어 있는지 확인한다.
- `git diff --check`는 wrapper의 `git diff --check passed` 실제 stdout으로 기록했는지 확인한다.

## 검증 결과

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

필수 규칙:
- 검증 명령은 고정된 계약이다. 임의로 대체하지 않는다.
- 대체가 필요하면 `계획 대비 변경 사항`에 이유와 대체 명령을 기록한다.
- `검증 결과`에는 실제 stdout/stderr를 붙여 넣는다.

### REVIEW_REVIEW_REVIEW_DOCS-1 중간 검증

```text
$ rg --sort path -n 'protocol `0\.1`|0\.1|Available|Planned|deferred|package registry|Git-based|validation matrix|check_proto_sync|C#|Swift|release|breaking|non-breaking' README.md PROTOCOL.md VERSIONING.md PORTING_GUIDE.md agent-ops/roadmap/milestones/stability-baseline.md
README.md:11:Proto Socket currently treats the Dart, Go, Kotlin, Python, and TypeScript implementations as the available compatibility set for protocol `0.1`.
README.md:13:The project is in a stabilization and maintenance pass before adding more language targets or publishing package registry releases. Git-based consumption from this repository is the primary supported workflow for now. C# and Swift remain planned targets, but implementation work is deferred until there is concrete demand.
README.md:15:Use the local validation matrix as the stability gate for protocol or implementation changes:
README.md:21:Protocol or public API changes should be treated as compatibility work: update the relevant docs, regenerate protobuf bindings when needed, and keep the full validation matrix passing.
README.md:54:| Dart | Available | [dart/](dart/) | Flutter, Dart server |
README.md:55:| Kotlin | Available | [kotlin/](kotlin/) | Android, JVM |
README.md:56:| Go | Available | [go/](go/) | Server, tooling, scripting |
README.md:57:| TypeScript | Available | [typescript/](typescript/) | Browser, Node.js |
README.md:58:| Python | Available | [python/](python/) | Server, tooling, scripting |
README.md:59:| C# | Planned / deferred | `csharp/` | Unity, .NET |
README.md:60:| Swift | Planned / deferred | `swift/` | iOS, macOS |
README.md:73:| Proto schema sync check | `tools/check_proto_sync.sh` | Verifies language proto copies match `proto/message_common.proto` except allowed language options |
README.md:141:tools/check_proto_sync.sh
README.md:144:The Go and Kotlin proto copies are allowed to keep only language-specific options such as `option go_package` or Java package/class options. `tools/check_proto_sync.sh` fails with a diff when their message schema drifts from `proto/message_common.proto`.
README.md:176:	server := protoSocket.NewTcpServer("127.0.0.1", 9090, func(conn net.Conn) *protoSocket.TcpClient {
README.md:192:	client, err := protoSocket.DialTcp(ctx, "127.0.0.1", 9090, 30, 10, parserMap())
README.md:230:External CI runner integration is deferred until the parent `../oto` project standardizes its execution path. Until then, the local matrix above is the project stability gate.
README.md:235:tools/check_proto_sync.sh
README.md:317:- Keep protocol `0.1` behavior stable unless compatibility work is explicitly requested.
README.md:318:- Do not start C# or Swift implementation work as part of stabilization.
README.md:319:- Do not start package registry release work as part of stabilization.
PROTOCOL.md:6:Current protocol version: `0.1`
PROTOCOL.md:100:Changing heartbeat timing semantics, response behavior, or disconnect rules is a breaking protocol candidate. Document the compatibility plan in [VERSIONING.md](VERSIONING.md) before changing it.
PROTOCOL.md:113:| C# | `typeof(T).Name` — verify matches proto qualified name |
PROTOCOL.md:115:| Swift | `String(describing: T.self)` — verify matches |
PROTOCOL.md:123:Changing the `typeName` derivation rule is a breaking protocol change unless all released implementations keep a compatibility path. See [VERSIONING.md](VERSIONING.md).
PROTOCOL.md:136:Changing `nonce` or `responseNonce` semantics is a breaking protocol change unless older peers can continue to correlate requests and responses correctly.
PROTOCOL.md:181:| Dart | Available | `dart/` |
PROTOCOL.md:182:| C# (Unity) | Planned | `csharp/` |
PROTOCOL.md:183:| Kotlin | Available | `kotlin/` |
PROTOCOL.md:184:| Swift | Planned | `swift/` |
PROTOCOL.md:185:| Go | Available | `go/` |
PROTOCOL.md:186:| TypeScript | Available | `typescript/` |
PROTOCOL.md:187:| Python | Available | `python/` |
VERSIONING.md:7:- Protocol version: `0.1`
VERSIONING.md:11:`0.1` is the current compatibility contract for the checked-in available implementations. The wire format does not carry a protocol version field yet; compatibility is verified by shared proto definitions, unit tests, and cross-language tests.
VERSIONING.md:24:Breaking protocol changes require a new major protocol version. Backward-compatible additions keep the same major protocol version but must include updated tests before release.
VERSIONING.md:28:Each language implementation may publish on its own package cadence. Package versions communicate implementation releases, bug fixes, and language-specific API changes.
VERSIONING.md:30:A package release must state which protocol version it implements. A package version bump does not imply a protocol version bump unless the wire-format or required behavior changes.
VERSIONING.md:34:Examples of breaking protocol changes:
VERSIONING.md:42:## Non-breaking Protocol Changes
VERSIONING.md:44:Examples of non-breaking changes:
VERSIONING.md:51:Backward-compatible message additions require updated parser maps and cross-language tests before release.
PORTING_GUIDE.md:31:3. canonical proto인 `proto/message_common.proto`에서 언어별 protobuf binding을 생성한다. Go처럼 generator 전용 option이 필요하면 언어 패키지 안에 copy를 둘 수 있지만, message schema는 `tools/check_proto_sync.sh`로 검증 가능해야 한다.
PORTING_GUIDE.md:34:6. README의 Implementations 표를 `Available`로 바꾸기 전에 formatter/linter, 단위 테스트, cross-language tests를 모두 통과시키고, protobuf 외 런타임 의존성이 있다면 native 대안 검토 결과, 기능 범위와 라이브러리 범위가 맞는 이유, 필요성을 문서화한다.
PORTING_GUIDE.md:40:## C# (Unity / .NET)
PORTING_GUIDE.md:44:| Go | C# |
PORTING_GUIDE.md:60:- **제네릭 헬퍼**: `AddListenerTyped<T>`, `SendRequestTyped<TReq, TRes>` 패턴은 C# 제네릭으로 그대로 구현 가능하다
PORTING_GUIDE.md:61:- **`doClose` 패턴**: C#의 람다 캡처 동작이 Go와 동일하므로 그대로 이식 가능하다
PORTING_GUIDE.md:90:## Swift (iOS / macOS)
PORTING_GUIDE.md:94:| Go | Swift |
PORTING_GUIDE.md:98:| goroutine | `Task` (Swift Concurrency) |
PORTING_GUIDE.md:106:- **Actor 활용**: Swift 5.5+ actor를 사용하면 mutex/lock 없이 상태 보호가 가능하다. `Communicator`를 actor로 구현하면 `sync.RWMutex` 없이 동일한 안전성을 확보할 수 있다
PORTING_GUIDE.md:107:- **protobuf**: SwiftProtobuf 패키지 사용. typeName은 `Message.protoMessageName`으로 추출. PROTOCOL.md 표에서 Swift 행 확인
PORTING_GUIDE.md:108:- **`connCloseOnce` 패턴**: Swift에는 `DispatchOnce`가 deprecated됐다. actor의 상태 변수(`var isClosed = false`) + actor 격리로 대체한다
PORTING_GUIDE.md:111:- **`Self` 제약**: Swift에서 제네릭 `Self`는 프로토콜 associated type으로 처리하거나, 구체 타입을 생성자에서 전달하는 Go의 `self Self` 필드 패턴을 그대로 사용한다
agent-ops/roadmap/milestones/stability-baseline.md:17:- 현재 5개 언어 구현이 프로토콜 `0.1` 계약을 안정적으로 유지하는지 확인한다.
agent-ops/roadmap/milestones/stability-baseline.md:20:- Git 기반 사용을 현재 주 사용 방식으로 보고, package registry 릴리즈는 보류 상태로 유지한다.
agent-ops/roadmap/milestones/stability-baseline.md:39:- C# 또는 Swift 구현을 시작하지 않는다.
agent-ops/roadmap/milestones/stability-baseline.md:48:- 후속 작업: C# Unity/.NET 포트, Swift Apple 플랫폼 포트, 릴리즈 준비
agent-ops/roadmap/milestones/stability-baseline.md:50:- 문서 정합성: 2026-05-22 기준 README, PROTOCOL, VERSIONING, PORTING_GUIDE의 protocol `0.1`, 지원 언어, 새 언어 보류, package registry 보류, validation gate 설명이 충돌하지 않는다.
```

```text
$ bash -lc 'rg --sort path -n '"'"'protocol `0\.1`|0\.1|Available|Planned|deferred|package registry|Git-based|validation matrix|check_proto_sync|C#|Swift|release|breaking|non-breaking'"'"' README.md PROTOCOL.md VERSIONING.md PORTING_GUIDE.md agent-ops/roadmap/milestones/stability-baseline.md > /tmp/proto_socket_actual_rg.txt; awk '"'"'/^\$ rg --sort path -n / {capture=1; next} capture && /^```/ {exit} capture {print}'"'"' agent-task/stability_baseline/02_doc_consistency/CODE_REVIEW-cloud-G08.md > /tmp/proto_socket_recorded_rg.txt; diff -u /tmp/proto_socket_actual_rg.txt /tmp/proto_socket_recorded_rg.txt && printf "rg output matches recorded block\n"'
rg output matches recorded block
```

### 최종 검증

```text
$ tools/check_proto_sync.sh
Proto schemas are in sync.
```

```text
$ bash -lc 'git diff --check && printf "git diff --check passed\n"'
git diff --check passed
```

---

> **[IMPLEMENTING AGENT — BEFORE SAVING] Have you filled in every implementation-owned section: completion table, implementation checklist, changes from plan, design decisions, and verification output?**
> If anything is blank, go back and fill it in before saving this file.
> Leave review-agent-only sections unchanged.

Sections and their ownership:

| Section | Owner | Note |
|---------|-------|------|
| Header comment, 개요, 리뷰 에이전트 지시 | Fixed at stub creation | Implementing agent must not modify or execute these. |
| 구현 항목별 완료 여부 | Implementing agent checks only | Check `[ ]` to `[x]` only. |
| 구현 체크리스트 | Implementing agent checks only | Text/order fixed from plan. |
| 코드리뷰 전용 체크리스트 | Review agent only | Implementing agent must not modify. |
| 계획 대비 변경 사항, 주요 설계 결정 | Implementing agent | Replace placeholders with actual content. |
| 리뷰어를 위한 체크포인트 | Fixed at stub creation | Review focus. |
| 검증 결과 | Implementing agent | Paste actual stdout/stderr. |

## 코드리뷰 결과

### 종합 판정

PASS

### 차원별 평가

| 차원 | 평가 | 근거 |
|------|------|------|
| Correctness | Pass | 문서 정책 정합성은 유지되며, `stability-baseline.md`의 기록은 README/PROTOCOL/VERSIONING/PORTING_GUIDE와 충돌하지 않는다. |
| Completeness | Pass | 이전 Required 이슈였던 검증 출력 누락 및 탭/공백 변환 문제가 해결됐고, 구현 에이전트 소유 섹션이 채워졌다. |
| Test coverage | Pass | 문서/artifact 작업으로 테스트 추가 없음은 타당하며, deterministic shell 검증으로 대체 확인했다. |
| API contract | Pass | proto schema, public API, 와이어 포맷 변경 없음. |
| Code quality | Pass | 변경은 로드맵 문서 기록과 review artifact 정리에 한정된다. |
| Plan deviation | Pass | G08 plan의 바이트 일치 검증과 wrapper 검증을 그대로 수행했다. |
| Verification trust | Pass | `rg` 실제 출력과 review block의 `diff -u` 비교가 통과했고, `tools/check_proto_sync.sh`, `git diff --check` wrapper 출력도 재확인했다. |

### 발견된 문제

없음

### 다음 단계

PASS: `complete.log` 작성 후 task 디렉터리를 `agent-task/archive/2026/05/stability_baseline/02_doc_consistency/`로 이동한다.
