diff --git a/agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-api-data-binding.md b/agent-roadmap/archive/phase/control-plane-product-surface/milestones/control-plane-api-data-binding.md similarity index 91% rename from agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-api-data-binding.md rename to agent-roadmap/archive/phase/control-plane-product-surface/milestones/control-plane-api-data-binding.md index 239a29d..3d5ac80 100644 --- a/agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-api-data-binding.md +++ b/agent-roadmap/archive/phase/control-plane-product-surface/milestones/control-plane-api-data-binding.md @@ -12,7 +12,7 @@ Flutter 콘솔 스켈레톤의 Overview, Runners, Pipelines/Jobs, Executions, Ar ## 상태 -[검토중] +[완료] ## 승격 조건 @@ -47,16 +47,14 @@ UI 스켈레톤을 실제 Core 응답을 소비하는 제품 표면으로 전환 ## 완료 리뷰 -- 상태: 검토중 -- 요청일: 2026-06-17 +- 상태: 통과 +- 요청일: 2026-06-18 - 완료 근거: - `agent-task/archive/2026/06/m-control-plane-api-data-binding/03+01,02_preview_smoke/complete.log` 기준 PASS. - Roadmap Completion의 `preview-data-smoke`가 이 Milestone의 기존 Task id와 일치한다. - - Core `healthz`/`readyz`, preview HTTP 200, 원격 Playwright network capture, screenshot evidence로 API-backed 화면 상태 렌더링을 확인했다. -- 리뷰 필요: - - [ ] 사용자가 완료 결과를 확인했다 - - [ ] archive 이동을 승인했다 -- 리뷰 코멘트: 모든 기능 Task가 완료 근거와 함께 `[x]`가 되었고 구현 잠금은 해제 상태다. 사용자 완료 확인과 archive 이동 승인 후 완료 전환 후보다. + - Core `healthz`/`readyz`, preview HTTP 200, 원격 Playwright network capture, screenshot evidence로 API-backed 화면 상태 렌더링을 확인했다. 종료 전 코드레벨 재검토에서 `apps/client`, `packages/flutter/oto_console`, `services/core` 핵심 테스트와 analyze가 원격 임시 workspace 기준으로 통과했다. +- 리뷰 필요: 없음 +- 리뷰 코멘트: 모든 기능 Task가 완료 근거와 함께 `[x]`가 되었고 구현 잠금은 해제 상태다. 코드레벨 재검토에서 차단 이슈가 발견되지 않아 완료 전환 및 archive 이동을 수행했다. ## 범위 제외 diff --git a/agent-roadmap/phase/control-plane-product-surface/PHASE.md b/agent-roadmap/phase/control-plane-product-surface/PHASE.md index 9675752..47dfb9b 100644 --- a/agent-roadmap/phase/control-plane-product-surface/PHASE.md +++ b/agent-roadmap/phase/control-plane-product-surface/PHASE.md @@ -21,9 +21,12 @@ - [완료] Flutter 콘솔 스켈레톤 - 경로: `agent-roadmap/archive/phase/control-plane-product-surface/milestones/flutter-console-skeleton.md` - 요약: bootstrap과 runner/node 연결 기준을 바탕으로 `apps/client`와 `packages/flutter/oto_console`에 Control Plane 주요 화면, 상태 표시, 빈 상태를 갖춘 UI 스켈레톤을 만든다. -- [검토중] Control Plane API 데이터 바인딩 - - 경로: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-api-data-binding.md` +- [완료] Control Plane API 데이터 바인딩 + - 경로: `agent-roadmap/archive/phase/control-plane-product-surface/milestones/control-plane-api-data-binding.md` - 요약: UI 스켈레톤에 기존 OTO Core runner/job/execution/log/artifact API의 read path를 연결하고, 실제 데이터가 비어 있거나 실패할 때의 상태 표현을 검증한다. +- [계획] Control Plane 운영 액션 표면 + - 경로: `agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-operator-actions.md` + - 요약: 기존 OTO Core write endpoint를 UI/adapter action 표면으로 연결하되, 상태 전이와 실패/확인 UX는 SDD로 먼저 잠근다. ## Phase 경계 diff --git a/agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-operator-actions.md b/agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-operator-actions.md new file mode 100644 index 0000000..ff49c32 --- /dev/null +++ b/agent-roadmap/phase/control-plane-product-surface/milestones/control-plane-operator-actions.md @@ -0,0 +1,71 @@ +# Milestone: Control Plane 운영 액션 표면 + +## 위치 + +- Roadmap: `agent-roadmap/ROADMAP.md` +- Phase: `agent-roadmap/phase/control-plane-product-surface/PHASE.md` + +## 목표 + +Flutter 콘솔의 read-only 화면 위에 기존 OTO Core write endpoint를 사용하는 운영 액션 표면을 얹는다. +완료 후 사용자는 job 생성, execution 취소/상태 갱신 후보, runner maintenance 요청 같은 쓰기 동작을 명확한 확인/진행/성공/실패 상태로 다룰 수 있어야 하며, 새로운 API/schema/proto 변경은 기본 범위에서 제외한다. + +## 상태 + +[계획] + +## 승격 조건 + +- 없음 + +## 구현 잠금 + +- 상태: 잠금 +- SDD: 필요 +- SDD 문서: `agent-roadmap/sdd/control-plane-product-surface/control-plane-operator-actions/SDD.md` +- SDD 사유: UI에서 Core write endpoint를 호출하며 job/execution/runner lifecycle 상태 전이, 중복 요청, 실패/재시도, 사용자 확인 UX 경계를 먼저 고정해야 한다. +- 잠금 해제 조건: + - [ ] SDD 상태가 `[승인됨]`이고 SDD 잠금이 해제되어 있다. + - [ ] SDD `USER_REVIEW.md`가 없거나 승인/해결되었다. +- 결정 필요: 없음 + +## 범위 + +- `apps/client`의 Core write adapter와 `packages/flutter/oto_console`의 action surface contract 경계를 정의한다. +- 기존 Core HTTP endpoint를 소비하는 UI/adapter 작업으로 한정하고, 새로운 Core API/schema/proto 변경은 기본 범위에서 제외한다. +- action별 loading, disabled, confirmation, success, error state를 화면별로 구분한다. +- destructive 또는 lifecycle-changing action은 SDD에서 idempotency/retry/confirmation 기준을 고정한 뒤 구현한다. + +## 기능 + +### Epic: [ops-actions] Core write action binding + +기존 Control Plane read surface 위에 운영자가 실행할 수 있는 쓰기 액션의 안전한 UI/adapter 경계를 만든다. + +- [ ] [action-sdd] job/execution/runner write action의 source of truth, 상태 전이, 실패/재시도, 사용자 확인 UX, 검증 evidence를 SDD로 고정한다. 검증: `agent-roadmap/sdd/control-plane-product-surface/control-plane-operator-actions/SDD.md`가 승인되고 사용자 리뷰가 남아 있지 않다. +- [ ] [job-create] 기존 `POST /api/v1/jobs` 계약을 사용하는 job 생성 action adapter와 UI 상태를 연결한다. 검증: `cd apps/client && flutter test`, `cd packages/flutter/oto_console && flutter test`에서 job create action 상태 테스트가 통과한다. +- [ ] [execution-actions] 기존 execution/runner write endpoint를 사용하는 취소, report/log/artifact action 진입 상태를 연결한다. 검증: `cd apps/client && flutter test`, `cd packages/flutter/oto_console && flutter test`에서 execution action 상태 테스트가 통과한다. +- [ ] [runner-actions] 기존 runner self-update/status action 표면을 연결하고 실패/대기/완료 상태를 표시한다. 검증: `cd apps/client && flutter test`, `cd packages/flutter/oto_console && flutter test`에서 runner action 상태 테스트가 통과한다. + +## 완료 리뷰 + +- 상태: 없음 +- 요청일: 없음 +- 완료 근거: 없음 +- 검토 항목: 없음 +- 리뷰 코멘트: 없음 + +## 범위 제외 + +- 신규 Core API/schema/proto 계약을 기본 구현 범위로 삼지 않는다. 필요하면 SDD에서 별도 Milestone 또는 계약 변경으로 분리한다. +- auth, 권한, 감사 로그, durable persistence UI를 완성하지 않는다. +- runner가 실제 production job을 수행하는 end-to-end 운영 정책을 완성하지 않는다. + +## 작업 컨텍스트 + +- 관련 경로: `apps/client/**`, `packages/flutter/oto_console/**`, `services/core/internal/httpserver/**` +- 표준선(선택): `OtoConsoleConfig.serverHttpUrl`을 API base URL로 유지하고, UI 패키지는 transport 구현보다 상태/표현 contract에 집중한다. +- 표준선(선택): Core write endpoint는 기존 route와 DTO를 우선 소비하고, schema 확장이 필요하면 SDD에서 후속 계약 변경으로 분리한다. +- 선행 작업: `Control Plane API 데이터 바인딩` +- 후속 작업: 인증/권한, 감사 로그, 운영 대시보드 고도화 +- 확인 필요: SDD gate