<!-- task=m-api-centered-proto-socket-rail/02+01_worker_socket_rail plan=2 tag=REVIEW_REVIEW_WORKER -->
# PLAN-cloud-G08: Worker Go Module Direct Dependency Fix

## 이 파일을 읽는 구현 에이전트에게
이 계획은 `REVIEW_WORKER` 리뷰에서 남은 worker module manifest 이슈만 고친다. 구현 후 `CODE_REVIEW-cloud-G08.md`의 구현 에이전트 소유 섹션과 `검증 결과`에 실제 stdout/stderr를 붙이고 active 파일을 그대로 둔 채 리뷰를 요청한다. finalization, log rename, `complete.log`, task archive는 code-review 전용이다. 사용자만 결정할 수 있는 범위 충돌이나 외부 환경 준비가 필요하면 review stub의 `사용자 리뷰 요청`을 증거와 함께 채우고 멈춘다. 검증 증거 공백은 사용자 리뷰 요청이 아니며, 가능한 후속 agent가 명령을 재실행해 채워야 한다.

## 배경
이전 보완으로 `WorkerClient.Hello` context handling과 worker socket registry tests는 채워졌다. 다만 `services/worker/internal/contracts/parser_map.go`와 test가 `google.golang.org/protobuf/proto`를 직접 import하는데, `services/worker/go.mod`에는 `google.golang.org/protobuf`가 아직 indirect dependency로 남아 있다. worker service module의 manifest를 direct import 구조에 맞게 정리해야 한다.

## 사용자 리뷰 요청 흐름
구현 중 사용자 결정, 사용자 소유 외부 환경/secret/서비스 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없을 때만 `CODE_REVIEW-cloud-G08.md`의 `사용자 리뷰 요청` 섹션을 채운다. code-review가 그 요청을 검증하고 필요할 때만 `USER_REVIEW.md`를 작성한다.

## 분석 결과

### 읽은 파일
- `agent-task/m-api-centered-proto-socket-rail/02+01_worker_socket_rail/plan_cloud_G08_1.log`
- `agent-task/m-api-centered-proto-socket-rail/02+01_worker_socket_rail/code_review_cloud_G08_1.log`
- `services/worker/go.mod`
- `services/worker/internal/contracts/parser_map.go`
- `services/worker/internal/contracts/parser_map_test.go`
- `services/worker/internal/socket/server.go`
- `services/worker/internal/socket/server_test.go`
- `services/api/internal/workerclient/client.go`
- `services/api/internal/workerclient/client_test.go`

### 테스트 커버리지 공백
- manifest direct/indirect placement is not covered by unit tests.
- deterministic `rg` output is enough for this manifest-only follow-up.

### 심볼 참조
- renamed/removed symbol: 없음.
- direct protobuf imports: `services/worker/internal/contracts/parser_map.go:4`, `services/worker/internal/contracts/parser_map_test.go:6`.

### 분할 판단
split decision policy를 확인했다. 남은 작업은 단일 `go.mod` manifest 정리와 검증 기록뿐이라 새 subtask로 나누지 않고 같은 task directory의 follow-up plan으로 처리한다.

### 범위 결정 근거
- 코드 동작, socket handlers, workerclient tests는 이전 리뷰에서 통과로 판단했으므로 수정하지 않는다.
- `services/api/go.mod`는 이번 worker module manifest 이슈의 범위 밖이다.
- `go.sum`은 manifest 정리 과정에서 필요한 변화가 생긴 경우에만 함께 반영한다.

### 빌드 등급
- Build lane: `cloud-G08`
- Review lane: `cloud-G08`
- 근거: 이전 cloud-G08 follow-up의 Required completion issue이며, verification trust를 유지해야 한다.

## 구현 체크리스트
- [ ] [REVIEW_REVIEW_WORKER-1] `google.golang.org/protobuf`를 `services/worker/go.mod` direct require block으로 이동하고 indirect entry를 제거한다.
- [ ] [REVIEW_REVIEW_WORKER-2] worker module manifest 검증과 필수 worker/API smoke 검증의 실제 stdout/stderr를 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_REVIEW_WORKER-1] worker protobuf direct dependency 정리
문제:
`services/worker/go.mod:57`은 `google.golang.org/protobuf v1.34.2 // indirect`로 남아 있다. 하지만 worker contracts parser code가 `google.golang.org/protobuf/proto`를 직접 import한다.

해결 방법:
`services/worker/go.mod`의 첫 require block에 `google.golang.org/protobuf`를 direct dependency로 둔다. 가능하면 API module과 맞춰 `v1.36.5`를 사용하고, indirect block의 기존 protobuf line은 제거한다. `go mod tidy` 또는 동등한 manifest 정리 명령을 사용했다면 실행 명령과 결과를 review stub에 남긴다.

수정 파일 및 체크리스트:
- `services/worker/go.mod`
  - [ ] first require block에 `google.golang.org/protobuf` direct entry가 있다.
  - [ ] indirect block에 `google.golang.org/protobuf ... // indirect`가 남지 않는다.
- `services/worker/go.sum`
  - [ ] checksum 변화가 필요하면 함께 반영한다.

테스트 작성:
- 별도 unit test는 작성하지 않는다. manifest-only fix이며 deterministic search와 existing worker/API tests로 검증한다.

중간 검증:
- `rg --sort path -n 'google.golang.org/protobuf' services/worker/go.mod` 실행. 기대 결과: direct require entry 1개만 출력되고 `// indirect`는 출력되지 않는다.

### [REVIEW_REVIEW_WORKER-2] 검증 증거 기록
문제:
이 follow-up은 manifest placement가 핵심이므로 review stub에 실제 검증 출력이 남아야 한다.

해결 방법:
허용된 검증 환경에서 아래 명령을 실행하고 실제 stdout/stderr를 `CODE_REVIEW-cloud-G08.md`에 붙인다. 로컬에서는 `agent-test/local/rules.md`의 로컬 테스트 금지 규칙을 지킨다.

수정 파일 및 체크리스트:
- `agent-task/m-api-centered-proto-socket-rail/02+01_worker_socket_rail/CODE_REVIEW-cloud-G08.md`
  - [ ] 중간 검증 출력이 실제 command block으로 들어간다.
  - [ ] 최종 검증 출력이 요약이 아닌 실제 stdout/stderr로 들어간다.

테스트 작성:
- 테스트 파일 추가가 아니라 evidence recovery 작업이다.

중간 검증:
- `rg --sort path -n 'google.golang.org/protobuf|go test -count=1 ./services/worker|go test -count=1 ./services/api|bin/contracts-check' agent-task/m-api-centered-proto-socket-rail/02+01_worker_socket_rail/CODE_REVIEW-cloud-G08.md` 실행. 기대 결과: review stub에 manifest check와 최종 검증 command block이 남아 있다.

## 수정 파일 요약
| 파일 | 항목 |
|------|------|
| `services/worker/go.mod` | REVIEW_REVIEW_WORKER-1 |
| `services/worker/go.sum` | REVIEW_REVIEW_WORKER-1 |
| `agent-task/m-api-centered-proto-socket-rail/02+01_worker_socket_rail/CODE_REVIEW-cloud-G08.md` | REVIEW_REVIEW_WORKER-2 |

## 최종 검증
- 원격 검증 환경에서만 `go test -count=1 ./services/worker/...`
- 원격 검증 환경에서만 `go test -count=1 ./services/api/...`
- 원격 검증 환경에서만 `bin/contracts-check`
- 로컬에서는 `agent-test/local/rules.md`의 "현재 로컬에서의 테스트는 절대 금지" 규칙 때문에 위 테스트/검증 명령을 실행하지 않는다.
모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
