oto/agent-task/m-control-plane-separation-migration/02_client_app/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.8 KiB

Implementation Plan - MONOREPO_CLIENT

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

구현 완료 전 CODE_REVIEW-local-G05.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 사용자 결정, 사용자 소유 외부 환경/secret, 또는 범위 충돌이 있으면 review stub의 사용자 리뷰 요청 섹션에 근거를 남기고 중단한다. 구현 에이전트는 USER_REVIEW.md, archive log, complete.log를 만들지 않는다.

배경

Milestone은 OTO 독립 콘솔의 source of truth를 apps/client에 두라고 지정한다. 현재 repo에는 Flutter client app이 없으므로 최소 standalone scaffold와 검증 기준을 만든다. OTO Server API 연동은 아직 contract가 없으므로 이 plan에서는 제외한다.

사용자 리뷰 요청 흐름

구현 중 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:
    • client-app: Flutter client가 apps/client 기준으로 추가되고, OTO 독립 콘솔의 source of truth가 client app에 위치한다.
  • 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/framework-smoke.md
  • pubspec.yaml
  • analysis_options.yaml

테스트 환경 규칙

  • test_env: local
  • agent-test/local/rules.mdframework-smoke.md를 읽었다.
  • 적용 명령: flutter analyze, flutter test.
  • 확인한 도구: flutter/sdk/flutter/bin/flutter, Flutter 3.41.5, Dart 3.11.3.

테스트 커버리지 공백

  • 기존 client app이 없어 기존 테스트 커버리지는 없다.
  • scaffold가 생성하는 widget test 또는 새 smoke widget test로 초기 화면이 렌더링되는지만 검증한다.

심볼 참조

  • renamed/removed symbols: none.

분할 판단

  • split decision policy를 적용했다.
  • 02_client_app은 Flutter toolchain과 UI scaffold만 다루며 runner/core와 독립 검증 가능하다.
  • root helper 위임은 04+01,02,03_root_entrypoints로 분리했다.

범위 결정 근거

  • OTO Server API client, auth, runner registry 화면, job/log/artifact UI는 제외한다.
  • packages/ 공유 패키지를 만들지 않는다.
  • runner Dart package와 Go core service를 수정하지 않는다.

빌드 등급

  • local-G05: 새 Flutter scaffold와 기본 widget smoke 검증으로 범위가 명확하고 deterministic하다.

구현 체크리스트

  • apps/client에 Flutter app scaffold를 만들고 project name은 oto_client로 둔다.
  • 초기 앱은 독립 콘솔 source of truth가 드러나도록 title/app shell만 최소 수정한다.
  • scaffold widget test를 현재 title/app shell에 맞게 보정한다.
  • apps/client에서 flutter analyzeflutter test를 실행한다.
  • CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

[MONOREPO_CLIENT-1] Add Flutter Client Scaffold

문제: Milestone agent-roadmap/phase/independent-control-plane/milestones/control-plane-separation-migration.md:29:41apps/client Flutter client를 요구하지만 현재 해당 경로가 없다.

해결 방법:

flutter create --project-name oto_client --platforms=web,linux,macos,windows apps/client

그 뒤 기본 sample counter UI를 OTO Console shell로 줄인다. API endpoint, auth, runner list는 만들지 않는다.

수정 파일 및 체크리스트:

  • apps/client/pubspec.yaml
  • apps/client/lib/main.dart
  • apps/client/test/widget_test.dart
  • Flutter scaffold가 생성한 platform/config files

테스트 작성: scaffold widget test를 "OTO Console" title 또는 초기 shell 렌더링 assertion으로 수정한다.

중간 검증:

cd apps/client && flutter analyze

예상 결과: analyzer issue 없음.

수정 파일 요약

파일 항목
apps/client/** MONOREPO_CLIENT-1

최종 검증

cd apps/client && flutter analyze && flutter test

예상 결과: Flutter analyze/test 통과.

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