# Implementation Plan - MONOREPO_CORE ## 이 파일을 읽는 구현 에이전트에게 구현 완료 전 `CODE_REVIEW-local-G05.md`의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 사용자 결정, 사용자 소유 외부 환경/secret, 또는 범위 충돌이 있으면 review stub의 `사용자 리뷰 요청` 섹션에 근거를 남기고 중단한다. 구현 에이전트는 `USER_REVIEW.md`, archive log, `complete.log`를 만들지 않는다. ## 배경 Milestone은 OTO Control Plane backend를 `services/core`에 두고 health/readiness와 local run entrypoint를 준비하라고 지정한다. 현재 repo에는 Go service가 없으므로 외부 dependency 없는 최소 HTTP service와 테스트를 만든다. runner registry/enrollment/job dispatch는 후속 Epic의 계약이므로 이번 plan에서는 endpoint 이름만 확장 가능하게 둔다. ## 사용자 리뷰 요청 흐름 구현 중 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: - `core-service`: OTO Server backend가 `services/core` 기준으로 생성되고, health/readiness와 local run entrypoint가 준비된다. - 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` - `pubspec.yaml` ### 테스트 환경 규칙 - test_env: `local` - `agent-test/local/rules.md`는 Dart 중심 baseline이라 Go profile은 아직 없다. fallback verification은 Go toolchain 자체와 `go test ./...`로 둔다. - 확인한 도구: `go`는 `/config/.local/bin/go`, Go `1.26.2`. ### 테스트 커버리지 공백 - 기존 Go service가 없어 기존 테스트는 없다. - 새 HTTP health/readiness handler test를 작성해 status code/body를 검증한다. ### 심볼 참조 - renamed/removed symbols: none. ### 분할 판단 - split decision policy를 적용했다. - `03_core_service`는 Go service scaffold와 HTTP smoke만 다루며 runner/client와 독립 검증 가능하다. - root Makefile 위임은 `04+01,02,03_root_entrypoints`에서 처리한다. ### 범위 결정 근거 - runner registry, enrollment token persistence, bootstrap command generation, job/log/artifact storage는 제외한다. - database, migration, auth, OpenAPI/proto contract는 만들지 않는다. - `proto/oto`는 server-runner contract Epic에서 확정한다. ### 빌드 등급 - `local-G05`: 새 Go service scaffold와 deterministic handler tests로 범위가 작고 검증 가능하다. ## 구현 체크리스트 - [ ] `services/core`에 Go module과 local run entrypoint를 만든다. - [ ] health/readiness HTTP handlers를 외부 dependency 없이 구현한다. - [ ] handler tests를 작성한다. - [ ] `services/core`에서 `go test ./...`를 실행한다. - [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다. ### [MONOREPO_CORE-1] Add Core Service Scaffold 문제: Milestone `agent-roadmap/phase/independent-control-plane/milestones/control-plane-separation-migration.md:30`와 `:42`는 `services/core` Go backend와 health/readiness/local run entrypoint를 요구하지만 현재 경로가 없다. 해결 방법: ```text services/core/ go.mod cmd/oto-core/main.go internal/httpserver/server.go internal/httpserver/server_test.go ``` `main.go`는 `OTO_CORE_ADDR` 환경값이 있으면 사용하고, 없으면 `127.0.0.1:8080`으로 listen한다. `server.go`는 `/healthz`와 `/readyz`를 같은 handler set에 등록한다. 수정 파일 및 체크리스트: - [ ] `services/core/go.mod` - [ ] `services/core/cmd/oto-core/main.go` - [ ] `services/core/internal/httpserver/server.go` - [ ] `services/core/internal/httpserver/server_test.go` 테스트 작성: `httptest`로 `/healthz`, `/readyz`, unknown route를 검증한다. 중간 검증: ```bash cd services/core && go test ./... ``` 예상 결과: 모든 Go package test 통과. ## 수정 파일 요약 | 파일 | 항목 | |------|------| | `services/core/**` | MONOREPO_CORE-1 | ## 최종 검증 ```bash cd services/core && go test ./... ``` 예상 결과: 모든 Go package test 통과. 모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.