# Complete - m-control-plane-separation-migration/02+01_runner_registration

## 완료 일시

2026-06-05

## 요약

Runner registration 구현은 2회 리뷰 후 USER_REVIEW에서 legacy iop smoke 제외 승인을 받아 PASS/RESOLVED로 종료했다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G06_0.log` | `code_review_cloud_G06_0.log` | FAIL | 필수 iop smoke가 unconditional skip으로 우회되어 verification trust 실패 |
| `plan_cloud_G07_1.log` | `code_review_cloud_G07_1.log` | FAIL | skip은 제거됐지만 sibling `iop`의 `config.AgentKindOTOAgent` 컴파일 에러로 필수 smoke 실패 |
| `USER_REVIEW.md` | user decision | PASS/RESOLVED | 사용자가 legacy iop smoke를 이번 runner registration 완료 기준에서 제외하도록 승인 |

## 구현/정리 내용

- OTO Core에 `/api/v1/runners/register` handler와 in-memory runner registry를 추가했다.
- Dart runner 기본 등록 경로를 OTO Server HTTP registration으로 전환하고 runner id, alias, protocol version, capability, command catalog summary를 전송하게 했다.
- Agent config는 표준 `server:` section을 우선하고 legacy `edge:` fallback을 유지했다.
- Legacy iop smoke의 unconditional skip을 제거했고, 외부 sibling `iop` 컴파일 실패는 사용자 결정으로 이번 완료 기준에서 제외했다.

## 최종 검증

- `cd services/core && go test ./...` - PASS; `cmd/oto-core`, `internal/httpserver`, `internal/runnerregistry`, `oto` 패키지가 모두 통과 또는 no test files로 종료했다.
- `cd apps/runner && dart analyze` - PASS; `Analyzing runner... No issues found!`
- `cd apps/runner && ! rg --sort path "skip:" test/oto_iop_connection_smoke_test.dart` - PASS; skip marker가 없다.
- `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_iop_connection_smoke_test.dart` - BLOCKED/EXCLUDED by user decision; sibling `iop` repo에서 `config.AgentKindOTOAgent` 미정의 컴파일 에러가 발생해 legacy iop smoke를 이번 완료 기준에서 제외했다.

## Roadmap Completion

- Milestone: `agent-roadmap/phase/independent-control-plane/milestones/control-plane-separation-migration.md`
- Completed task ids:
  - `runner-register`: PASS; evidence=`plan_cloud_G07_1.log`, `code_review_cloud_G07_1.log`, `USER_REVIEW.md`; verification=`cd services/core && go test ./...`, `cd apps/runner && dart analyze`, `cd apps/runner && ! rg --sort path "skip:" test/oto_iop_connection_smoke_test.dart`, user-approved exclusion for legacy iop smoke
- Not completed task ids: 없음

## 잔여 Nit

- 없음

## 후속 작업

- sibling `iop` repo가 정상화되면 legacy iop smoke를 별도 migration evidence로 재실행할 수 있다.
