iop/agent-roadmap/phase/control-plane-portal-ops/milestones/control-plane-client.md
toki 1fe368ad2c refactor: portal → client 앱 리팩토링 및 제어플랫폼 와이어 클라이언트 명명 변경
- apps/portal 디렉터리를 apps/client로 리팩터링
- ControlPlaneWireClient → WireClient 명명 변경
- 관련_proto import 정렬, struct protobuf 생성 제거
- README, docker-compose, 스크립트 등 일관성 개선
2026-05-28 20:24:45 +09:00

4.4 KiB

Milestone: Control Plane과 Client

위치

  • Roadmap: agent-roadmap/ROADMAP.md
  • Phase: agent-roadmap/phase/control-plane-portal-ops/PHASE.md

목표

여러 Edge를 연결하고 관찰하며 Edge 설정 변경, 명령 전달, 이벤트 수신을 담당하는 Control Plane과 Flutter client 운영면을 구축한다. Client는 NomadCode 전용 화면이 아니라 IOP가 독립적으로 운영되기 위한 범용 운영/UX 계층으로 둔다.

상태

[계획]

구현 잠금

  • 상태: 잠금
  • 결정 필요: 아래 체크리스트
    • Client의 첫 운영 화면 범위를 Edge/Node 상태 조회 중심으로 둘지, 명령/설정 변경까지 포함할지 결정한다.
    • Control Plane-Edge 연결에서 우선 구현할 IOP Wire Protocol 범위를 결정한다.
    • IOP client가 범용 운영 UI로 남기 위해 제외할 NomadCode 전용 UX 경계를 결정한다.
    • Client Integration Clone Adoption 완료 전 Flutter client 화면 구현을 어디까지 진행할지 결정한다.

범위

  • Control Plane Go server의 Edge connection 관리
  • Client-Control Plane, Control Plane-Edge IOP Wire Protocol 확장
  • Flutter client의 Runtime/Automation/Serving 운영 화면 기초
  • Edge 상태 조회, 설정 변경, 명령 전달, 이벤트 수신
  • Edge agent 생성과 bootstrap command 발급 상태 조회/관리
  • remote terminal bridge session 생성/조회/권한 확인 표면
  • IOP 책임 범위 안의 model serving, automation, session, routing, policy, history, audit 운영 UX

기능

Epic: [edge-ops-boundary] Edge Operations Boundary

  • [edge-mediated] Control Plane은 Node를 직접 연결하거나 직접 스케줄링하지 않는다.
  • [edge-status] Control Plane은 하나 이상의 Edge 연결 상태를 조회할 수 있다. 검증: Edge 연결 상태 조회 경로가 동작하는지 확인한다.
  • [edge-command-events] Edge 명령 전달과 이벤트 수신 흐름이 IOP Wire Protocol 기준으로 문서화된다.
  • [client-via-cp] Client는 Control Plane을 통해 Edge 운영 상태를 조회한다.

Epic: [client-wire-surface] Client Wire Surface

  • [client-boundary] Flutter client는 IOP 자체 운영 UI/UX이며 NomadCode에 맞춘 전용 shell로 만들지 않는다.
  • [client-status] Client는 Edge/Node/agent 상태를 사용자에게 보여줄 수 있다. 검증: Client 상태 화면 또는 상태 표시 경로를 확인한다.
  • [server-bridge] 브라우저 직접 TCP가 어려운 구간은 Control Plane server-side bridge를 둔다.
  • [client-wire-hello] Client-Control Plane proto-socket WebSocket hello handshake scaffold가 구현되고 테스트되어 있다. 검증: Control Plane과 client 테스트에서 hello handshake가 통과한다.
  • [http-boundary] net/http는 health/readiness/bootstrap 같은 보조 endpoint 용도로 유지한다.
  • [deploy-docs] Control Plane과 Flutter client의 배포/검증 절차가 README.md의 운영 경계와 private local testing rule의 환경 기준에 맞게 정리되어 있다.

완료 리뷰

  • 상태: 없음
  • 요청일: 없음
  • 완료 근거: 모든 기능 Task와 Task 안에 명시된 검증이 아직 충족되지 않았다.
  • 리뷰 필요:
    • 사용자가 완료 결과를 확인했다
    • archive 이동을 승인했다
  • 리뷰 코멘트: 없음

범위 제외

  • Control Plane을 Kubernetes식 중앙 스케줄러로 만드는 작업
  • Edge 내부 DB를 Control Plane DB로 대체
  • 모든 런타임 상태를 Control Plane 단일 원본으로 만드는 작업
  • NomadCode Agent Shell 자체 구현
  • NomadCode 전용 Project Workspace, diff/PR/branch/commit UX

작업 컨텍스트

  • 관련 경로: apps/control-plane, apps/client, apps/control-plane/README.md, apps/client/README.md, agent-ops/rules/private/rules.md, docker-compose.yml, scripts/dev/web.sh
  • 표준선(선택): Control Plane은 Node를 직접 스케줄링하지 않고 Edge를 통해 관찰/제어한다.
  • 표준선(선택): Client-Control Plane의 첫 wire surface는 /client WebSocket hello handshake를 기준으로 둔다.
  • 선행 작업: Flutter-first Client 마이그레이션, Client Integration Clone Adoption, Agent Bootstrap과 OTO 등록, 정책/이력/감사 일부 기준
  • 후속 작업: Multi-Edge 운영
  • 확인 필요: Client 첫 화면 범위, Control Plane-Edge wire 우선순위, NomadCode 전용 UX 제외 기준, client 표준 clone 반영 범위