chore: update roadmap - archive flutter-first-portal-migration milestone

This commit is contained in:
toki 2026-05-25 06:55:07 +09:00
parent 8b5848a32d
commit 7f2724c8e4
4 changed files with 31 additions and 27 deletions

View file

@ -39,8 +39,7 @@ RAG, context 구성/압축, web search, MCP 정책, tool policy, output validati
### Control Plane과 Portal 운영
- [Flutter-first Portal 마이그레이션](milestones/flutter-first-portal-migration.md) - 상태: 계획; 목표: IOP Portal의 장기 UI 기준을 Flutter 앱으로 정하고 Next.js scaffold를 제품 경로에서 제거하거나 격리한다.
- [Control Plane과 Portal](milestones/control-plane-portal.md) - 상태: 계획; 목표: 여러 Edge를 연결하고 관찰하며 Edge 설정 변경, 명령 전달, 이벤트 수신을 담당하는 중앙 제어면과 Web Portal 운영면을 구축한다.
- [Control Plane과 Portal](milestones/control-plane-portal.md) - 상태: 진행 중; 목표: 여러 Edge를 연결하고 관찰하며 Edge 설정 변경, 명령 전달, 이벤트 수신을 담당하는 중앙 제어면과 Flutter Portal 운영면을 구축한다.
- [정책, 이력, 감사](milestones/policy-history-audit.md) - 상태: 계획; 목표: 권한, 정책, 실행 이력, 감사 로그를 제품 운영에 필요한 수준으로 확장한다.
- [Multi-Edge 운영](milestones/multi-edge-operations.md) - 상태: 계획; 목표: 여러 Edge group을 관찰하고 운영하는 fleet-level 기능을 구축한다.
@ -49,6 +48,7 @@ RAG, context 구성/압축, web search, MCP 정책, tool policy, output validati
- Edge-Node 실행 스켈레톤 - 상태: 완료; 아카이브일: 2026-05-24; 요약: Edge와 Node 사이의 등록, 설정 전달, adapter execution, event streaming, command 응답을 한 실행 흐름으로 검증했다.; 핵심 산출물/근거: `go test ./...`, `make test-e2e`, field smoke 기준 통과.; 후속 영향: Edge 입력 표면과 CLI Automation Runtime 안정화의 기반이 됐다.
- Edge 입력 표면 - 상태: 완료; 아카이브일: 2026-05-24; 요약: OpenAI-compatible API와 A2A JSON-RPC API를 Edge 내부 `adapter + target` 실행 경로로 수렴시켰다.; 핵심 산출물/근거: OpenAI-compatible/A2A baseline과 `make test-e2e`의 Ollama 보조 smoke 통과.; 후속 영향: Responses API 확장은 모델 서빙과 부하 라우팅 Milestone에서 다룬다.
- CLI Automation Runtime 안정화 - 상태: 완료; 아카이브일: 2026-05-24; 요약: one-shot, persistent terminal, opencode SSE, codex exec 계열 CLI 실행 모드를 같은 adapter execution 모델 안에서 안정화했다.; 핵심 산출물/근거: `go test ./...`, mock smoke, `codex|opencode|antigravity|claude|claude-tui` profile smoke 통과.; 후속 영향: 원격 터미널 브리지 POC로 이어진다.
- Flutter-first Portal 마이그레이션 - 상태: 완료; 아카이브일: 2026-05-24; 요약: Next.js `apps/web` scaffold를 제거하고 `apps/portal` Flutter 앱, Flutter Web compose 배포 흐름, Portal-Control Plane proto-socket WS hello 기반을 세웠다.; 핵심 산출물/근거: `apps/portal`, `apps/portal/Dockerfile`, `bin/web.sh`, `docker-compose.yml`, `go test ./apps/control-plane/...`, `flutter test`, `make portal-build-web` 통과.; 후속 영향: Control Plane과 Portal Milestone이 Flutter Portal 기준으로 진행 중 상태가 됐다.
## 로딩 정책

View file

@ -11,7 +11,7 @@ Control Plane과 Portal 운영
## 상태
계획
완료
## 구현 잠금
@ -30,22 +30,22 @@ Control Plane과 Portal 운영
## 필수 기능
- [ ] [ui-source] Flutter 앱을 IOP Portal UI source of truth로 선언하고 Next.js를 기준 구현에서 제외한다.
- [ ] [next-retire] `apps/web`의 TypeScript/Next.js scaffold와 npm 기반 제품 UI 경로를 삭제한다.
- [ ] [proto-ws] Portal-Control Plane wire 경계는 proto-socket WebSocket/WSS를 기본으로 둔다.
- [ ] [dart-web-transport] Flutter Web 브라우저 타깃에서 사용할 proto-socket Dart browser WebSocket transport 기준을 마련한다.
- [ ] [entrypoints] `bin/web.sh`, compose web service, Portal 검증 명령이 Flutter-first 구조와 충돌하지 않게 정리한다.
- [ ] [docker-flutter-web] 기존 Next.js Docker 배포를 Flutter Web build 산출물 서빙 흐름으로 교체한다.
- [ ] [contract-gen] IOP protobuf 계약을 Flutter/Dart client가 소비할 생성물과 parser map 기준으로 정리한다.
- [x] [ui-source] Flutter 앱을 IOP Portal UI source of truth로 선언하고 Next.js를 기준 구현에서 제외한다.
- [x] [next-retire] `apps/web`의 TypeScript/Next.js scaffold와 npm 기반 제품 UI 경로를 삭제한다.
- [x] [proto-ws] Portal-Control Plane wire 경계는 proto-socket WebSocket/WSS를 기본으로 둔다.
- [x] [dart-web-transport] Flutter Web 브라우저 타깃에서 사용할 proto-socket Dart browser WebSocket transport 기준을 마련한다.
- [x] [entrypoints] `bin/web.sh`, compose web service, Portal 검증 명령이 Flutter-first 구조와 충돌하지 않게 정리한다.
- [x] [docker-flutter-web] 기존 Next.js Docker 배포를 Flutter Web build 산출물 서빙 흐름으로 교체한다.
- [x] [contract-gen] IOP protobuf 계약을 Flutter/Dart client가 소비할 생성물과 parser map 기준으로 정리한다.
## 완료 기준
- [ ] 로드맵과 Portal 관련 문서에서 Next.js가 장기 제품 UI 기준 구현으로 설명되지 않는다.
- [ ] Flutter 앱이 모바일/데스크톱/웹 Portal의 기준 클라이언트로 설명된다.
- [ ] proto-socket WS/WSS가 Portal-Control Plane 통신의 기본 transport로 문서화된다.
- [ ] Flutter Web 브라우저 타깃에서 `dart:io` 의존 없이 WebSocket binary frame을 쓰는 경로가 정해져 있다.
- [ ] `apps/web`에 TypeScript/Next.js 제품 UI 코드와 npm 기반 배포 경로가 남아 있지 않다.
- [ ] Docker compose의 `web` 서비스가 Flutter Web 산출물을 빌드/서빙하는 흐름으로 동작한다.
- [x] 로드맵과 Portal 관련 문서에서 Next.js가 장기 제품 UI 기준 구현으로 설명되지 않는다.
- [x] Flutter 앱이 모바일/데스크톱/웹 Portal의 기준 클라이언트로 설명된다.
- [x] proto-socket WS/WSS가 Portal-Control Plane 통신의 기본 transport로 문서화된다.
- [x] Flutter Web 브라우저 타깃에서 `dart:io` 의존 없이 WebSocket binary frame을 쓰는 경로가 정해져 있다.
- [x] `apps/web`에 TypeScript/Next.js 제품 UI 코드와 npm 기반 배포 경로가 남아 있지 않다.
- [x] Docker compose의 `web` 서비스가 Flutter Web 산출물을 빌드/서빙하는 흐름으로 동작한다.
## 범위 제외
@ -57,10 +57,11 @@ Control Plane과 Portal 운영
## 작업 컨텍스트
- 관련 경로: `apps/web/`, `apps/control-plane/`, `bin/web.sh`, `docker-compose.yml`, `apps/web/Dockerfile`, `proto/iop/`, `../proto-socket/dart/`, `../proto-socket/go/`
- 관련 경로: `apps/portal/`, `apps/control-plane/`, `bin/web.sh`, `docker-compose.yml`, `apps/portal/Dockerfile`, `proto/iop/`, `../proto-socket/dart/`, `../proto-socket/go/`
- 표준선(선택): 앱은 필수 제품 표면이므로 Flutter를 Portal UI source of truth로 둔다. Next.js는 제품 UI 기준 구현으로 키우지 않는다.
- 표준선(선택): proto-socket은 TCP뿐 아니라 WebSocket/WSS를 지원한다. Go 구현에는 `NewWsServer`, `DialWs`, `NewWsServerTLS`, `DialWss`가 있고 Dart 구현에는 `WsProtobufClient`, `WsProtobufServer`가 있다.
- 표준선(선택): 현재 Dart proto-socket WebSocket 구현은 `dart:io` 기반이므로 mobile/desktop/server에는 맞지만 Flutter Web 브라우저 타깃에는 조건부 browser WebSocket transport가 필요하다.
- 선행 작업: Specialized Agent proto-socket 연결 기반
- 후속 작업: Control Plane과 Portal, 정책/이력/감사
- 검증: `go test ./apps/control-plane/...`, `flutter test`, `make portal-build-web`
- 확인 필요: 없음

View file

@ -2,10 +2,10 @@
## 활성 Milestone
- Flutter-first Portal 마이그레이션: agent-ops/roadmap/milestones/flutter-first-portal-migration.md
- 원격 터미널 브리지 POC: agent-ops/roadmap/milestones/remote-terminal-bridge-poc.md
- Specialized Agent proto-socket 연결 기반: agent-ops/roadmap/milestones/specialized-agent-proto-socket-foundation.md
- Agent Bootstrap과 OTO 등록: agent-ops/roadmap/milestones/agent-bootstrap-oto-enrollment.md
- Control Plane과 Portal: agent-ops/roadmap/milestones/control-plane-portal.md
## 선택 규칙

View file

@ -2,7 +2,7 @@
## 목표
여러 Edge를 연결하고 관찰하며 Edge 설정 변경, 명령 전달, 이벤트 수신을 담당하는 Control Plane과 Web Portal 운영면을 구축한다.
여러 Edge를 연결하고 관찰하며 Edge 설정 변경, 명령 전달, 이벤트 수신을 담당하는 Control Plane과 Flutter Portal 운영면을 구축한다.
Portal은 NomadCode 전용 화면이 아니라 IOP가 독립적으로 운영되기 위한 범용 운영/UX 계층으로 둔다.
## 단계
@ -11,7 +11,7 @@ Control Plane과 Portal 운영
## 상태
계획
진행 중
## 구현 잠금
@ -25,7 +25,7 @@ Control Plane과 Portal 운영
- Control Plane Go server의 Edge connection 관리
- Portal-Control Plane, Control Plane-Edge IOP Wire Protocol 확장
- Web Portal의 Runtime/Automation/Serving 운영 화면 기초
- Flutter Portal의 Runtime/Automation/Serving 운영 화면 기초
- Edge 상태 조회, 설정 변경, 명령 전달, 이벤트 수신
- Edge agent 생성과 bootstrap command 발급 상태 조회/관리
- remote terminal bridge session 생성/조회/권한 확인 표면
@ -35,16 +35,18 @@ Control Plane과 Portal 운영
- [ ] [edge-mediated] Control Plane은 Node를 직접 연결하거나 직접 스케줄링하지 않는다.
- [ ] [portal-via-cp] Portal은 Control Plane을 통해 Edge 운영 상태를 조회한다.
- [ ] [portal-boundary] Portal은 IOP 자체 운영 UI/UX이며 NomadCode에 맞춘 전용 shell로 만들지 않는다.
- [ ] [server-bridge] 브라우저 직접 TCP가 어려운 구간은 Control Plane server-side bridge를 둔다.
- [ ] [http-boundary] `net/http`는 health/readiness/bootstrap 같은 보조 endpoint 용도로 유지한다.
- [x] [portal-boundary] Portal은 IOP 자체 운영 UI/UX이며 NomadCode에 맞춘 전용 shell로 만들지 않는다.
- [x] [server-bridge] 브라우저 직접 TCP가 어려운 구간은 Control Plane server-side bridge를 둔다.
- [x] [portal-wire-hello] Portal-Control Plane proto-socket WebSocket hello handshake scaffold가 구현되고 테스트되어 있다.
- [x] [http-boundary] `net/http`는 health/readiness/bootstrap 같은 보조 endpoint 용도로 유지한다.
## 완료 기준
- [ ] Control Plane이 하나 이상의 Edge 연결 상태를 조회할 수 있다.
- [ ] Portal이 Edge/Node/agent 상태를 사용자에게 보여줄 수 있다.
- [ ] Edge 명령 전달과 이벤트 수신 흐름이 IOP Wire Protocol 기준으로 문서화된다.
- [ ] Control Plane과 Web의 배포/검증 절차가 `docs/deploy-dev.md`와 일치한다.
- [x] Control Plane과 Flutter Portal의 배포/검증 절차가 `docs/deploy-dev.md`와 일치한다.
- [x] Portal-Control Plane proto-socket WebSocket hello handshake가 Control Plane과 Portal 테스트에서 검증된다.
## 범위 제외
@ -56,8 +58,9 @@ Control Plane과 Portal 운영
## 작업 컨텍스트
- 관련 경로: `apps/control-plane`, `apps/web`, `apps/control-plane/README.md`, `apps/web/README.md`, `docs/deploy-dev.md`
- 관련 경로: `apps/control-plane`, `apps/portal`, `apps/control-plane/README.md`, `apps/portal/README.md`, `docs/deploy-dev.md`, `docker-compose.yml`, `bin/web.sh`
- 표준선(선택): Control Plane은 Node를 직접 스케줄링하지 않고 Edge를 통해 관찰/제어한다.
- 선행 작업: Agent Bootstrap과 OTO 등록, 정책/이력/감사 일부 기준
- 표준선(선택): Portal-Control Plane의 첫 wire surface는 `/portal` WebSocket의 hello handshake이며, Edge 운영 조회와 명령 전달은 후속 IOP Wire Protocol 확장에서 붙인다.
- 선행 작업: Flutter-first Portal 마이그레이션, Agent Bootstrap과 OTO 등록, 정책/이력/감사 일부 기준
- 후속 작업: Multi-Edge 운영
- 확인 필요: Portal 첫 화면 범위, Control Plane-Edge wire 우선순위, NomadCode 전용 UX 제외 기준