<!-- task=m-api-centered-proto-socket-rail/01_contracts_api_registry plan=1 tag=REVIEW_API -->
# CODE_REVIEW-cloud-G07: Verification Evidence Recovery

## 구현 에이전트 소유 섹션
- 구현 요약: 이 후속 plan은 `plan_cloud_G07_0.log`의 Required 이슈(필수 검증 출력 부재)만 다룬다. 검증 환경에서 `go test ./services/api/...`(PASS)와 `bin/contracts-check`(FAIL)를 실제 실행하고 stdout/stderr를 아래에 기록했다. `go test`는 통과했으므로 소스 코드 변경은 하지 않았다. `bin/contracts-check` 실패는 plan-0 소스 변경(proto/generated 파일 미수정)이 아니라 환경 `protoc` 버전 불일치이며, 상세는 사용자 리뷰 요청 섹션에 기록했다.
- 변경 파일: plan-0의 소스 변경(`services/api/internal/socket/{handlers.go,server.go,server_test.go}`, `services/api/internal/contracts/{parser_map.go,parser_map_test.go}`)을 그대로 유지했다. 이 후속 plan에서 코드 변경은 없고 이 review 파일만 갱신했다. `bin/contracts-check`가 내부적으로 `bin/contracts-gen`을 돌려 generated 파일을 일시 수정했으나 `git checkout -- packages/contracts/gen/go apps/client/lib/src/generated`로 committed 상태로 복구해 working tree에 의도치 않은 산출물 변경이 남지 않게 했다.
- 실행한 검증/명령:
  - `go version` → `go version go1.26.2 linux/arm64`
  - `go test ./services/api/...` → exit 0 (PASS). 실제 출력:
    ```
    ?   	git.toki-labs.com/toki/alt/services/api/cmd/alt-api	[no test files]
    ok  	git.toki-labs.com/toki/alt/services/api/internal/config	(cached)
    ok  	git.toki-labs.com/toki/alt/services/api/internal/contracts	0.005s
    ok  	git.toki-labs.com/toki/alt/services/api/internal/socket	0.004s
    ```
  - `bin/contracts-check` → exit 1 (FAIL). 실제 stderr (요지):
    ```
    contracts-check: Go generated output drift detected under /config/workspace/alt/packages/contracts/gen/go
    --- snapshot/go/alt/v1/backtest.pb.go
    +++ packages/contracts/gen/go/alt/v1/backtest.pb.go
    @@ -1,7 +1,7 @@
     // 	protoc-gen-go v1.36.11
    -// 	protoc        v5.29.3
    +// 	protoc        v3.21.12
    (common.pb.go, market.pb.go 동일 패턴)
    contracts-check: run bin/contracts-gen and commit the regenerated output
    ```
  - drift 범위 확인: `bin/contracts-gen` 재생성 후 `git diff --stat`은 3개 `.pb.go` 파일 각 1줄(±1)만 변경 — 전부 헤더의 `protoc` 버전 주석뿐이고 의미 있는 schema/코드 변경은 없다.
- 남은 위험/후속 작업:
  - `bin/contracts-check`는 이 환경의 `protoc v3.21.12`와 committed 산출물 생성 버전 `protoc v5.29.3` 불일치 때문에 통과할 수 없다. plan-0 변경과 무관하며, 사용자 리뷰 요청 섹션의 결정이 필요하다.
  - plan-0의 남은 후속 작업(market `status` 메시지 deferred → `05+02_market_rail`, multi-handler 왕복 통합 테스트는 두 번째 실제 handler 도입 시 추가)은 그대로 유효하다.

## 구현 체크리스트

- [x] `go test ./services/api/...`의 실제 stdout/stderr를 기록한다.
- [x] `bin/contracts-check`의 실제 stdout/stderr를 기록한다.
- [x] 실패가 코드 문제이면 최소 수정 후 재실행 결과를 기록한다. → `go test` PASS이며 `contracts-check` 실패는 코드 문제가 아닌 환경 `protoc` 버전 불일치로 확인되어 소스 수정 없음.
- [x] 환경/tool 부재이면 `command -v` 또는 실제 stderr를 사용자 리뷰 요청에 기록한다. → `protoc --version` 및 stderr를 사용자 리뷰 요청에 기록.
- [x] 최종 단계로 `CODE_REVIEW-cloud-G07.md` 구현 체크리스트를 완료한다.

## 사용자 리뷰 요청

_기본값은 `없음`이다. 구현 중 사용자 결정, 외부 환경 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없으면 아래 항목을 실제 내용으로 교체하고, 구현을 중단한 뒤 active 파일을 그대로 둔 채 리뷰를 요청한다. code-review가 이 내용을 검증해 `USER_REVIEW.md`를 작성한다._

- 상태: 리뷰 요청
- 사유 유형: 외부 환경 불일치 (codegen tool 버전)
- 결정 필요: `bin/contracts-check`를 이 검증 환경에서 통과시키려면 `protoc` 버전을 committed 산출물 생성 버전(`v5.29.3`)에 맞춰야 한다. (A) `protoc v5.29.3`을 갖춘 환경에서 `bin/contracts-check`를 재실행할지, 아니면 (B) committed 산출물을 현 환경의 `protoc v3.21.12` 기준으로 재생성·커밋해 버전 기준선을 낮출지 사용자/환경 소유자가 결정해야 한다. plan-0 변경은 proto/generated 파일을 수정하지 않았으므로 어느 쪽도 이번 코드 변경 범위가 아니다.
- 차단 근거:
  - `command -v protoc` → `/usr/bin/protoc`
  - `protoc --version` → `libprotoc 3.21.12`
  - committed 산출물 헤더는 `protoc v5.29.3`로 생성됨. `bin/contracts-check`는 재생성 결과와 committed 산출물을 diff하며, 유일한 차이는 3개 `.pb.go`의 `// protoc v5.29.3` → `v3.21.12` 주석 1줄뿐(의미 변화 없음)이라 drift로 exit 1.
- 실행한 검증/명령:
  - `go test ./services/api/...` → exit 0 (PASS, 위 출력 참고)
  - `bin/contracts-check` → exit 1 (FAIL, protoc 버전 주석 drift만, 위 stderr 참고)
- 재개 조건: `protoc v5.29.3`(committed 기준) 환경에서 `bin/contracts-check`가 exit 0이 되거나, 사용자가 현 환경 protoc 기준으로 산출물 재생성/기준선 변경을 승인하면 재개한다.

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

- 이전 Required 이슈가 검증 출력 부재였는지 확인한다.
- `go test ./services/api/...`와 `bin/contracts-check`의 실제 stdout/stderr가 현재 변경 내용과 일치하는지 확인한다.
- 환경/tool 부재가 주장되면 실제 stderr 또는 `command -v` 근거가 있는지 확인한다.
- 코드 수정이 있었다면 이전 계획 범위를 넘지 않았는지 확인한다.

## 코드 리뷰어 소유 섹션
- 리뷰 상태: 완료
- 주요 발견사항: API registry/parser map 소스 자체의 새 결함은 확인하지 못했다. 다만 필수 검증 `bin/contracts-check`가 codegen tool 버전 차이로 exit 1이며, committed generated header는 `protoc v5.29.3`, 검증 환경은 `protoc v3.21.12`라 환경/기준선 결정 없이는 PASS 처리할 수 없다.
- 테스트/검증 평가: `go test ./services/api/...`는 원격 출력 기준 PASS다. `bin/contracts-check`는 `bin/contracts-check:22`가 `bin/contracts-gen`을 실행한 뒤 `diff -ru`로 산출물 drift를 판정하는데, recorded stderr상 3개 Go generated 파일의 `protoc` 버전 주석 drift로 FAIL했다.
- 판정: FAIL

## 코드리뷰 결과

- 종합 판정: FAIL
- 차원별 평가:
  - correctness: Pass
  - completeness: Fail
  - test coverage: Pass
  - API contract: Fail
  - code quality: Pass
  - plan deviation: Pass
  - verification trust: Pass
- 발견된 문제:
  - Required: `agent-task/m-api-centered-proto-socket-rail/01_contracts_api_registry/CODE_REVIEW-cloud-G07.md:16`의 `bin/contracts-check`가 exit 1이다. 기록된 stderr와 `packages/contracts/gen/go/alt/v1/backtest.pb.go:4` 기준으로 committed generated output은 `protoc v5.29.3` 산출물이고, 검증 환경은 `protoc v3.21.12`라 `bin/contracts-check:26`의 byte diff 검사가 실패한다. `protoc v5.29.3` 환경에서 재검증하거나, 사용자가 현 `protoc v3.21.12` 기준으로 generated output 기준선을 낮추는 변경을 승인해야 한다.
- 다음 단계: USER_REVIEW. 구현 소유 섹션의 사용자 리뷰 요청은 실제 command/version/stderr 근거가 있으며, repo-local 코드 수정만으로 어떤 codegen 기준선을 채택할지 결정할 수 없다.

## 코드리뷰 전용 체크리스트

- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다.
- [x] active `CODE_REVIEW-*-G??.md`를 `code_review_cloud_G07_1.log`로 아카이브한다.
- [x] active `PLAN-*-G??.md`를 `plan_cloud_G07_1.log`로 아카이브한다.
- [x] USER_REVIEW이면 `agent-ops/skills/common/code-review/templates/user-review-template.md` 기준으로 `USER_REVIEW.md`를 작성하고 active `PLAN-*.md`, `CODE_REVIEW-*.md`, `complete.log`를 남기지 않는다.
