# Phase: 독립 Control Plane 기반 OTO

## 상태

[완료]

## 목표

OTO를 iop Edge에 직접 붙는 domain agent가 아니라, 독립 실행 가능한 경량 typed-command CI/CD runner와 선택적 OTO Control Plane을 가진 제품 구조로 전환한다.
현재 OTO CLI/runtime은 `apps/runner`로 옮기고, Flutter client와 Go core service를 분리해 OTO Server가 runner registry, bootstrap, job, log, artifact 상태를 소유하게 한다.

## Milestone 흐름

완료된 Milestone은 archive 경로를 가리키고, 검토중, 진행중, 계획, 스케치 또는 보류 Milestone은 이 Phase 하위 `milestones/` 경로를 가리킨다.
완료, 검토중, 진행중, 계획, 스케치 순서로 두어 아래로 갈수록 미래 작업에 가까워지게 정렬한다.
스케치 Milestone은 아직 구현 가능한 계획이 아니므로 계획 Milestone보다 아래에 둔다.

- [완료] 독립 Control Plane 분리 마이그레이션
  - 경로: `agent-roadmap/archive/phase/independent-control-plane/milestones/control-plane-separation-migration.md`
  - 요약: iop에 구현된 OTO 등록/heartbeat/bootstrap 구조를 OTO 전용 Server/Runner 계약으로 이관하고, repo를 `apps/runner`, `apps/client`, `services/core` monorepo로 전환한다.
- [완료] 워크스페이스 포트/환경 표준화
  - 경로: `agent-roadmap/archive/phase/independent-control-plane/milestones/workspace-port-env-standardization.md`
  - 요약: OTO Core, Flutter client, runner/local test, bootstrap/release URL 포트를 workspace 공통 대역과 독립 Control Plane 기준으로 정리한다.
- [완료] agent-ops 규칙 모노레포 정합화
  - 경로: `agent-roadmap/archive/phase/independent-control-plane/milestones/ops-rule-monorepo-alignment.md`
  - 요약: 프로젝트 규칙과 domain rule을 현재 `apps/runner`, `apps/client`, `services/core`, `packages/flutter/oto_console` 구조에 맞게 최신화한다.
- [완료] runner 출력 경계 분리
  - 경로: `agent-roadmap/archive/phase/independent-control-plane/milestones/runner-output-boundary.md`
  - 요약: pipeline/core 실행 로직의 CLI 출력 직접 의존을 output/progress port와 adapter 구조로 분리한다.
- [완료] oto_console 계약 경계 정리
  - 경로: `agent-roadmap/archive/phase/independent-control-plane/milestones/oto-console-contract-boundary.md`
  - 요약: Flutter console contract와 shell 구현의 순환형 의존을 contract/model 소유 경계로 정리한다.
- [완료] core server 모듈 경계 정리
  - 경로: `agent-roadmap/archive/phase/independent-control-plane/milestones/core-server-boundary-cleanup.md`
  - 요약: Go core service의 HTTP routing, handler, DTO, clock 의존을 모듈 경계별로 분리한다.
- [완료] workspace 메타데이터와 재현성 정리
  - 경로: `agent-roadmap/archive/phase/independent-control-plane/milestones/workspace-metadata-reproducibility.md`
  - 요약: lockfile, local test 문서, package metadata, 배포 템플릿의 추적/설명 기준을 정리한다.

## 완료 리뷰

- 상태: 승인됨
- 요청일: 2026-06-09
- 완료 근거:
  - 독립 Control Plane 분리, 포트/환경, agent-ops 규칙, runner 출력, oto_console, core server, workspace metadata Milestone이 모두 완료되어 archive 경로로 정리되었다.
  - `apps/runner`, `apps/client`, `services/core` 중심의 독립 OTO runner/control plane 구조와 재현성 메타데이터 기준이 정리되었다.
- 사용자 최종 확인:
  - [x] 이 Phase를 완료로 승인하고 archive 이동해도 되는지 확인한다.
- 리뷰 코멘트: runner 전체 test baseline 정리는 `메시지 기반 빌드 에이전트` Phase의 `runner 검증 기준 정합화` Milestone에서 별도 후속으로 추적한다.

## Phase 경계

- OTO는 iop의 native module이나 iop Edge domain agent로 동작하지 않는다.
- iop는 AI agent/model/provider 기능이 필요한 경우 OTO 또는 NomadCode가 선택적으로 호출하는 외부 provider로 둔다.
- OTO Server는 runner registry, bootstrap, job dispatch, execution history, log/artifact 상태를 OTO 제품 책임으로 소유한다.
- OTO runner는 서버 없이도 로컬 typed-command CI/CD runtime으로 실행 가능해야 하며, OTO Server 연결은 중앙 관리가 필요할 때의 선택 경로로 둔다.
- NomadCode 같은 외부 제품은 OTO Server API를 소비할 수 있지만, OTO client/server 구현을 직접 복제하지 않는다.
