<!-- task=m-api-centered-proto-socket-rail/05+02_market_rail plan=0 tag=MARKET -->
# CODE_REVIEW-cloud-G07: Market Data API to Worker Proto-Socket Rail

## 구현 에이전트 소유 섹션
- 구현 요약: `ListInstruments`/`ListBars` API handlers를 session registry에 등록하고 `WorkerClient`를 통해 worker proto-socket으로 중계했다. worker socket에는 market query handlers, store-backed `Deps`, instrument/bar domain-to-proto mapping, market validation/error mapping을 추가했다. market responses에는 typed error 전달용 `ErrorInfo`를 additive로 추가했고 generated Go/Dart contracts를 갱신했다. 별도 market data freshness/status schema는 현재 store metadata가 없어 추가하지 않고, status 의미는 `Hello`/worker availability와 typed unavailable response로 한정했다.
- 변경 파일: `packages/contracts/proto/alt/v1/market.proto`, `packages/contracts/gen/go/alt/v1/market.pb.go`, `apps/client/lib/src/generated/alt/v1/market.pb.dart`, `apps/client/lib/src/generated/alt/v1/market.pbjson.dart`, `services/api/internal/socket/handlers.go`, `services/api/internal/socket/market.go`, `services/api/internal/socket/market_test.go`, `services/api/internal/socket/backtest_test.go`, `services/api/internal/workerclient/client.go`, `services/api/internal/workerclient/client_test.go`, `services/worker/cmd/alt-worker/main.go`, `services/worker/internal/socket/handlers.go`, `services/worker/internal/socket/server.go`, `services/worker/internal/socket/backtest.go`, `services/worker/internal/socket/backtest_mapping.go`, `services/worker/internal/socket/market.go`, `services/worker/internal/socket/market_mapping.go`, `services/worker/internal/socket/market_test.go`, `services/worker/internal/socket/market_mapping_test.go`, `services/worker/internal/storage/ports.go`, `services/worker/internal/storage/postgres/store.go`
- 실행한 검증/명령: 원격 code-server 컨테이너에서 `go test -count=1 ./services/api/...` PASS, `go test -count=1 ./services/worker/...` PASS, `bin/contracts-check` PASS, `go test -count=1 ./packages/contracts/gen/go/...` PASS, `cd apps/client && flutter test` PASS, `bin/lint` exit 0 (`apps/client`의 기존 `avoid_print` info 13건 표시)
- 남은 위험/후속 작업: market data freshness/ingestion status는 현재 저장소 계약에 근거 데이터가 없어 별도 schema로 만들지 않았다. 추후 import freshness metadata가 생기면 additive market status request/response를 별도 task로 추가한다.

## 사용자 리뷰 요청

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

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

## 코드 리뷰어 소유 섹션
- 리뷰 상태: 미작성
- 주요 발견사항: 미작성
- 테스트/검증 평가: 미작성
- 판정: 미작성

## 코드리뷰 결과

- 종합 판정: FAIL
- 차원별 평가:
  - correctness: Pass
  - completeness: Fail
  - test coverage: Warn
  - API contract: Pass
  - code quality: Pass
  - plan deviation: Warn
  - verification trust: Fail
- 발견된 문제:
  - Required: `agent-task/m-api-centered-proto-socket-rail/05+02_market_rail/code_review_cloud_G07_0.log:1` 이전 active review 산출물이 code-review 계약의 `구현 항목별 완료 여부`, 계획과 동일한 `구현 체크리스트`, 마지막 `CODE_REVIEW-*-G??.md` 작성 체크 항목을 포함하지 않는다. 다음 루프에서 현재 템플릿 구조로 review stub을 채우고, 계획의 MARKET-1/2/3 체크리스트 항목과 구현 완료 여부를 같은 텍스트/순서로 표시해야 한다.
  - Required: `agent-task/m-api-centered-proto-socket-rail/05+02_market_rail/code_review_cloud_G07_0.log:7` 검증 명령은 PASS라고 요약되어 있지만 실제 stdout/stderr가 붙어 있지 않아 `go test -count=1 ./services/api/...`, `go test -count=1 ./services/worker/...`, `bin/contracts-check`, `go test -count=1 ./packages/contracts/gen/go/...`, `cd apps/client && flutter test`, `bin/lint` 결과를 신뢰할 수 없다. 다음 루프에서 원격 검증 환경에서 동일 명령을 재실행하고 실제 출력 전체 또는 실패/차단 출력을 `검증 결과`에 기록해야 한다.
- 다음 단계: WARN/FAIL 후속 루프로 `PLAN-cloud-G07.md`와 `CODE_REVIEW-cloud-G07.md`를 새로 작성한다. USER_REVIEW gate는 트리거하지 않는다.

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

- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다.
- [x] active `CODE_REVIEW-cloud-G07.md`를 `code_review_cloud_G07_0.log`로 아카이브한다.
- [x] active `PLAN-cloud-G07.md`를 `plan_cloud_G07_0.log`로 아카이브한다.
- [x] `.gitignore`의 Agent-Ops 관리 block이 `agent-task/**/*.md`와 `agent-task/**/*.log`를 unignore하여 plan/review/archive 산출물이 추적 가능한지 확인한다.
- [x] FAIL이고 user-review gate가 트리거되지 않았으므로 다음 active `PLAN-cloud-G07.md`와 `CODE_REVIEW-cloud-G07.md`를 작성하고 `complete.log`를 작성하지 않는다.
