<!-- task=m-control-plane-separation-migration/04+01,02,03_root_entrypoints plan=0 tag=MONOREPO_ROOT -->

# Implementation Plan - MONOREPO_ROOT

## 이 파일을 읽는 구현 에이전트에게

이 subtask는 디렉터리명 기준으로 `01_runner_app`, `02_client_app`, `03_core_service`의 `complete.log`가 먼저 필요하다. 구현 완료 전 `CODE_REVIEW-cloud-G06.md`의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 구현 에이전트는 `USER_REVIEW.md`, archive log, `complete.log`를 만들지 않는다.

## 배경

첫 Epic의 앞선 세 작업이 앱/서비스 경계를 만들면 monorepo root에서 반복 개발 진입점이 필요하다. 현재 README와 scripts는 루트 단일 Dart package 기준이라 runner/client/core 작업을 위임하는 root helper로 정리해야 한다. 이 plan은 root `Makefile`과 README 실행 명령만 다룬다.

## 사용자 리뷰 요청 흐름

구현 중 blocker는 active review stub의 `사용자 리뷰 요청` 섹션에 기록한다. code-review가 검증하고 `USER_REVIEW.md` 작성 여부를 결정한다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/independent-control-plane/milestones/control-plane-separation-migration.md`
- Task ids:
  - `root-entrypoints`: root `bin/`, Makefile 또는 동등한 helper가 runner/client/core 작업을 위임하도록 정리되어 monorepo root에서 개발 진입점이 명확하다.
- Completion mode: check-on-pass

## 분석 결과

### 읽은 파일

- `agent-roadmap/current.md`
- `agent-roadmap/phase/independent-control-plane/PHASE.md`
- `agent-roadmap/phase/independent-control-plane/milestones/control-plane-separation-migration.md`
- `agent-ops/rules/project/rules.md`
- `agent-ops/skills/common/plan/SKILL.md`
- `agent-test/local/rules.md`
- `agent-test/local/cli-smoke.md`
- `agent-test/local/framework-smoke.md`
- `README.md`
- `assets/script/shell/build.sh`
- `assets/script/batch/build.bat`
- `lib/cli/cli.dart`
- `test/oto_agent_cli_test.dart`
- `test/oto_application_test.dart`
- `test/oto_catalog_cli_test.dart`
- `test/oto_validate_cli_test.dart`

### 테스트 환경 규칙

- test_env: `local`
- 적용 profiles: `cli-smoke`, `framework-smoke`.
- 적용 명령: `make runner-analyze`, `make runner-test`, `make client-test`, `make core-test`, `make test`.
- 확인한 도구: `make`는 `/config/.local/bin/make`, GNU Make `4.3`.

### 테스트 커버리지 공백

- 기존 테스트는 root Makefile 자체를 검증하지 않는다.
- 이 plan은 Makefile target 실행을 최종 검증으로 사용한다.

### 심볼 참조

- renamed/removed symbols: none.
- path 문자열 보정 대상: root `README.md`의 `dart compile exe bin/main.dart -o oto`, scripts/tests에 남은 root `bin/main.dart` 참조가 있으면 모두 의도 여부를 확인한다.

### 분할 판단

- split decision policy를 적용했다.
- 이 subtask는 `04+01,02,03_root_entrypoints`이므로 predecessor indices `01`, `02`, `03`이 필요하다.
- 현재 predecessor `complete.log` 상태: active 경로 기준 missing. 구현 시작 전 다음 파일이 있어야 한다.
  - `agent-task/m-control-plane-separation-migration/01_runner_app/complete.log`
  - `agent-task/m-control-plane-separation-migration/02_client_app/complete.log`
  - `agent-task/m-control-plane-separation-migration/03_core_service/complete.log`

### 범위 결정 근거

- runner/client/core 내부 기능 구현은 제외한다.
- root helper는 Makefile 중심으로 둔다. 별도 root binary wrapper는 필요한 근거가 생기기 전까지 만들지 않는다.
- roadmap 상태 체크는 이 plan에서 직접 수정하지 않는다.

### 빌드 등급

- `cloud-G06`: 세 toolchain을 root에서 orchestration하고 predecessor 상태를 확인해야 하며 CLI/script 경로 회귀 위험이 있다.

## 의존 관계 및 구현 순서

- `01_runner_app`, `02_client_app`, `03_core_service`의 `complete.log`가 모두 있어야 구현을 시작한다.
- dependency는 디렉터리명 `04+01,02,03_root_entrypoints`가 source of truth다.

## 구현 체크리스트

- [ ] predecessor `complete.log` 세 개가 있는지 확인하고 없으면 구현하지 않고 review stub에 차단 근거를 남긴다.
- [ ] root `Makefile`을 추가해 runner/client/core setup/analyze/test/run helper를 위임한다.
- [ ] root README의 설치/검증/프로젝트 구조를 monorepo 기준으로 보정한다.
- [ ] root에서 `make test` 또는 개별 target을 실행해 위임 경로를 검증한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [MONOREPO_ROOT-1] Add Root Makefile Delegation

문제: Milestone `agent-roadmap/phase/independent-control-plane/milestones/control-plane-separation-migration.md:43`은 root helper가 runner/client/core 작업을 위임해야 한다고 지정한다. 현재 root에는 Makefile이 없고 README는 `README.md:18-21`, `:51`, `:67-73`, `:299-311`에서 단일 Dart package 구조를 설명한다.

해결 방법:

Makefile target baseline:
```make
runner-get:
	cd apps/runner && dart pub get
runner-analyze:
	cd apps/runner && dart analyze
runner-test:
	cd apps/runner && dart test
client-analyze:
	cd apps/client && flutter analyze
client-test:
	cd apps/client && flutter test
core-test:
	cd services/core && go test ./...
test: runner-test client-test core-test
```

수정 파일 및 체크리스트:
- [ ] `Makefile`
- [ ] `README.md`

테스트 작성: Makefile target 실행 자체를 검증으로 둔다. 별도 unit test는 만들지 않는다.

중간 검증:
```bash
make runner-analyze
```
예상 결과: runner analyzer 통과.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `Makefile` | MONOREPO_ROOT-1 |
| `README.md` | MONOREPO_ROOT-1 |

## 최종 검증

```bash
make test
```
예상 결과: runner/client/core delegated test target이 모두 통과한다.

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
