# User Review Resolved - m-control-plane-separation-migration/02+01_runner_registration

## 요청 일시

2026-06-05

## 상태

RESOLVED

## 사유

- 유형: implementation-blocked
- 현재 리뷰 회차: 2
- 최종 판정: PASS/RESOLVED
- 요약: G07 follow-up은 unconditional skip을 제거했고, 사용자가 legacy iop smoke를 이번 runner registration 완료 기준에서 제외하도록 승인해 자동 루프를 완료 처리한다.

## 루프 이력

| 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 실패 |

## 차단 근거

- 문제: `apps/runner/test/oto_iop_connection_smoke_test.dart`는 `../../../iop`에서 `go run ./apps/edge/cmd/edge serve --config <temp>`를 실행해야 하지만, 외부 sibling repo가 컴파일되지 않는다.
- 현재 archive plan: `plan_cloud_G07_1.log`
- 현재 archive review: `code_review_cloud_G07_1.log`
- 검증 명령: `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`
- 실제 출력: `iop Edge exited before listening (code 1)`; `apps/edge/internal/service/service.go:561:31: undefined: config.AgentKindOTOAgent`, `apps/edge/internal/service/service.go:613:31: undefined: config.AgentKindOTOAgent`, `apps/edge/internal/transport/server.go:166:32: undefined: config.AgentKindOTOAgent`, `apps/edge/internal/transport/server.go:197:31: undefined: config.AgentKindOTOAgent`, `apps/edge/internal/transport/server.go:218:31: undefined: config.AgentKindOTOAgent`
- 차단 판단 근거: 실패 원인은 OTO 프로젝트 내부 변경이 아니라 sibling `iop` 저장소의 진행 중인 OTO 제거 상태다. 현재 task 범위는 OTO repo의 runner registration이며 외부 repo 수정을 자동 follow-up으로 진행하면 범위를 넘는다.

## 사용자 결정 필요

- [x] legacy iop smoke를 이번 runner registration 완료 기준에서 제외하고, OTO Server registration 구현은 현재 증거로 완료 처리한다.
- [ ] sibling `iop` repo 빌드를 정상화한 뒤 같은 smoke 명령을 재시도한다.
- [ ] 작업 범위를 줄이거나 보류/폐기한다.

## 해소 결과

- 사용자 결정: "이번 runner registration은 iop smoke 제외하고 완료 처리해"
- 해소 판정: PASS/RESOLVED
- 충족된 항목: unconditional `skip` 제거, core Go tests 통과, Dart analyze 통과, OTO Server registration 단위/loopback 검증 통과, legacy iop smoke 제외 사용자 승인
- 남은 외부 상태: sibling `iop` repo의 `config.AgentKindOTOAgent` 컴파일 에러는 OTO runner registration 완료 기준에서 제외됐다.

## 재개 조건

- 사용자가 legacy iop smoke 제외를 승인해 USER_REVIEW를 PASS 해소하도록 결정한다.
- 또는 sibling `iop` repo에서 `go run ./apps/edge/cmd/edge serve --config <temp>`가 다시 컴파일 가능해진 뒤 agent-smoke 명령을 재실행한다.

## 다음 실행 힌트

- 재시도 명령: `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`
- 제외 승인 시: code-review USER_REVIEW resolution 흐름으로 `complete.log` 작성 및 task archive 이동을 수행한다.
- 새 구현이 필요하면 plan 스킬이 이 `USER_REVIEW.md`를 `user_review_N.log`로 아카이브하고 새 `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`를 작성한다.
