oto/agent-task/m-control-plane-separation-migration/03_core_service/PLAN-local-G05.md
toki 86afabb3eb refactor(runner): 런타임 패키지를 앱 하위로 이동한다
독립 control plane 구성을 위해 기존 Dart CLI/runtime을 runner 앱 경계로 옮기고, 후속 client/core/root 작업을 같은 마일스톤 task group에 연결한다.
2026-06-05 06:34:45 +09:00

4.9 KiB

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:42services/core Go backend와 health/readiness/local run entrypoint를 요구하지만 현재 경로가 없다.

해결 방법:

services/core/
  go.mod
  cmd/oto-core/main.go
  internal/httpserver/server.go
  internal/httpserver/server_test.go

main.goOTO_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를 검증한다.

중간 검증:

cd services/core && go test ./...

예상 결과: 모든 Go package test 통과.

수정 파일 요약

파일 항목
services/core/** MONOREPO_CORE-1

최종 검증

cd services/core && go test ./...

예상 결과: 모든 Go package test 통과.

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