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

# Implementation Plan - REVIEW_MONOREPO_ROOT

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

이 계획은 직전 코드리뷰 `code_review_cloud_G06_0.log`의 Required 이슈만 고친다. 구현 완료 전 `CODE_REVIEW-local-G05.md`의 구현 에이전트 소유 섹션을 실제 수정 내용과 검증 출력으로 채운다. 구현 에이전트는 `USER_REVIEW.md`, archive log, `complete.log`를 만들지 않는다. 사용자만 결정할 수 있는 blocker가 생기면 active review stub의 `사용자 리뷰 요청` 섹션에 근거와 재개 조건을 남기고 중단한다. 검증 출력 누락처럼 후속 에이전트가 재실행으로 해소할 수 있는 증거 공백은 사용자 리뷰 요청 사유가 아니다.

## 배경

루트 Makefile과 테스트 위임은 통과했지만, 루트 README의 상세 안내 링크가 현재 컨테이너 절대 `file://` 경로를 포함한다. 이 문서는 monorepo root entrypoint 역할을 하므로 다른 checkout과 GitHub 렌더링에서도 동작하는 저장소 상대 링크만 사용해야 한다.

## 사용자 리뷰 요청 흐름

구현 중 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-task/m-control-plane-separation-migration/04+01,02,03_root_entrypoints/plan_cloud_G06_0.log`
- `agent-task/m-control-plane-separation-migration/04+01,02,03_root_entrypoints/code_review_cloud_G06_0.log`
- `agent-task/archive/2026/06/m-control-plane-separation-migration/01_runner_app/complete.log`
- `agent-task/archive/2026/06/m-control-plane-separation-migration/02_client_app/complete.log`
- `agent-task/archive/2026/06/m-control-plane-separation-migration/03_core_service/complete.log`
- `agent-test/local/rules.md`
- `agent-test/local/cli-smoke.md`
- `agent-test/local/framework-smoke.md`
- `Makefile`
- `README.md`
- `apps/runner/README.md`
- `apps/client/README.md`

### 테스트 환경 규칙

- test_env: `local`
- 적용 profiles: `cli-smoke`, `framework-smoke`
- 직전 리뷰 재실행 결과: `make runner-analyze` PASS, `make test` PASS
- 이 follow-up은 README 링크만 수정하므로 중간 검증은 deterministic grep으로 두고, 최종 검증은 root 위임 경로 회귀를 확인하기 위해 `make test`를 유지한다.

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

- README 링크 포터빌리티는 unit test가 없다. `rg --sort path`로 절대 `file://` URL과 없는 core README 링크가 제거됐는지 검증한다.

### 심볼 참조

- renamed/removed symbols: none.
- path 문자열 보정 대상: `README.md:54-56`의 absolute `file://` 링크와 `services/core/README.md` 링크.

### 분할 판단

- split decision policy를 적용했다.
- 이 follow-up은 기존 split subtask `04+01,02,03_root_entrypoints` 안에서 직전 리뷰 Required 하나만 처리한다.
- predecessor complete logs는 같은 task group의 archive 경로에서 확인됐다.
  - `01_runner_app`: satisfied by `agent-task/archive/2026/06/m-control-plane-separation-migration/01_runner_app/complete.log`
  - `02_client_app`: satisfied by `agent-task/archive/2026/06/m-control-plane-separation-migration/02_client_app/complete.log`
  - `03_core_service`: satisfied by `agent-task/archive/2026/06/m-control-plane-separation-migration/03_core_service/complete.log`

### 범위 결정 근거

- `README.md`의 상세 안내 링크만 수정한다.
- `Makefile` target 구성은 직전 리뷰에서 `make runner-analyze`와 `make test`로 통과했으므로 변경하지 않는다.
- 하위 앱/서비스 README 내용 보강, core README 생성, roadmap 수정은 이 follow-up 범위가 아니다.

### 빌드 등급

- `local-G05`: 단일 README 수정과 deterministic grep/make 검증으로 충분한 follow-up이다.

## 구현 체크리스트

- [ ] root `README.md`의 상세 안내 링크에서 절대 `file://` URL과 작업공간 절대 경로를 제거한다.
- [ ] 현재 존재하지 않는 `services/core/README.md` 파일 링크를 깨지지 않는 `services/core/` 디렉터리 링크 또는 plain text로 정리한다.
- [ ] `rg --sort path -n 'file://|/config/workspace/oto|services/core/README\.md' README.md`가 match 없이 종료되는지 확인한다.
- [ ] `make test`로 root 위임 target 회귀가 없는지 확인한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_MONOREPO_ROOT-1] Fix Portable README Links

문제: `README.md:54-56`이 `/config/workspace/oto/...` 절대 `file://` URL을 포함하고, `services/core/README.md`는 현재 파일이 없다. 루트 README가 추적되면 다른 checkout과 GitHub 렌더링에서 상세 안내 링크가 깨진다.

해결 방법:

Before:
```markdown
- [OTO Runner README](file:///config/workspace/oto/apps/runner/README.md)
- [OTO Client README](file:///config/workspace/oto/apps/client/README.md) (존재 시)
- [OTO Core Server README](file:///config/workspace/oto/services/core/README.md) (존재 시)
```

After:
```markdown
- [OTO Runner README](apps/runner/README.md)
- [OTO Client README](apps/client/README.md)
- OTO Core Server: [services/core/](services/core/)
```

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

테스트 작성: 문서 링크 포터빌리티 수정이므로 별도 unit test는 만들지 않는다. `rg` 검증으로 절대/깨진 링크 패턴 제거를 확인한다.

중간 검증:
```bash
rg --sort path -n 'file://|/config/workspace/oto|services/core/README\.md' README.md
```
예상 결과: match 없음. `rg` exit code 1은 성공으로 기록한다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `README.md` | REVIEW_MONOREPO_ROOT-1 |

## 최종 검증

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

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