# Complete - m-control-plane-separation-migration/06+05_runner_dispatch_contract

## 완료 일시

2026-06-06

## 요약

runner job claim/report 계약 구현을 1회 리뷰 루프로 완료했다. 최종 판정은 PASS다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | PASS | proto/Go/Dart runner job 계약, Dart reporting client, Go runner-facing 상태 route, fake server 테스트와 필수 검증 완료 |

## 구현/정리 내용

- `proto/oto/runner.proto`에 job claim, execution report, log append, artifact report 메시지를 추가하고 Go/Dart protobuf 생성물을 갱신했다.
- Go Core에 runner-facing `/api/v1/runners/{runner_id}/jobs/claim`, execution report, log, artifact route를 추가해 `cicdstate.Store`의 job/execution/log/artifact 상태와 연결했다.
- Dart runner에 `OtoServerJobClient`를 추가하고 OTO Server session 및 `DefaultAgentRunner.runJobs` hook으로 주입 가능한 reporting 흐름을 마련했다.
- fake HTTP server 기반 Dart 테스트와 Go handler 테스트를 추가해 claim/report payload와 저장 상태 전이를 검증했다.

## 최종 검증

- `make proto` - PASS; Go/Dart protobuf 생성 성공.
- `cd services/core && go test -count=1 ./...` - PASS; core 전체 package 테스트 통과.
- `cd apps/runner && dart analyze` - PASS; `No issues found!`.
- `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` - PASS; `All tests passed!`.

## 잔여 Nit

- 없음

## 후속 작업

- 없음
