From 3e0fd2a268e4cdfb545b98c39e44030ec4a9ab84 Mon Sep 17 00:00:00 2001 From: toki Date: Sun, 24 May 2026 06:59:35 +0900 Subject: [PATCH] update roadmap milestones --- .../milestones/external-integration.md | 12 ++-- .../milestones/plane-task-pipeline-design.md | 70 +++++++++---------- .../roadmap/milestones/plane-thin-e2e-loop.md | 49 +++++++------ .../project-workspace-management-ux.md | 12 ++-- .../roadmap/milestones/server-skeleton.md | 18 ++--- agent-ops/roadmap/milestones/workflow-core.md | 12 ++-- 6 files changed, 86 insertions(+), 87 deletions(-) diff --git a/agent-ops/roadmap/milestones/external-integration.md b/agent-ops/roadmap/milestones/external-integration.md index 7bcc0db..0f9502d 100644 --- a/agent-ops/roadmap/milestones/external-integration.md +++ b/agent-ops/roadmap/milestones/external-integration.md @@ -38,12 +38,12 @@ External Integration ## 필수 기능 -- [ ] Plane issue 생성, comment, status update adapter 확장 -- [ ] Jira issue 조회, comment, status transition adapter 구현 -- [ ] Mattermost 메시지 발송 adapter 구현 -- [ ] Agent Integrator 호출 경계 정의 -- [x] IOP OpenAI API Responses-compatible 경로를 NomadCode의 기본 실행 호출 경로로 정리 -- [x] direct model endpoint / Ollama fallback 표현과 설정을 IOP 경유 호출 기준으로 재분류 +- [ ] [plane-adapter-expand] Plane issue 생성, comment, status update adapter 확장 +- [ ] [jira-adapter] Jira issue 조회, comment, status transition adapter 구현 +- [ ] [mattermost-adapter] Mattermost 메시지 발송 adapter 구현 +- [ ] [agent-integrator] Agent Integrator 호출 경계 정의 +- [x] [iop-responses] IOP OpenAI API Responses-compatible 경로를 NomadCode의 기본 실행 호출 경로로 정리 +- [x] [model-reclass] direct model endpoint / Ollama fallback 표현과 설정을 IOP 경유 호출 기준으로 재분류 ## 완료 기준 diff --git a/agent-ops/roadmap/milestones/plane-task-pipeline-design.md b/agent-ops/roadmap/milestones/plane-task-pipeline-design.md index f9650de..9f13837 100644 --- a/agent-ops/roadmap/milestones/plane-task-pipeline-design.md +++ b/agent-ops/roadmap/milestones/plane-task-pipeline-design.md @@ -37,41 +37,41 @@ Work Item Provider Pipeline Design ## 필수 기능 -- [x] Plane work item -> core task 생성/연결 흐름을 현재 구현 기준으로 문서화한다. - - [x] 초기 entrypoint는 기존 `POST /api/integrations/plane/tasks`를 기준선으로 삼는다. - - [x] 생성 단계는 Plane work item 조회와 core task 저장까지만 담당한다. - - [x] 생성된 task는 `pending` 상태로 남기고 enqueue는 별도 단계에서 처리한다. - - [x] Plane 연결 정보는 provider-neutral external ref와 work item metadata에 함께 저장한다. -- [x] 자동 enqueue 여부와 사용자/운영 트리거 경계를 결정한다. - - [x] `backlog`에서 `todo`로 옮기는 주체는 사용자로 둔다. - - [x] `todo` 상태여도 agent 작업자가 지정된 work item만 자동 실행 후보로 본다. - - [x] provider API 인증은 일반 사용자형 service account token을 기본으로 둔다. - - [x] Plane dev service account token은 ignored local file `.env.plane.local`에 저장하고, NomadCode project Admin 권한으로 검증한다. - - [x] agent 작업자 지정 신호는 provider assignee가 `AGENT` 일반 사용자형 service account인 경우로 확정한다. - - [x] worker profile과 실행 단계는 core metadata와 label/comment prefix로 표현한다. - - [x] webhook-first trigger와 polling fallback의 세부 조건을 확정한다. - - [x] `worker:*`, `agent:*`, `phase:*` label은 실행 조건이 아니라 worker profile/실행 상태 표시용으로 둔다. -- [x] work item provider adapter interface를 설계한다. - - [x] core pipeline이 사용할 provider-neutral DTO를 정의한다. - - [x] work item 조회, comment 작성, status/state 변경, label projection 경계를 interface로 분리한다. - - [x] Plane adapter와 Jira adapter가 같은 interface를 구현할 수 있는지 검증한다. - - [x] provider별 상태/라벨/comment 매핑은 adapter 설정으로 분리한다. -- [ ] 현재 Plane 고정 진입부를 provider-neutral 구조로 리팩토링한다. - - [ ] `POST /api/integrations/plane/tasks`의 Plane 전용 흐름을 generic pipeline service 아래로 옮긴다. - - [x] HTTP handler가 Plane 타입과 직접 결합하지 않도록 요청 DTO와 변환 책임을 분리한다. - - [x] `buildPlaneCreateTaskInput`의 core task 생성 로직을 provider-neutral mapper로 분리한다. - - [x] 기존 Plane endpoint는 compatibility entrypoint로 유지하거나 generic endpoint로 대체할지 결정한다. -- [ ] provider-neutral 상태와 projection 계약을 확정한다. - - [x] board state는 `backlog`, `todo`, `in_progress`, `testing`, `complete`, `cancel`로 둔다. - - [x] `in_progress` 내부 agent 상태는 core task metadata를 canonical source로 둔다. - - [x] Plane/Jira provider projection은 label-first로 둔다. - - [x] provider 본문(description)은 agent 실행 상태 저장소로 쓰지 않는다. - - [ ] core task metadata schema와 provider label mapping을 구현 대상으로 확정한다. -- [ ] 완료/실패 결과의 provider comment/status update 정책을 정한다. - - [x] agent 단계 완료 기록은 prefix와 이모지가 있는 comment로 남기는 방향을 샘플 검증한다. - - [ ] comment prefix 세트와 작성 타이밍을 확정한다. -- [ ] 중복 생성 방지와 재시도 시 식별 기준을 정한다. -- [ ] Workflow Core에서 처리할 lifecycle, retry, timeout, notification 요구사항을 정리한다. +- [x] [create-flow] Plane work item -> core task 생성/연결 흐름을 현재 구현 기준으로 문서화한다. + - [x] [create-entrypoint] 초기 entrypoint는 기존 `POST /api/integrations/plane/tasks`를 기준선으로 삼는다. + - [x] [create-scope] 생성 단계는 Plane work item 조회와 core task 저장까지만 담당한다. + - [x] [create-pending] 생성된 task는 `pending` 상태로 남기고 enqueue는 별도 단계에서 처리한다. + - [x] [create-metadata] Plane 연결 정보는 provider-neutral external ref와 work item metadata에 함께 저장한다. +- [x] [enqueue-trigger] 자동 enqueue 여부와 사용자/운영 트리거 경계를 결정한다. + - [x] [user-todo] `backlog`에서 `todo`로 옮기는 주체는 사용자로 둔다. + - [x] [todo-assignee] `todo` 상태여도 agent 작업자가 지정된 work item만 자동 실행 후보로 본다. + - [x] [service-token] provider API 인증은 일반 사용자형 service account token을 기본으로 둔다. + - [x] [token-local] Plane dev service account token은 ignored local file `.env.plane.local`에 저장하고, NomadCode project Admin 권한으로 검증한다. + - [x] [assignee-agent] agent 작업자 지정 신호는 provider assignee가 `AGENT` 일반 사용자형 service account인 경우로 확정한다. + - [x] [profile-metadata] worker profile과 실행 단계는 core metadata와 label/comment prefix로 표현한다. + - [x] [trigger-webhook] webhook-first trigger와 polling fallback의 세부 조건을 확정한다. + - [x] [labels-display] `worker:*`, `agent:*`, `phase:*` label은 실행 조건이 아니라 worker profile/실행 상태 표시용으로 둔다. +- [x] [adapter-interface] work item provider adapter interface를 설계한다. + - [x] [dto-contract] core pipeline이 사용할 provider-neutral DTO를 정의한다. + - [x] [provider-facets] work item 조회, comment 작성, status/state 변경, label projection 경계를 interface로 분리한다. + - [x] [adapter-mapping] Plane adapter와 Jira adapter가 같은 interface를 구현할 수 있는지 검증한다. + - [x] [provider-config] provider별 상태/라벨/comment 매핑은 adapter 설정으로 분리한다. +- [ ] [generic-pipeline] 현재 Plane 고정 진입부를 provider-neutral 구조로 리팩토링한다. + - [ ] [route-service] `POST /api/integrations/plane/tasks`의 Plane 전용 흐름을 generic pipeline service 아래로 옮긴다. + - [x] [handler-dto] HTTP handler가 Plane 타입과 직접 결합하지 않도록 요청 DTO와 변환 책임을 분리한다. + - [x] [task-mapper] `buildPlaneCreateTaskInput`의 core task 생성 로직을 provider-neutral mapper로 분리한다. + - [x] [compat-route] 기존 Plane endpoint는 compatibility entrypoint로 유지하거나 generic endpoint로 대체할지 결정한다. +- [ ] [projection-contract] provider-neutral 상태와 projection 계약을 확정한다. + - [x] [board-states] board state는 `backlog`, `todo`, `in_progress`, `testing`, `complete`, `cancel`로 둔다. + - [x] [agent-metadata] `in_progress` 내부 agent 상태는 core task metadata를 canonical source로 둔다. + - [x] [label-first] Plane/Jira provider projection은 label-first로 둔다. + - [x] [desc-readonly] provider 본문(description)은 agent 실행 상태 저장소로 쓰지 않는다. + - [ ] [metadata-schema] core task metadata schema와 provider label mapping을 구현 대상으로 확정한다. +- [ ] [result-policy] 완료/실패 결과의 provider comment/status update 정책을 정한다. + - [x] [comment-prefix-sample] agent 단계 완료 기록은 prefix와 이모지가 있는 comment로 남기는 방향을 샘플 검증한다. + - [ ] [comment-timing] comment prefix 세트와 작성 타이밍을 확정한다. +- [ ] [idempotency] 중복 생성 방지와 재시도 시 식별 기준을 정한다. +- [ ] [workflow-handoff] Workflow Core에서 처리할 lifecycle, retry, timeout, notification 요구사항을 정리한다. ## 완료 기준 diff --git a/agent-ops/roadmap/milestones/plane-thin-e2e-loop.md b/agent-ops/roadmap/milestones/plane-thin-e2e-loop.md index 1f31368..c133d5e 100644 --- a/agent-ops/roadmap/milestones/plane-thin-e2e-loop.md +++ b/agent-ops/roadmap/milestones/plane-thin-e2e-loop.md @@ -33,25 +33,25 @@ Plane Communication Foundation ## 필수 기능 -- [x] Plane 연결 설정과 인증 계약을 정한다. - - [x] `PLANE_BASE_URL=https://plane.toki-labs.com` 기준 endpoint prefix를 확인한다. - - [x] Plane API key를 `PLANE_TOKEN`으로 주입하고 `X-Api-Key` header로 호출한다. -- [x] Plane adapter의 최소 통신 기능을 구현한다. - - [x] work item detail 조회 - - [x] work item comment 생성 - - [x] work item state update - - [x] non-2xx 응답과 설정 누락 오류를 진단 가능하게 반환 -- [x] core task에 외부 참조 저장 토대를 둔다. - - [x] `external_provider`, `external_id`, `external_url`, `external_metadata` 등 provider-neutral 필드를 둔다. - - [x] Plane workspace/project/work item id와 external URL을 metadata에 보존할 수 있게 한다. - - [x] Plane state id를 metadata에 보존할 수 있게 한다. -- [x] 실제 Plane 통신 smoke를 검증한다. - - [x] 인증 성공/실패를 구분해 확인한다. - - [x] 테스트용 Plane work item에 comment를 남길 수 있다. - - [x] 테스트용 Plane work item state를 변경할 수 있다. -- [x] 문서에 현재 통신 토대의 사용법과 한계를 정리한다. - - [x] `services/core/README.md`에 Plane 설정, 수동 task 생성 예시, 현재 endpoint 한계를 정리한다. - - [x] 실제 smoke 절차를 운영 문서에 보강한다. +- [x] [plane-auth] Plane 연결 설정과 인증 계약을 정한다. + - [x] [plane-endpoint] `PLANE_BASE_URL=https://plane.toki-labs.com` 기준 endpoint prefix를 확인한다. + - [x] [plane-token] Plane API key를 `PLANE_TOKEN`으로 주입하고 `X-Api-Key` header로 호출한다. +- [x] [plane-adapter] Plane adapter의 최소 통신 기능을 구현한다. + - [x] [plane-read] work item detail 조회 + - [x] [plane-comment] work item comment 생성 + - [x] [plane-state] work item state update + - [x] [plane-errors] non-2xx 응답과 설정 누락 오류를 진단 가능하게 반환 +- [x] [external-ref] core task에 외부 참조 저장 토대를 둔다. + - [x] [external-fields] `external_provider`, `external_id`, `external_url`, `external_metadata` 등 provider-neutral 필드를 둔다. + - [x] [plane-metadata] Plane workspace/project/work item id와 external URL을 metadata에 보존할 수 있게 한다. + - [x] [plane-state-meta] Plane state id를 metadata에 보존할 수 있게 한다. +- [x] [plane-smoke] 실제 Plane 통신 smoke를 검증한다. + - [x] [smoke-auth] 인증 성공/실패를 구분해 확인한다. + - [x] [smoke-comment] 테스트용 Plane work item에 comment를 남길 수 있다. + - [x] [smoke-state] 테스트용 Plane work item state를 변경할 수 있다. +- [x] [plane-docs] 문서에 현재 통신 토대의 사용법과 한계를 정리한다. + - [x] [readme-plane] `services/core/README.md`에 Plane 설정, 수동 task 생성 예시, 현재 endpoint 한계를 정리한다. + - [x] [ops-smoke] 실제 smoke 절차를 운영 문서에 보강한다. ## 완료 기준 @@ -78,7 +78,7 @@ Plane Communication Foundation - 관련 경로: `services/core/internal/adapters/plane/`, `services/core/internal/storage/`, `services/core/internal/workflow/`, `services/core/migrations/`, `services/core/queries/`, `services/core/README.md` - 선행 작업: Server Skeleton -- 후속 작업: Plane Task Pipeline Design, Workflow Core +- 후속 작업: Work Item Provider Pipeline Design, Workflow Core - 확인된 dev Plane: - Base URL: `https://plane.toki-labs.com` - workspace slug: `general` @@ -91,8 +91,7 @@ Plane Communication Foundation - HTTP endpoint는 Plane work item 조회 후 pending task와 external ref를 수동 생성하는 얇은 경로만 제공한다. - 실제 Plane smoke 절차와 설정 예시는 `services/core/README.md`에 남아 있다. -## 메모 - -- 이 마일스톤은 Plane과의 통신 경계와 데이터 토대만 안정화한다. -- pipeline 설계가 정리되기 전까지 scheduler/workflow에 Plane 자동 발행 정책을 더 넣지 않는다. -- 이미 구현된 코드가 이 범위를 넘어간 경우, 리뷰 단계에서 유지/축소/후속 분리 여부를 판단한다. +- 메모: + - 이 마일스톤은 Plane과의 통신 경계와 데이터 토대만 안정화한다. + - pipeline 설계가 정리되기 전까지 scheduler/workflow에 Plane 자동 발행 정책을 더 넣지 않는다. + - 이미 구현된 코드가 이 범위를 넘어간 경우, 리뷰 단계에서 유지/축소/후속 분리 여부를 판단한다. diff --git a/agent-ops/roadmap/milestones/project-workspace-management-ux.md b/agent-ops/roadmap/milestones/project-workspace-management-ux.md index 4d3c05c..baeb5ec 100644 --- a/agent-ops/roadmap/milestones/project-workspace-management-ux.md +++ b/agent-ops/roadmap/milestones/project-workspace-management-ux.md @@ -37,12 +37,12 @@ Project Workspace Management UX ## 필수 기능 -- [ ] 프로젝트 단위 제어 화면의 공통 capability를 정의한다. -- [ ] mobile 상단탭 기반 프로젝트 관리 구조를 정의한다. -- [ ] desktop 탭 기반 프로젝트 관리 구조를 정의한다. -- [ ] desktop 프로젝트 단위 새창을 code-server와 Agent Chat을 포함한 프로젝트 제어 확장 표면으로 정의한다. -- [ ] desktop은 mobile에서 가능한 프로젝트 관리 기능을 모두 포함한다는 parity 기준을 정한다. -- [ ] IOP OpenAI API Responses-compatible 호출 결과, task 상태, 파일 변경 결과를 UX에 표시하는 기준을 정한다. +- [ ] [common-capability] 프로젝트 단위 제어 화면의 공통 capability를 정의한다. +- [ ] [mobile-tabs] mobile 상단탭 기반 프로젝트 관리 구조를 정의한다. +- [ ] [desktop-tabs] desktop 탭 기반 프로젝트 관리 구조를 정의한다. +- [ ] [desktop-window] desktop 프로젝트 단위 새창을 code-server와 Agent Chat을 포함한 프로젝트 제어 확장 표면으로 정의한다. +- [ ] [parity] desktop은 mobile에서 가능한 프로젝트 관리 기능을 모두 포함한다는 parity 기준을 정한다. +- [ ] [iop-result-ux] IOP OpenAI API Responses-compatible 호출 결과, task 상태, 파일 변경 결과를 UX에 표시하는 기준을 정한다. ## 완료 기준 diff --git a/agent-ops/roadmap/milestones/server-skeleton.md b/agent-ops/roadmap/milestones/server-skeleton.md index 6da490a..4b8a2a3 100644 --- a/agent-ops/roadmap/milestones/server-skeleton.md +++ b/agent-ops/roadmap/milestones/server-skeleton.md @@ -31,15 +31,15 @@ Server Skeleton ## 필수 기능 -- [x] Go HTTP server 실행 골격 -- [x] health / readiness endpoint -- [x] task 생성, 조회, 목록, enqueue API -- [x] PostgreSQL 기반 task 저장 -- [x] goose migration과 sqlc 기반 DB query 생성 구조 -- [x] River 기반 task job -- [x] 초기 외부 실행 호출 경계 -- [x] Plane Adapter stub -- [x] Mattermost Adapter stub +- [x] [server-run] Go HTTP server 실행 골격 +- [x] [health-ready] health / readiness endpoint +- [x] [task-api] task 생성, 조회, 목록, enqueue API +- [x] [task-storage] PostgreSQL 기반 task 저장 +- [x] [db-codegen] goose migration과 sqlc 기반 DB query 생성 구조 +- [x] [river-job] River 기반 task job +- [x] [external-boundary] 초기 외부 실행 호출 경계 +- [x] [plane-stub] Plane Adapter stub +- [x] [mattermost-stub] Mattermost Adapter stub ## 완료 기준 diff --git a/agent-ops/roadmap/milestones/workflow-core.md b/agent-ops/roadmap/milestones/workflow-core.md index 3ec9fbb..67dfa89 100644 --- a/agent-ops/roadmap/milestones/workflow-core.md +++ b/agent-ops/roadmap/milestones/workflow-core.md @@ -36,11 +36,11 @@ Workflow Core ## 필수 기능 -- [ ] task lifecycle 상태 모델 점검 -- [ ] scheduler와 workflow service의 상태 전이 책임 정리 -- [ ] 실패 task 처리 기준 -- [ ] retry와 timeout의 최소 정책 -- [ ] notification event 모델과 발행 지점 +- [ ] [lifecycle-model] task lifecycle 상태 모델 점검 +- [ ] [transition-ownership] scheduler와 workflow service의 상태 전이 책임 정리 +- [ ] [failure-policy] 실패 task 처리 기준 +- [ ] [retry-timeout] retry와 timeout의 최소 정책 +- [ ] [notification-model] notification event 모델과 발행 지점 ## 완료 기준 @@ -60,6 +60,6 @@ Workflow Core - 이전 출처: `services/core/README.md`의 `## 단계별 다음 작업` - 주요 작업 영역: `services/core/internal/workflow/`, `services/core/internal/scheduler/`, `services/core/internal/notification/` -- 선행 작업: Plane Communication Foundation, Plane Task Pipeline Design +- 선행 작업: Plane Communication Foundation, Work Item Provider Pipeline Design - 후속 작업: External Integration - 검증 기준: scheduler, persistence, adapter behavior를 크게 바꾸면 관련 테스트를 함께 갱신한다.