<!-- task=m-agent-message-protocol/01_proto_contract plan=1 tag=REVIEW_API -->

# Plan - REVIEW_API

## 이 파일을 읽는 구현 에이전트에게

`CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채우는 것이 구현의 마지막 필수 단계다. 구현 후 검증을 실행하고 실제 내용과 출력을 리뷰 파일에 남긴 뒤 active 파일을 그대로 둔 채 리뷰 준비를 보고한다. 사용자만 결정할 수 있는 범위 변경, 사용자 소유 외부 환경/secret, 또는 scope conflict가 있으면 리뷰 파일의 `사용자 리뷰 요청`에 근거를 채우고 멈춘다. 구현 중 사용자에게 직접 질문하거나 선택지를 제시하거나 `request_user_input`을 호출하지 않는다. 후속 에이전트가 명령 재실행이나 산출물 수집으로 해소할 수 있는 증거 공백은 사용자 리뷰 요청이 아니다.

## 배경

이 follow-up은 `code_review_cloud_G05_0.log`의 FAIL 판정을 해결한다. Proto schema, generated Go/Dart code, Dart JSON fallback, 테스트 구현은 검증 명령에서 통과했다. 남은 Required 이슈는 구현 계획에 없던 로드맵 문서 변경이 같은 diff에 섞인 점이다.

## 사용자 리뷰 요청 흐름

구현 중 사용자 결정이 필요한 차단은 active review stub의 `사용자 리뷰 요청` 섹션에 `agent-ops/skills/common/_templates/implementation-user-review-request-section.md` 형식으로 기록한다. 직접 사용자 프롬프트는 금지이며, code-review가 요청의 타당성을 검증하고 실제 `USER_REVIEW.md` 작성을 소유한다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/message-based-build-agent/milestones/agent-message-protocol.md`
- Task ids:
  - `message-fields`: 각 메시지의 최소 필드와 실패 응답 형식이 정의되어 있다.
- Completion mode: check-on-pass

## 분석 결과

### 선행 리뷰

- Archived plan: `agent-task/m-agent-message-protocol/01_proto_contract/plan_cloud_G05_0.log`
- Archived review: `agent-task/m-agent-message-protocol/01_proto_contract/code_review_cloud_G05_0.log`
- Verdict: FAIL
- Required issue: 계획에 없던 `agent-roadmap/phase/message-based-build-agent/milestones/agent-message-protocol.md` 변경이 포함되어 있고, `m-*` task의 roadmap completion은 PASS 이후 runtime/update-roadmap 경로가 처리해야 한다.

### 범위 결정 근거

- 포함: `agent-roadmap/phase/message-based-build-agent/milestones/agent-message-protocol.md`에서 이번 구현 diff가 추가한 계획 밖 변경 제거.
- 제외: `proto/oto/runner.proto`, generated protobuf, Dart client, Dart tests, Go generated code의 기능 변경. 선행 리뷰에서 해당 변경은 통과했고 이번 follow-up은 그것들을 수정하지 않는다.
- 제외: 로드맵 Task 완료 처리 또는 새 로드맵 컨텍스트 작성. 필요하면 PASS 완료 이벤트 이후 runtime/update-roadmap 경로가 처리한다.

### 빌드 등급

- build lane/grade: `cloud-G05`. 기존 protocol/schema task의 후속 루프이며, 변경 범위는 좁지만 같은 active task에서 완료 판정을 이어간다.

## 구현 체크리스트

- [ ] `agent-roadmap/phase/message-based-build-agent/milestones/agent-message-protocol.md`에서 구현 계획 밖으로 추가된 checklist 완료 표시와 컨텍스트 문단을 제거하고, proto/code/test 변경은 그대로 둔다.
- [ ] 최종 검증 명령을 실행하고 실제 stdout/stderr를 review stub에 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_API-1] 계획 밖 로드맵 변경 정리

#### 문제

`code_review_cloud_G05_0.log`는 이번 구현이 `agent-roadmap/phase/message-based-build-agent/milestones/agent-message-protocol.md`의 `message-list`, `domain-boundary`를 직접 완료 처리하고, 새 로드맵 컨텍스트 문단을 추가한 점을 Required 이슈로 기록했다. 이 task의 목표는 `message-fields` proto 계약 구현이며, 로드맵 완료 갱신은 PASS 이후 runtime/update-roadmap 경로가 처리해야 한다.

#### 해결 방법

`agent-roadmap/phase/message-based-build-agent/milestones/agent-message-protocol.md`에서 아래 구현 산출물만 제거한다.

- `message-list`, `domain-boundary` checklist를 구현 전 상태인 unchecked로 되돌린다.
- `작업 컨텍스트`에 추가된 `기본 메시지 방향성(2026-06-06)`, `제품 경계(2026-06-06)`, `기존 CLI 경계(2026-06-06)` 문단을 제거한다.
- `message-fields` Roadmap Target 자체는 이번 code-review PASS 이후 completion event가 처리할 대상이므로 수동으로 체크하지 않는다.

#### 수정 파일 및 체크리스트

- [ ] `agent-roadmap/phase/message-based-build-agent/milestones/agent-message-protocol.md`: 계획 밖 로드맵 변경 제거.

#### 테스트 작성

테스트 추가 없음. production code 변경이 아니라 review artifact 정리다.

#### 중간 검증

```bash
git diff -- agent-roadmap/phase/message-based-build-agent/milestones/agent-message-protocol.md
```

기대 결과: 이 follow-up 이후 해당 로드맵 파일 diff가 비어 있거나, 사용자 소유 변경이 있다면 이번 구현 산출물과 분리되어 review stub에 사유가 기록되어 있다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `agent-roadmap/phase/message-based-build-agent/milestones/agent-message-protocol.md` | REVIEW_API-1 |

## 최종 검증

```bash
git diff --check
make proto
cd apps/runner && dart analyze
cd apps/runner && dart test test/oto_agent_migration_plan_test.dart test/oto_agent_bootstrap_script_test.dart test/oto_agent_cli_test.dart test/oto_agent_config_test.dart test/oto_agent_registration_test.dart test/oto_server_connection_smoke_test.dart
cd services/core && go test ./...
git diff --name-only
```

기대 결과: whitespace error가 없고, proto generation이 추가 diff를 만들지 않으며, Dart analyzer/test와 Go test가 통과한다. `git diff --name-only`의 tracked diff에는 원래 계획된 proto/code/test 파일만 남고, 로드맵 파일은 남지 않는다. 모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다.
