# User Review Required - m-control-plane-separation-migration/04+02_bootstrap_command

## 요청 일시

2026-06-05

## 상태

USER_REVIEW

## 사유

- 유형: environment-blocked
- 현재 리뷰 회차: 3
- 최종 판정: FAIL
- 요약: server-issued bootstrap command smoke는 강화되었지만, 최종 검증 계약에 포함된 legacy `oto_iop_connection_smoke_test.dart`가 sibling `iop` 저장소의 Go compile error로 실패한다. 또한 `dart analyze`가 새 smoke test에서 info 2건을 보고해 repo-local cleanup도 필요하다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `agent-task/m-control-plane-separation-migration/04+02_bootstrap_command/plan_cloud_G07_0.log` | `agent-task/m-control-plane-separation-migration/04+02_bootstrap_command/code_review_cloud_G07_0.log` | FAIL | server-issued command가 HTTP release URL을 발급하고 shell-safe escaping이 없었다. |
| `agent-task/m-control-plane-separation-migration/04+02_bootstrap_command/plan_cloud_G07_1.log` | `agent-task/m-control-plane-separation-migration/04+02_bootstrap_command/code_review_cloud_G07_1.log` | FAIL | endpoint smoke가 script 성공 경로를 검증하지 않았고, legacy iop smoke 제외 근거가 없었다. |
| `agent-task/m-control-plane-separation-migration/04+02_bootstrap_command/plan_cloud_G07_2.log` | `agent-task/m-control-plane-separation-migration/04+02_bootstrap_command/code_review_cloud_G07_2.log` | FAIL | iop sibling repo compile error가 외부 차단으로 확인되었고, analyzer info 2건이 남았다. |

## 차단 근거

- 문제: `cd apps/runner && dart test test/oto_iop_connection_smoke_test.dart`가 sibling `../../../iop`의 Go compile error로 실패한다.
- 현재 archive plan: `agent-task/m-control-plane-separation-migration/04+02_bootstrap_command/plan_cloud_G07_2.log`
- 현재 archive review: `agent-task/m-control-plane-separation-migration/04+02_bootstrap_command/code_review_cloud_G07_2.log`
- 검증 명령: `cd apps/runner && dart test test/oto_iop_connection_smoke_test.dart`
- 실제 출력: `iop/apps/edge/internal/transport/server.go`에서 `undefined: config.AgentKindOTOAgent`, `iop/apps/edge/internal/service/service.go:15:2`에서 unused import가 발생해 iop Edge가 listening 전에 종료했다.
- 차단 판단 근거: 실패하는 코드는 현재 OTO 저장소가 아니라 sibling `iop` 저장소 내부에 있으며, 이 작업의 자동 후속 루프가 외부 저장소 컴파일 오류를 임의 수정하거나 legacy iop smoke 제외를 승인할 수 없다.

## 사용자 결정 필요

- [ ] 자동 follow-up plan/review를 계속 진행한다.
- [ ] 계획을 재작성한다.
- [ ] 테스트 환경, secret, 외부 서비스, SDK, 장비 조건을 준비한 뒤 재시도한다.
- [ ] 작업 범위를 줄이거나 보류/폐기한다.

## 사용자 결정

- 2026-06-05: iop는 별도 OTO 제거 작업 중이며, 이 OTO 독립 마이그레이션 작업에서 고려할 항목이 아니다. legacy `test/oto_iop_connection_smoke_test.dart`는 현재 task의 최종 검증 대상에서 제외한다.

## 재개 조건

- sibling `iop` 저장소의 compile error가 해소되어 `cd apps/runner && dart test test/oto_iop_connection_smoke_test.dart`가 실행 가능해진다.
- 또는 legacy iop smoke를 이 마이그레이션 task의 최종 검증 대상에서 제외하도록 테스트 규칙/계획 계약 변경이 사용자에게 승인된다.
- 재개 후 repo-local cleanup으로 `apps/runner/test/oto_server_connection_smoke_test.dart:203`의 unnecessary escape와 `:228`의 string concatenation analyzer info를 제거해야 한다.

## 다음 실행 힌트

- 외부 iop 문제를 고친 뒤 `cd apps/runner && dart test test/oto_iop_connection_smoke_test.dart`를 먼저 재실행한다.
- 제외 승인으로 진행한다면 `agent-test/local/agent-smoke.md`와 active plan의 최종 검증 계약을 갱신하는 새 plan을 만든다.
- 어떤 경로든 재개 구현에서는 `cd apps/runner && dart analyze`가 `No issues found!`를 출력하도록 smoke test cleanup도 포함한다.

## 종료 규칙

- 사용자가 이 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`를 작성한다.
