update domain rules and add roadmap

This commit is contained in:
toki 2026-05-21 18:42:36 +09:00
parent 611ae9d105
commit 4d5da98365
11 changed files with 253 additions and 36 deletions

View file

@ -0,0 +1,43 @@
# NomadCode 로드맵
## 전체 목표
NomadCode는 모바일 앱, 웹 콘솔, core 서비스, 공유 계약, agent-operation 규칙을 하나의 원레포로 묶어 AI-assisted development workflow를 조율하는 프로젝트다.
현재 로드맵은 기존 `services/core/README.md`의 단계별 다음 작업을 `agent-ops/roadmap/` 구조로 옮긴 것이다. 범위는 우선 core 백엔드 오케스트레이션의 서버 골격, workflow 안정화, 외부 통합 준비에 둔다.
## 현재 위치
- 현재 Phase: Phase 1. Server Skeleton
- 기본 Milestone: M01 Server Skeleton
- 상태: 진행 중
## Phase 개요
### Phase 1. Server Skeleton
서버 실행 골격, task 저장 구조, 로컬 모델 호출 기반 비동기 job 실행, Adapter stub을 구성한다.
### Phase 2. Workflow Core
task 상태 전이와 enqueue / running / completed / failed 흐름을 안정화하고 retry, timeout, notification event의 기본 구조를 정리한다.
### Phase 3. External Integration
Plane, Mattermost, Agent Integrator, IOP 연결을 실제 통합 흐름으로 확장한다.
## Milestone 인덱스
| Milestone | Phase | 상태 | 문서 |
|-----------|-------|------|------|
| M01 Server Skeleton | Phase 1. Server Skeleton | 진행 중 | `agent-ops/roadmap/milestones/M01-server-skeleton.md` |
| M02 Workflow Core | Phase 2. Workflow Core | 계획 | `agent-ops/roadmap/milestones/M02-workflow-core.md` |
| M03 External Integration | Phase 3. External Integration | 계획 | `agent-ops/roadmap/milestones/M03-external-integration.md` |
## 로딩 정책
- 일반 기능 작업에서는 이 전체 로드맵을 매번 읽지 않는다.
- 기능 추가, 구조 변경, 스킬 추가/수정, 문서 구조 변경 작업에서는 먼저 `agent-ops/roadmap/current.md`를 읽는다.
- 요청이 기본 Milestone 범위에 맞으면 기본 Milestone 문서를 같은 세션에서 1회 읽는다.
- 요청이 기본 Milestone과 맞지 않으면 `current.md`의 진행 중인 Milestone 목록에서 가장 관련 있는 Milestone 문서를 같은 세션에서 1회 읽는다.
- Phase 전환, Milestone 추가/수정, 전체 로드맵 갱신 요청에서만 `agent-ops/roadmap/ROADMAP.md`를 읽는다.

View file

@ -0,0 +1,9 @@
# 현재 로드맵 컨텍스트
- 현재 Phase: Phase 1. Server Skeleton
- 기본 Milestone: M01 Server Skeleton
- 기본 Milestone 파일: agent-ops/roadmap/milestones/M01-server-skeleton.md
## 진행 중인 Milestone
- M01 Server Skeleton: agent-ops/roadmap/milestones/M01-server-skeleton.md

View file

@ -0,0 +1,55 @@
# M01 Server Skeleton
## 목표
core 서비스의 서버 실행 골격을 구성하고, task 저장 구조와 로컬 모델 호출 기반 비동기 job 실행 흐름을 마련한다. 외부 통합은 실제 호출 전 단계의 Adapter stub까지 둔다.
## 단계
- Phase: Phase 1. Server Skeleton
## 상태
- 진행 중
## 범위
- 서버 실행 골격 구성
- task 저장 구조 구성
- 로컬 모델 호출 기반 비동기 job 실행
- Adapter stub 생성
## 필수 기능
- Go HTTP server 실행 골격
- health / readiness endpoint
- task 생성, 조회, 목록, enqueue API
- PostgreSQL 기반 task 저장
- goose migration과 sqlc 기반 DB query 생성 구조
- River 기반 task job
- 모델 호출 경로
- Plane Adapter stub
- Mattermost Adapter stub
## 완료 기준
- core 서버를 로컬에서 실행할 수 있다.
- task 생성부터 조회, enqueue까지 기본 API 흐름이 동작한다.
- DB migration과 sqlc query 생성 흐름이 정리되어 있다.
- River job이 task를 처리하는 기본 경로를 가진다.
- Plane과 Mattermost는 실제 API 호출 전 stub 경계로 분리되어 있다.
## 범위 제외
- 실제 Plane API 호출
- 실제 Mattermost 메시지 발송
- IOP native protocol 연동
- Agent Integrator 연동
- 복잡한 권한 정책
- 복잡한 workflow DSL
## 작업 컨텍스트
- 이전 출처: `services/core/README.md``## 단계별 다음 작업`
- 주요 작업 영역: `services/core/`
- 검증 기준: core 변경은 `go test ./...` 또는 `bin/test`를 우선 사용한다.

View file

@ -0,0 +1,48 @@
# M02 Workflow Core
## 목표
task 상태 전이를 정리하고 enqueue / running / completed / failed 흐름을 안정화한다. retry, timeout, notification event의 기본 구조를 추가해 core workflow의 운영 기준을 만든다.
## 단계
- Phase: Phase 2. Workflow Core
## 상태
- 계획
## 범위
- task 상태 전이 정리
- enqueue / running / completed / failed 흐름 안정화
- retry / timeout 기본 구조 추가
- notification event 구조 정리
## 필수 기능
- task lifecycle 상태 모델 점검
- scheduler와 workflow service의 상태 전이 책임 정리
- 실패 task 처리 기준
- retry와 timeout의 최소 정책
- notification event 모델과 발행 지점
## 완료 기준
- task가 enqueue 이후 running, completed, failed 상태로 일관되게 전이된다.
- 실패와 timeout이 관찰 가능한 상태로 남는다.
- retry 정책의 최소 동작 방식이 구현되거나 명확히 문서화된다.
- notification event가 workflow 상태 변화와 연결된다.
## 범위 제외
- 실제 외부 협업 도구로 notification 발송
- 복잡한 workflow DSL
- 고급 권한 정책
- multi-tenant 운영 정책
## 작업 컨텍스트
- 이전 출처: `services/core/README.md``## 단계별 다음 작업`
- 주요 작업 영역: `services/core/internal/workflow/`, `services/core/internal/scheduler/`, `services/core/internal/notification/`
- 검증 기준: scheduler, persistence, adapter behavior를 크게 바꾸면 관련 테스트를 함께 갱신한다.

View file

@ -0,0 +1,52 @@
# M03 External Integration
## 목표
Plane, Mattermost, Agent Integrator, IOP 연결을 stub 또는 호환 호출 경로에서 실제 통합 흐름으로 확장한다.
## 단계
- Phase: Phase 3. External Integration
## 상태
- 계획
## 범위
- Plane issue 생성 / comment / status update 구현
- Mattermost 메시지 발송 구현
- Agent Integrator 호출 구조 추가
- IOP 호출 구조 추가
- IOP OpenAI-compatible API 경로 정리
- IOP A2A JSON-RPC 경로 정리
## 필수 기능
- Plane issue 생성, comment, status update adapter 구현
- Mattermost 메시지 발송 adapter 구현
- Agent Integrator 호출 경계 정의
- IOP OpenAI-compatible API를 단순 모델/chat completion 호환 호출에 사용
- IOP A2A JSON-RPC 경로를 외부 agent 작업 위임과 task 상태, artifact, cancel 흐름 공유에 사용
## 완료 기준
- core가 Plane에 issue, comment, status update를 요청할 수 있다.
- core가 Mattermost에 메시지를 발송할 수 있다.
- Agent Integrator 또는 그 대체 연결 지점이 명확히 정의되어 있다.
- IOP compatible 호출 경로가 core workflow와 연결된다.
- 외부 provider별 세부 구현이 adapter 경계 밖으로 새지 않는다.
## 범위 제외
- Outline / Forgejo / Nextcloud 연동
- MCP 서버
- Web Agent UI
- Flutter 앱 기능 구현
- IOP native protocol의 상세 구현은 별도 확정 전까지 제외한다.
## 작업 컨텍스트
- 이전 출처: `services/core/README.md``## 단계별 다음 작업`
- 주요 작업 영역: `services/core/internal/adapters/`, `services/core/internal/scheduler/`, `services/core/internal/workflow/`
- 확인 필요: IOP native protocol과 Agent Integrator의 최종 계약은 구현 전 별도 확인이 필요하다.

View file

@ -8,13 +8,18 @@ NomadCode의 백엔드 오케스트레이션 도메인이다. workflow, scheduli
- `services/core/cmd/` — 서버 실행 entrypoint. - `services/core/cmd/` — 서버 실행 entrypoint.
- `services/core/internal/agent/` — agent 모델과 실행 단위. - `services/core/internal/agent/` — agent 모델과 실행 단위.
- `services/core/internal/config/` — 환경 변수 기반 core 설정 로딩.
- `services/core/internal/model/` — 모델 호출 추상 인터페이스와 입출력 타입.
- `services/core/internal/workflow/` — workflow 모델과 서비스. - `services/core/internal/workflow/` — workflow 모델과 서비스.
- `services/core/internal/scheduler/` — River 기반 작업 스케줄링과 job 정의. - `services/core/internal/scheduler/` — River 기반 작업 스케줄링과 job 정의.
- `services/core/internal/notification/` — task notification 모델과 발행 서비스.
- `services/core/internal/http/` — HTTP router, handlers, middleware. - `services/core/internal/http/` — HTTP router, handlers, middleware.
- `services/core/internal/db/` — SQLC 생성 코드, DB pool, persistence 모델. - `services/core/internal/db/` — SQLC 생성 코드, DB pool, persistence 모델.
- `services/core/internal/storage/` — 저장소 abstraction. - `services/core/internal/storage/` — 저장소 abstraction.
- `services/core/internal/adapters/` — OpenAI, A2A, Mattermost, Plane 등 외부 통합. - `services/core/internal/adapters/` — OpenAI, A2A, Mattermost, Plane 등 외부 통합.
- `services/core/migrations/`, `services/core/queries/`, `services/core/sqlc.yaml` — DB schema/query 계약. - `services/core/migrations/`, `services/core/queries/`, `services/core/sqlc.yaml` — DB schema/query 계약.
- `services/core/go.mod`, `services/core/go.sum` — core Go module dependency boundary.
- `services/core/README.md`, `services/core/goose.env.example` — core 실행/운영 문서와 설정 예시.
- `services/core/bin/`, `services/core/Makefile`, `services/core/Dockerfile`, `services/core/docker-compose.yml` — backend-local 개발/배포 도구. - `services/core/bin/`, `services/core/Makefile`, `services/core/Dockerfile`, `services/core/docker-compose.yml` — backend-local 개발/배포 도구.
## 제외 경로 ## 제외 경로
@ -27,8 +32,11 @@ NomadCode의 백엔드 오케스트레이션 도메인이다. workflow, scheduli
- `internal/http/router.go` — HTTP route 조립. - `internal/http/router.go` — HTTP route 조립.
- `internal/http/handlers.go` — API handler. - `internal/http/handlers.go` — API handler.
- `internal/config/config.go` — 환경 변수 기반 설정 로딩.
- `internal/model/model.go` — 모델 client interface와 generation DTO.
- `internal/scheduler/river.go` — River scheduler 연결. - `internal/scheduler/river.go` — River scheduler 연결.
- `internal/scheduler/jobs.go` — background job 정의. - `internal/scheduler/jobs.go` — background job 정의.
- `internal/notification/service.go` — task 완료 notification 발행.
- `internal/adapters/openai/client.go` — OpenAI integration. - `internal/adapters/openai/client.go` — OpenAI integration.
- `internal/adapters/a2a/client.go` — A2A integration. - `internal/adapters/a2a/client.go` — A2A integration.
- `internal/db/tasks.sql.go` — SQLC generated query boundary. - `internal/db/tasks.sql.go` — SQLC generated query boundary.
@ -38,6 +46,7 @@ NomadCode의 백엔드 오케스트레이션 도메인이다. workflow, scheduli
- Go package 경계는 `internal/<domain>` 단위로 유지한다. - Go package 경계는 `internal/<domain>` 단위로 유지한다.
- DB 변경은 migration, query, generated code, test를 함께 갱신한다. - DB 변경은 migration, query, generated code, test를 함께 갱신한다.
- 외부 서비스 호출은 `internal/adapters/<provider>` 아래에 격리한다. - 외부 서비스 호출은 `internal/adapters/<provider>` 아래에 격리한다.
- 환경 변수 기본값과 alias는 `internal/config`에서 관리하고 README의 실행 예시와 어긋나지 않게 유지한다.
- scheduler 변경은 가능한 한 job 단위 테스트를 추가한다. - scheduler 변경은 가능한 한 job 단위 테스트를 추가한다.
- HTTP API 변경은 web/mobile 영향과 contracts 반영 필요성을 함께 판단한다. - HTTP API 변경은 web/mobile 영향과 contracts 반영 필요성을 함께 판단한다.

View file

@ -10,7 +10,8 @@ NomadCode의 Flutter 모바일/데스크톱 클라이언트 도메인이다. 앱
- `apps/mobile/lib/services/` — auth, notification, background handlers. - `apps/mobile/lib/services/` — auth, notification, background handlers.
- `apps/mobile/test/` — Flutter widget/service tests. - `apps/mobile/test/` — Flutter widget/service tests.
- `apps/mobile/android/`, `apps/mobile/ios/`, `apps/mobile/macos/`, `apps/mobile/linux/`, `apps/mobile/windows/`, `apps/mobile/web/` — platform-specific runner/config. - `apps/mobile/android/`, `apps/mobile/ios/`, `apps/mobile/macos/`, `apps/mobile/linux/`, `apps/mobile/windows/`, `apps/mobile/web/` — platform-specific runner/config.
- `apps/mobile/pubspec.yaml`, `apps/mobile/analysis_options.yaml` — Dart/Flutter dependencies and analysis. - `apps/mobile/pubspec.yaml`, `apps/mobile/pubspec.lock`, `apps/mobile/analysis_options.yaml` — Dart/Flutter dependencies and analysis.
- `apps/mobile/README.md`, `apps/mobile/push-notification-todo.md` — mobile 운영 메모와 push notification 작업 메모.
## 제외 경로 ## 제외 경로
@ -24,12 +25,16 @@ NomadCode의 Flutter 모바일/데스크톱 클라이언트 도메인이다. 앱
- `lib/services/mattermost_auth_service.dart` — Mattermost auth flow. - `lib/services/mattermost_auth_service.dart` — Mattermost auth flow.
- `lib/services/push_notification_service.dart` — foreground/background notification setup. - `lib/services/push_notification_service.dart` — foreground/background notification setup.
- `lib/services/push_notification_background.dart` — background message handler. - `lib/services/push_notification_background.dart` — background message handler.
- `android/app/src/main/java/com/tokilabs/mattermost/MattermostFirebaseMessagingService.kt` — Android FCM 수신과 Flutter EventChannel bridge.
- `android/app/src/main/java/com/tokilabs/mattermost/NotificationReplyBroadcastReceiver.java` — Android inline reply 처리.
- `android/app/src/main/java/com/tokilabs/mattermost/helpers/` — Android notification, DB, network helper.
- `test/widget_test.dart` — baseline widget test. - `test/widget_test.dart` — baseline widget test.
## 유지할 패턴 ## 유지할 패턴
- platform-specific permission/capability 변경은 해당 platform 디렉터리와 Dart service 변경을 같이 확인한다. - platform-specific permission/capability 변경은 해당 platform 디렉터리와 Dart service 변경을 같이 확인한다.
- Firebase Messaging 변경은 foreground, background, permission flow를 함께 검토한다. - Firebase Messaging 변경은 foreground, background, permission flow를 함께 검토한다.
- Android native push 변경은 Kotlin/Java receiver/service, manifest, Dart bridge 영향을 함께 확인한다.
- public API 호출을 추가하면 contracts/core 영향 여부를 확인한다. - public API 호출을 추가하면 contracts/core 영향 여부를 확인한다.
- `flutter test`를 기본 검증으로 사용한다. - `flutter test`를 기본 검증으로 사용한다.
- 현재 baseline의 `avoid_print` info는 별도 cleanup 작업으로 다루고, 기능 변경과 섞지 않는다. - 현재 baseline의 `avoid_print` info는 별도 cleanup 작업으로 다루고, 기능 변경과 섞지 않는다.
@ -44,6 +49,7 @@ NomadCode의 Flutter 모바일/데스크톱 클라이언트 도메인이다. 앱
## 금지 사항 ## 금지 사항
- Android/iOS/macOS 권한 변경을 Dart service 변경 없이 단독으로 넣지 않는다. - Android/iOS/macOS 권한 변경을 Dart service 변경 없이 단독으로 넣지 않는다.
- Android native notification helper 변경을 FCM service와 reply/dismiss receiver 영향 검토 없이 단독으로 넣지 않는다.
- Firebase 초기화/handler 변경을 테스트나 수동 검증 메모 없이 마무리하지 않는다. - Firebase 초기화/handler 변경을 테스트나 수동 검증 메모 없이 마무리하지 않는다.
- generated/platform build output을 의도 없이 커밋하지 않는다. - generated/platform build output을 의도 없이 커밋하지 않는다.
- mobile 내부에 별도 `agent-ops` scaffold를 다시 만들지 않는다. - mobile 내부에 별도 `agent-ops` scaffold를 다시 만들지 않는다.

View file

@ -13,7 +13,8 @@ NomadCode의 브라우저 운영 콘솔 도메인이다. 프로젝트/agent work
- `apps/web/src/stores/` — Zustand 기반 client state. - `apps/web/src/stores/` — Zustand 기반 client state.
- `apps/web/src/api/` — backend API client. - `apps/web/src/api/` — backend API client.
- `apps/web/src/styles/` — global style. - `apps/web/src/styles/` — global style.
- `apps/web/package.json`, `apps/web/vite.config.ts`, `apps/web/tsconfig.json` — web build/tooling. - `apps/web/index.html`, `apps/web/.env.example` — Vite HTML entry와 환경 변수 예시.
- `apps/web/package.json`, `apps/web/package-lock.json`, `apps/web/vite.config.ts`, `apps/web/tsconfig.json` — web build/tooling.
## 제외 경로 ## 제외 경로
@ -23,13 +24,18 @@ NomadCode의 브라우저 운영 콘솔 도메인이다. 프로젝트/agent work
## 주요 구성 요소 ## 주요 구성 요소
- `src/app/App.tsx` — QueryClient와 router provider 조립.
- `src/app/router.tsx` — web route 구성. - `src/app/router.tsx` — web route 구성.
- `src/layout/AppShell.tsx` — 전체 shell. - `src/layout/AppShell.tsx` — 전체 shell.
- `src/layout/AgentSidebar.tsx` — agent context/sidebar 영역. - `src/layout/AgentSidebar.tsx` — agent context/sidebar 영역.
- `src/routes/AgentPage.tsx` — agent workspace page. - `src/routes/AgentPage.tsx` — agent workspace page.
- `src/routes/ProjectsPage.tsx` — project workspace page. - `src/routes/ProjectsPage.tsx` — project workspace page.
- `src/routes/SettingsPage.tsx` — integration settings page.
- `src/stores/agentStore.ts` — agent interaction state. - `src/stores/agentStore.ts` — agent interaction state.
- `src/stores/layoutStore.ts` — shell navigation/sidebar state.
- `src/stores/projectStore.ts` — project workspace state.
- `src/api/client.ts` — API 호출 공통 client. - `src/api/client.ts` — API 호출 공통 client.
- `src/components/settings/IntegrationStatus.tsx` — integration 상태 표시와 테스트 액션 UI.
## 유지할 패턴 ## 유지할 패턴
@ -37,6 +43,7 @@ NomadCode의 브라우저 운영 콘솔 도메인이다. 프로젝트/agent work
- API 호출 형태가 바뀌면 `src/api`를 먼저 갱신하고, 필요 시 contracts/core 변경을 같은 작업에 포함한다. - API 호출 형태가 바뀌면 `src/api`를 먼저 갱신하고, 필요 시 contracts/core 변경을 같은 작업에 포함한다.
- shell/navigation 변경은 모바일 viewport도 함께 고려한다. - shell/navigation 변경은 모바일 viewport도 함께 고려한다.
- 새 UI 상태는 route-local state와 shared store 중 책임 범위를 먼저 판단한다. - 새 UI 상태는 route-local state와 shared store 중 책임 범위를 먼저 판단한다.
- settings/integration UI는 실제 API 연결 여부와 placeholder 동작을 구분한다.
- `npm run check`가 통과하도록 TypeScript type을 유지한다. - `npm run check`가 통과하도록 TypeScript type을 유지한다.
## 다른 도메인과의 경계 ## 다른 도메인과의 경계

View file

@ -2,16 +2,20 @@
## 목적 / 책임 ## 목적 / 책임
NomadCode 원레포 운영 도메인이다. 루트 helper, 문서, ignore 정책, 원레포 구조, agent-ops project rules를 관리한다. NomadCode 원레포 운영 도메인이다. 루트 helper, 문서, ignore 정책, 원레포 구조, agent entry 파일, agent-ops project rules와 roadmap을 관리한다.
## 포함 경로 ## 포함 경로
- `bin/` — root test/build/lint/dev helper. - `bin/` — root test/build/lint/dev helper.
- `docs/` — architecture and operations documents. - `docs/` — architecture and operations documents.
- `README.md` — workspace overview. - `README.md` — workspace overview.
- `AGENTS.md`, `CLAUDE.md`, `GEMINI.md` — root agent entry instructions.
- `opencode.json` — agent/tooling configuration.
- `.gitignore` — workspace-level ignore policy. - `.gitignore` — workspace-level ignore policy.
- `agent-ops/.version` — agent-ops framework/version marker.
- `agent-ops/bin/` — agent-ops 초기화, sync, entry file helper.
- `agent-ops/rules/project/` — project/domain rules. - `agent-ops/rules/project/` — project/domain rules.
- `agent-ops/skills/project/` — project-specific repeatable skills. - `agent-ops/roadmap/` — project roadmap, current milestone pointer, milestone documents.
## 제외 경로 ## 제외 경로
@ -26,12 +30,17 @@ NomadCode 원레포 운영 도메인이다. 루트 helper, 문서, ignore 정책
- `bin/build` — build entrypoint. - `bin/build` — build entrypoint.
- `bin/dev` — development entrypoint 안내. - `bin/dev` — development entrypoint 안내.
- `docs/monorepo.md` — monorepo layout 설명. - `docs/monorepo.md` — monorepo layout 설명.
- `AGENTS.md`, `CLAUDE.md`, `GEMINI.md` — agent별 루트 진입 규칙.
- `agent-ops/rules/project/rules.md` — 프로젝트 전체 agent routing. - `agent-ops/rules/project/rules.md` — 프로젝트 전체 agent routing.
- `agent-ops/roadmap/ROADMAP.md` — 전체 Phase와 Milestone index.
- `agent-ops/roadmap/current.md` — 현재 Phase와 기본 Milestone pointer.
- `agent-ops/bin/sync.sh` — agent-ops 동기화 helper.
## 유지할 패턴 ## 유지할 패턴
- root helper는 누락된 도구를 친절하게 skip하거나 명확히 실패한다. - root helper는 누락된 도구를 친절하게 skip하거나 명확히 실패한다.
- 공통 agent-ops 영역과 프로젝트 특화 영역을 섞지 않는다. - 공통 agent-ops 영역과 프로젝트 특화 영역을 섞지 않는다.
- roadmap은 `agent-ops/roadmap/`에 두고, 서비스별 README에 Phase 계획을 중복 유지하지 않는다.
- `.gitignore`에는 private rules만 제외하고, `agent-task/archive/**`는 AI ignore/permission 파일에서 제어한다. - `.gitignore`에는 private rules만 제외하고, `agent-task/archive/**`는 AI ignore/permission 파일에서 제어한다.
- 원레포 구조 변경은 README와 docs를 함께 갱신한다. - 원레포 구조 변경은 README와 docs를 함께 갱신한다.

View file

@ -17,7 +17,7 @@ NomadCode는 AI 병렬 작업 운용을 위한 원레포다. 백엔드 오케스
- `packages/contracts/` — 서비스와 클라이언트가 공유하는 API/schema 계약. - `packages/contracts/` — 서비스와 클라이언트가 공유하는 API/schema 계약.
- `bin/` — 원레포 공통 test/build/lint/dev entrypoint. - `bin/` — 원레포 공통 test/build/lint/dev entrypoint.
- `docs/` — 아키텍처와 운영 문서. - `docs/` — 아키텍처와 운영 문서.
- `agent-ops/` — 에이전트 공통 규칙, project/domain rules, 반복 작업 skill. - `agent-ops/` — 에이전트 공통 규칙, project/domain rules, roadmap, 반복 작업 skill.
## 기술 스택 ## 기술 스택
@ -44,7 +44,7 @@ NomadCode는 AI 병렬 작업 운용을 위한 원레포다. 백엔드 오케스
| `apps/web/**` | web | `agent-ops/rules/project/domain/web/rules.md` | | `apps/web/**` | web | `agent-ops/rules/project/domain/web/rules.md` |
| `apps/mobile/**` | mobile | `agent-ops/rules/project/domain/mobile/rules.md` | | `apps/mobile/**` | mobile | `agent-ops/rules/project/domain/mobile/rules.md` |
| `packages/contracts/**` | contracts | `agent-ops/rules/project/domain/contracts/rules.md` | | `packages/contracts/**` | contracts | `agent-ops/rules/project/domain/contracts/rules.md` |
| `bin/**`, `docs/**`, `README.md`, `.gitignore` | workspace-ops | `agent-ops/rules/project/domain/workspace-ops/rules.md` | | `bin/**`, `docs/**`, `README.md`, `.gitignore`, `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, `opencode.json`, `agent-ops/.version`, `agent-ops/bin/**`, `agent-ops/roadmap/**`, `agent-ops/rules/project/**` | workspace-ops | `agent-ops/rules/project/domain/workspace-ops/rules.md` |
## 스킬 라우팅 ## 스킬 라우팅
@ -57,6 +57,15 @@ NomadCode는 AI 병렬 작업 운용을 위한 원레포다. 백엔드 오케스
| 코드 리뷰 | `agent-ops/skills/common/code-review/SKILL.md` | | 코드 리뷰 | `agent-ops/skills/common/code-review/SKILL.md` |
| 커밋/푸시 | `agent-ops/skills/common/commit-push/SKILL.md` | | 커밋/푸시 | `agent-ops/skills/common/commit-push/SKILL.md` |
## 마일스톤 컨텍스트 로딩
- 기능 추가, 구조 변경, 스킬 추가/수정, 문서 구조 변경 작업을 수행할 때는 `agent-ops/roadmap/current.md`를 먼저 읽는다.
- 요청이 기본 Milestone 범위에 맞으면 기본 Milestone 문서를 같은 세션에서 1회 읽는다.
- 요청이 기본 Milestone과 맞지 않으면 `current.md`의 진행 중인 Milestone 목록에서 가장 관련 있는 Milestone 문서를 같은 세션에서 1회 읽는다.
- 진행 중인 Milestone에도 맞지 않으면 `agent-ops/roadmap/ROADMAP.md`의 Milestone 인덱스를 확인하고 사용자에게 진행/전환 여부를 확인한다.
- `agent-ops/roadmap/ROADMAP.md`는 로드맵 생성/갱신, Phase 전환, Milestone 추가/수정 요청이 있을 때만 읽는다.
- 작업 요청이 선택된 Milestone의 목표 또는 범위 제외 항목과 충돌하면 구현 전에 사용자에게 알리고 방향을 확인한다.
## 주의사항 ## 주의사항
- `agent-task/archive/**`는 읽지 않는다. 필요 시 사용자가 명시적으로 요청했을 때만 본다. - `agent-task/archive/**`는 읽지 않는다. 필요 시 사용자가 명시적으로 요청했을 때만 본다.

View file

@ -32,36 +32,6 @@ NomadCode Core는 사용자 요청을 작업 단위로 받고, 작업 상태를
- 복잡한 권한 정책 - 복잡한 권한 정책
- 복잡한 workflow DSL - 복잡한 workflow DSL
## 단계별 다음 작업
### Phase 1. Server Skeleton
현재 스캐폴드 단계입니다.
목표:
- 서버 실행 골격 구성
- task 저장 구조 구성
- 로컬 모델 호출 기반 비동기 job 실행
- Adapter stub 생성
### Phase 2. Workflow Core
목표:
- task 상태 전이 정리
- enqueue / running / completed / failed 흐름 안정화
- retry / timeout 기본 구조 추가
- notification event 구조 정리
### Phase 3. External Integration
목표:
- Plane issue 생성 / comment / status update 구현
- Mattermost 메시지 발송 구현
- Agent Integrator 호출 구조 추가
- IOP 호출 구조 추가
- IOP의 OpenAI-compatible API 경로는 단순 모델/chat completion 호환 호출에 사용
- IOP의 A2A JSON-RPC 경로는 Core가 Edge 실행 그룹이나 외부 agent에게 작업을 위임하고 task 상태/artifact/cancel 흐름을 공유할 때 사용
## 실행 방법 ## 실행 방법
로컬 실행은 현재 개발 호스트의 Go와 `code-server` compose에 붙은 PostgreSQL/Redis가 있다는 전제로 진행합니다. local 기본 `DATABASE_URL``postgres://nomadcode:nomadcode@code-server-postgres:5432/nomadcode-core-local?sslmode=disable` 이고, local 기본 `REDIS_URL``redis://code-server-redis:6379/3`, `REDIS_KEY_PREFIX``nomadcode-core:local` 입니다. dev 배포는 Docker Compose로 실행하며, 같은 `code-server-postgres` Postgres와 `code-server-redis` Redis를 사용합니다. dev DB명은 `nomad-core-dev` 이고, dev 기본 `REDIS_URL``redis://code-server-redis:6379/4`, `REDIS_KEY_PREFIX``nomadcode-core:dev` 입니다. `AUTH_PASSWORD`를 설정하면 `/readyz``/api/*`에 HTTP Basic Auth가 적용됩니다. 모델 호출의 장기 대상은 IOP Edge의 OpenAI-compatible input surface이며, 현재 core model client는 Responses API 형식을 사용합니다. fallback 기본값은 direct Ollama `MODEL_BASE_URL=http://192.168.0.91:11434`, `MODEL_NAME=qwen3.6:35b-a3b-bf16`, `MODEL_CONTEXT_SIZE=262144`, `MODEL_TIMEOUT_SEC=300` 입니다. A2A agent 호출 endpoint는 `A2A_EDGE_URL`로 설정하고, 기존 `A2A_AGENT_URL`도 fallback alias로 받습니다. bearer token은 `A2A_TOKEN`, timeout은 `A2A_TIMEOUT_SEC`로 설정합니다. 로컬 실행은 현재 개발 호스트의 Go와 `code-server` compose에 붙은 PostgreSQL/Redis가 있다는 전제로 진행합니다. local 기본 `DATABASE_URL``postgres://nomadcode:nomadcode@code-server-postgres:5432/nomadcode-core-local?sslmode=disable` 이고, local 기본 `REDIS_URL``redis://code-server-redis:6379/3`, `REDIS_KEY_PREFIX``nomadcode-core:local` 입니다. dev 배포는 Docker Compose로 실행하며, 같은 `code-server-postgres` Postgres와 `code-server-redis` Redis를 사용합니다. dev DB명은 `nomad-core-dev` 이고, dev 기본 `REDIS_URL``redis://code-server-redis:6379/4`, `REDIS_KEY_PREFIX``nomadcode-core:dev` 입니다. `AUTH_PASSWORD`를 설정하면 `/readyz``/api/*`에 HTTP Basic Auth가 적용됩니다. 모델 호출의 장기 대상은 IOP Edge의 OpenAI-compatible input surface이며, 현재 core model client는 Responses API 형식을 사용합니다. fallback 기본값은 direct Ollama `MODEL_BASE_URL=http://192.168.0.91:11434`, `MODEL_NAME=qwen3.6:35b-a3b-bf16`, `MODEL_CONTEXT_SIZE=262144`, `MODEL_TIMEOUT_SEC=300` 입니다. A2A agent 호출 endpoint는 `A2A_EDGE_URL`로 설정하고, 기존 `A2A_AGENT_URL`도 fallback alias로 받습니다. bearer token은 `A2A_TOKEN`, timeout은 `A2A_TIMEOUT_SEC`로 설정합니다.