# User Review Required - m-api-centered-proto-socket-rail/01_contracts_api_registry

## 요청 일시

2026-05-30

## 상태

USER_REVIEW

## 사유

- 유형: environment-blocked
- 현재 리뷰 회차: 2
- 최종 판정: FAIL
- 요약: API 코드 검증인 `go test ./services/api/...`는 통과했지만, 필수 계약 검증 `bin/contracts-check`가 검증 환경의 `protoc v3.21.12`와 committed generated output의 `protoc v5.29.3` 기준선 차이로 실패했다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | FAIL | 필수 원격 검증 출력 부재 |
| `plan_cloud_G07_1.log` | `code_review_cloud_G07_1.log` | FAIL | `go test ./services/api/...` PASS, `bin/contracts-check`는 `protoc` 버전 주석 drift로 FAIL |

## 차단 근거

- 문제: `bin/contracts-check`가 generated output drift를 발견해 exit 1로 종료했다.
- 현재 archive plan: `plan_cloud_G07_1.log`
- 현재 archive review: `code_review_cloud_G07_1.log`
- 검증 명령: `go test ./services/api/...`; `bin/contracts-check`
- 실제 출력: `go test ./services/api/...`는 API packages PASS. `bin/contracts-check` stderr는 `packages/contracts/gen/go/alt/v1/{backtest,common,market}.pb.go`의 `// protoc v5.29.3` 헤더가 재생성 시 `// protoc v3.21.12`로 바뀌는 drift를 보고했다.
- 차단 판단 근거: `bin/contracts-check`는 `bin/contracts-check:22`에서 `bin/contracts-gen`을 실행하고 `bin/contracts-check:26`에서 committed generated output과 byte diff를 비교한다. 이번 drift는 schema/API 코드 변경이 아니라 codegen tool 기준선 선택 문제라, `protoc v5.29.3` 검증 환경을 준비할지 현 환경 기준으로 generated output을 갱신할지 결정이 필요하다.

## 사용자 결정 필요

- [ ] 자동 follow-up plan/review를 계속 진행한다.
- [ ] 계획을 재작성한다.
- [ ] 테스트 환경, secret, 외부 서비스, SDK, 장비 조건을 준비한 뒤 재시도한다.
- [ ] 작업 범위를 줄이거나 보류/폐기한다.

## 재개 조건

- `protoc v5.29.3` 기준 환경에서 `bin/contracts-check`를 재실행해 exit 0 stdout/stderr를 제공한다.
- 또는 현 검증 환경의 `protoc v3.21.12` 기준으로 generated output을 재생성/커밋하는 범위 변경을 승인한다.
- 또는 이 task에서는 `go test ./services/api/...` PASS와 header-only drift를 근거로 계약 검증 실패를 환경 예외로 받아들이겠다고 명시한다.

## 다음 실행 힌트

- `protoc v5.29.3` 환경이 준비되면 `bin/contracts-check`를 먼저 재실행하고 결과를 이 stop state에 붙여 해소를 요청한다.
- generated 기준선을 바꾸기로 하면 plan 루프가 이 `USER_REVIEW.md`를 `user_review_0.log`로 아카이브한 뒤 codegen output 갱신용 새 `PLAN-*-G??.md` / `CODE_REVIEW-*-G??.md`를 작성한다.

## 종료 규칙

- 사용자가 이 stop state를 완료/PASS로 해소하면 `USER_REVIEW.md`를 해소 상태로 갱신하고, `agent-ops/skills/common/code-review/templates/complete-log-template.md` 기준 `complete.log`를 작성한 뒤 task directory를 archive로 이동한다.
- 새 구현이 필요하면 `plan` 스킬이 `USER_REVIEW.md`를 `user_review_N.log`로 아카이브한 뒤 새 `PLAN-*-G??.md` / `CODE_REVIEW-*-G??.md`를 작성한다.
