<!-- task=m-api-centered-proto-socket-rail/01_contracts_api_registry plan=0 tag=API -->
# CODE_REVIEW-cloud-G07: Contracts and API Handler Registry Foundation

## 구현 에이전트 소유 섹션
- 구현 요약:
  - [API-1] API socket handler 등록을 registry 구조로 분리했다. `services/api/internal/socket/handlers.go`에 `sessionHandler` 단위와 `sessionHandlers()` 목록, `registerHandlers`(nil registrar skip 포함)를 두고, 기존 hello handler는 `helloHandler()`/`handleHello`로 옮겨 같은 registry 경유로 등록한다. `server.go`의 인라인 hello 등록과 `altv1` import를 제거했다. 기존 hello request-response 동작과 `serverName/serverVersion/defaultAltProtocolVersion` 상수는 그대로 유지한다.
  - [API-2] `parser_map.go`를 단일 `messageFactories()` 목록 기반으로 재구성해 request/response 페어가 한 곳에서 관리되도록 했다(등록 누락 drift 방지). parser map 동작과 등록 메시지 집합은 동일하다.
  - [API-3] 별도 core server를 만들지 않았고 naming은 api hub / control plane 기준을 유지했다. `services/api`, `packages/contracts/proto`에 `core server` 명명이 없음을 grep으로 확인했다. milestone/domain rule 문구는 이미 정렬돼 있어 문서 변경은 없다.
- 변경 파일:
  - `services/api/internal/socket/handlers.go` (신규: handler registry)
  - `services/api/internal/socket/server.go` (인라인 hello 제거, import 정리)
  - `services/api/internal/socket/server_test.go` (registry 단위 테스트 추가)
  - `services/api/internal/contracts/parser_map.go` (factory 목록 기반 재구성)
  - `services/api/internal/contracts/parser_map_test.go` (독립 required 목록 + missing parser 탐지 테스트)
- 실행한 검증/명령:
  - 로컬 테스트는 `agent-test/local/rules.md`에 따라 금지되어 실행하지 않았다. 정적 검증은 IDE gopls diagnostics(편집 후 오류 없음)로만 확인했다.
  - 원격 검증 환경에서 실행 필요: `go test ./services/api/...`, `bin/contracts-check`.
- 남은 위험/후속 작업:
  - market `status` 조회 request/response 메시지는 현재 contracts에 없어 parser/handler에 포함하지 않았다. 추가하려면 proto additive schema + Go/Dart codegen이 필요하므로 이 기반 단계가 아닌 `05+02_market_rail`(market-rail epic)에서 codegen 계획과 함께 다룬다. 현재 단계는 instruments/bars 및 전체 backtest 메시지 coverage로 한정한다.
  - multi-handler request-response 왕복 통합 테스트는 두 번째 실제 handler가 생기는 후속 작업(backtest/market rail)에서 추가한다. 현재는 registry 단위 테스트(유니크 type, required coverage, nil skip)와 기존 hello 왕복 테스트로 검증한다.
  - 위 두 원격 명령이 미실행 상태이므로 최종 통과 여부는 원격 검증에서 확정해야 한다.

## 사용자 리뷰 요청

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

- 상태: 없음
- 사유 유형: 없음
- 결정 필요: 없음
- 차단 근거: 없음
- 실행한 검증/명령: 없음
- 재개 조건: 없음

## 코드 리뷰어 소유 섹션
- 리뷰 상태: 완료
- 주요 발견사항: 소스 정적 대조상 즉시 수정해야 할 코드 결함은 확인하지 못했지만, 계획의 필수 검증이 실행되지 않았다.
- 테스트/검증 평가: `agent-test/local/rules.md`가 로컬 테스트/검증을 금지하므로 `go test ./services/api/...`와 `bin/contracts-check`를 대신 실행하지 않았다. 원격 검증 출력이 없어 최종 통과 여부를 확정할 수 없다.
- 판정: FAIL

## 코드리뷰 결과

- 종합 판정: FAIL
- 차원별 평가:
  - correctness: Pass
  - completeness: Fail
  - test coverage: Fail
  - API contract: Pass
  - code quality: Pass
  - plan deviation: Pass
  - verification trust: Fail
- 발견된 문제:
  - Required: `agent-task/m-api-centered-proto-socket-rail/01_contracts_api_registry/plan_cloud_G07_0.log:129`의 최종 검증(`go test ./services/api/...`, `bin/contracts-check`)이 실행되지 않았고, 이 review log의 `실행한 검증/명령`에도 원격 실행 필요 상태로 남아 있다. 원격 검증 환경에서 두 명령의 실제 stdout/stderr를 확보한 뒤 리뷰 루프를 재개해야 한다.
- 다음 단계: FAIL follow-up. 첫 리뷰에서 외부 환경 실패 stdout/stderr가 확인된 것이 아니라 필수 원격 검증 출력이 누락된 상태이므로, 새 active plan/review에서 실제 검증 출력 확보와 필요 시 좁은 수정만 진행한다.
