update agent-ops rules and roadmap

This commit is contained in:
toki 2026-05-21 19:08:17 +09:00
parent 86decb4794
commit 65d99a0bed
6 changed files with 57 additions and 8 deletions

View file

@ -1,5 +1,9 @@
# Current Roadmap Context
# 현재 로드맵 컨텍스트
- Active Phase: Phase 1. CLI 자동화 표면 정리
- Active Milestone: M01 CLI 자동화 기준선 정리
- Active Milestone File: agent-ops/roadmap/milestones/M01-cli-automation-baseline.md
- 현재 Phase: Phase 1. CLI 자동화 표면 정리
- 기본 Milestone: M01 CLI 자동화 기준선 정리
- 기본 Milestone 파일: agent-ops/roadmap/milestones/M01-cli-automation-baseline.md
## 진행 중인 Milestone
- M01 CLI 자동화 기준선 정리: agent-ops/roadmap/milestones/M01-cli-automation-baseline.md

View file

@ -7,6 +7,7 @@
## 포함 경로
- `bin/main.dart` — 외부 `dart_framework` 앱 래퍼를 통해 CLI를 초기화하는 실행 진입점
- `lib/cli/cli.dart` — CLI 루트 객체, 출력/스타일 처리
- `lib/cli/printer.dart` — OS별 콘솔 출력과 ANSI 스타일 처리
- `lib/cli/cli_style.dart` — 콘솔 색상/스타일 enum
@ -18,12 +19,16 @@
- `lib/cli/commands/command_start.dart` — 시작/중지 커맨드
- `lib/cli/commands/command_install.dart` — 설치/제거 명령
- `lib/cli/commands/install/` — PATH 등록 등 설치 보조 로직
- `assets/package/` — 배포/패키징 보조 파일
- `assets/bin/` — 설치 또는 패키징에 포함되는 보조 바이너리
- `assets/script/` — 빌드/패키징/실행 보조 스크립트. Jenkins env helper는 core 경계도 함께 확인
## 제외 경로
- `lib/oto/` — 비즈니스 로직·파이프라인 엔진 (cli는 진입만 담당)
- `lib/cli/commands/command_scheduler.dart` — scheduler 명령 파싱과 등록/실행 진입점 (`scheduler` 도메인)
- `lib/cli/commands/scheduler/` — 스케줄러 실행/등록/OS별 백그라운드 처리 (`scheduler` 도메인)
- `assets/template/` — 커맨드 실행 중 사용하는 템플릿 (`command` 도메인)
## 주요 구성 요소
@ -38,20 +43,24 @@
- `CommandTemplate` — 템플릿 출력
- `CommandManager` — CLI 커맨드 등록 관리
- `RegistPath` — OS별 PATH 등록/해제
- `bin/main.dart` — CLI 초기화 시 등록할 top-level 명령 목록을 정의
## 유지할 패턴
- CLI 커맨드는 `CommandBase` 상속
- top-level 명령 등록은 `bin/main.dart``CLI.initialize(..., [Command...])` 목록에서 관리
- CLI는 인자 파싱과 진입점 역할만 수행하고, 파이프라인 실행은 `Application.build()`에 위임
- `CommandExe``BuildType` 선택과 YAML 파일 읽기까지만 담당
- 콘솔 출력은 `CLI.print*`, `CLI.style`, `Printer`, 또는 `CommandBase` 출력 헬퍼를 사용
- CLI 변경 후 `dart analyze`를 실행하고, CLI 진입 변경이면 최소 `dart run bin/main.dart` 수준의 스모크 실행 가능 여부를 확인
- 배포/설치 asset 변경 시 관련 CLI 설치/패키징 경로가 실제 파일명을 참조하는지 확인
## 다른 도메인과의 경계
- **pipeline/command**: cli는 `Application.build()`만 호출. 파이프라인·커맨드 내부를 직접 참조하지 않는다
- **core**: DataComposer 호출은 Application 내부에서 이루어지며 cli는 관여하지 않는다
- **scheduler**: `CommandScheduler`, `lib/cli/commands/command_scheduler.dart`, `lib/cli/commands/scheduler/**`는 scheduler 도메인이다. 일반 CLI 변경에서 scheduler 내부 동작을 함께 수정하지 않는다
- **framework**: `bin/main.dart`는 외부 framework Application을 소비하지만 framework 의존성 자체는 framework 도메인에서 다룬다
## 금지 사항

View file

@ -9,11 +9,13 @@
- `lib/oto/commands/` — 커맨드 구현체 (카테고리별 하위 폴더)
- `lib/oto/data/` — 커맨드 파라미터 데이터 모델 (`*_data.dart`, `*.g.dart`)
- `assets/template/` — 커맨드 실행 중 사용하는 템플릿 파일
## 제외 경로
- `lib/oto/pipeline/` — 실행 흐름 제어 (커맨드 dispatch 이전)
- `lib/oto/core/` — 태그 치환, 데이터 합성 (커맨드 실행 이전)
- `assets/yaml/sample/` — YAML 사용 예시 (`sample` 도메인)
## 주요 구성 요소
@ -38,6 +40,13 @@
| infra / external tool | `lib/oto/commands/aws/`, `docker/`, `gradle/`, `infra/`, `proto/` | `lib/oto/data/infra_data.dart`, `lib/oto/data/util_data.dart` |
| shell / process / util | `lib/oto/commands/shell/`, `process/`, `util/` | `lib/oto/data/util_data.dart` |
커맨드 asset:
| asset | 사용처 |
|-------|--------|
| `assets/template/index.html` | iOS publish HTML 템플릿 |
| `assets/template/manifest.plist` | iOS publish manifest 템플릿 |
## 유지할 패턴
- 새 커맨드는 반드시 `Command` 상속 후 카테고리별 `register*Command(s)()` 함수와 `registerAllCommands()` 경로에 등록
@ -49,6 +58,7 @@
- 결과 저장은 `<@property.key>` 형태의 쓰기 태그와 `setProperty()` / `complete()``setResult`, `setExitCode` 흐름을 우선 사용한다
- 외부 프로세스 실행은 `Command.runtime`을 통해 `CommandRuntime.start()`, `run()`, `runExecutable()`, `startDetached()` 중 목적에 맞게 사용한다
- 커맨드 추가/파라미터 변경 시 관련 `assets/yaml/sample/**`와 README 커맨드 목록 갱신 필요 여부를 확인한다
- 커맨드가 `assets/template/**`를 읽거나 출력 형식에 의존하면 템플릿 경로와 placeholder 계약을 함께 확인한다
- 데이터 모델 변경 후 `dart run build_runner build``dart analyze`를 실행한다
## 다른 도메인과의 경계

View file

@ -10,11 +10,14 @@
- `lib/oto/application.dart` — 싱글턴 오케스트레이터 (BuildType enum, 빌드 진입점)
- `lib/oto/core/` — 태그 시스템, 데이터 합성, 정의 데이터
- `lib/oto/utils/` — 공통 유틸리티 (Mattermost 등 재사용 헬퍼)
- `assets/script/batch/jenkins_env_params.bat` — Jenkins 환경 변수 합성에 쓰이는 Windows helper script
- `assets/script/shell/jenkins_env_params.sh` — Jenkins 환경 변수 합성 helper script
## 제외 경로
- `lib/oto/pipeline/` — 실행 흐름 (core 처리 이후)
- `lib/oto/commands/` — 커맨드 구현체 (core 결과물을 소비)
- `assets/script/`의 빌드/패키징 보조 스크립트 — CLI/배포 보조 asset이며 core가 직접 해석하지 않는다
## 주요 구성 요소
@ -35,6 +38,7 @@
- 커맨드 등록은 `registerAllCommands()` 호출 이후 command catalog validation과 pipeline validate를 수행
- property 기본값에 `workspace`가 없으면 `Application.current`를 채우는 흐름을 유지
- 테스트 가능한 OS/프로세스 의존 로직은 `SystemRuntime`을 통해 주입 가능한 구조를 유지
- Jenkins env helper script 변경 시 `DataComposer`의 호출 경로와 환경 변수 파싱 결과를 함께 확인한다
- core 변경 후 `dart analyze`를 실행하고, 태그/파싱 변경이면 관련 단위 테스트 또는 최소 샘플 YAML 파싱 검증을 추가/확인한다
## 다른 도메인과의 경계

View file

@ -3,11 +3,12 @@
## 목적 / 책임
현재 프로젝트에는 `lib/framework/` 모듈이 없다.
이 도메인은 외부 Git 의존성인 `dart_framework` 사용 규칙 의존성 경계를 기록한다.
이 도메인은 외부 Git 의존성인 `dart_framework` 사용 규칙, Dart toolchain 설정, 의존성 경계를 기록한다.
## 포함 경로
- `pubspec.yaml``dart_framework` 외부 Git 의존성 선언
- `analysis_options.yaml` — Dart analyzer/lint 기준
## 제외 경로
@ -28,6 +29,7 @@
- 프로세스 실행은 `ProcessExecutor.start()` (스트리밍, stdout/stderr 실시간 수신) 또는 `ProcessExecutor.run()` (블로킹, 결과만 필요) 중 목적에 맞게 선택
- `dart_framework` API 사용 시 기존 import 패턴을 따른다
- 외부 의존성 ref 변경은 `pubspec.yaml`에서만 수행하고, 변경 후 `dart pub get``dart analyze`를 확인한다
- analyzer/lint 기준 변경은 기존 코드 전체에 영향을 줄 수 있으므로 `dart analyze` 결과와 필요한 수정 범위를 함께 확인한다
- 로컬에 `lib/framework/`를 되살리는 대신 필요한 OTO 로직은 `lib/oto/` 또는 `lib/cli/`의 해당 도메인에 둔다
## 다른 도메인과의 경계

View file

@ -96,14 +96,20 @@ lib/
## 마일스톤 컨텍스트 로딩
- 기능 추가, 구조 변경, 스킬 추가/수정, 문서 구조 변경 작업을 수행할 때는 `agent-ops/roadmap/current.md`를 읽고, 그 안의 Active Milestone 문서를 같은 세션에서 1회 읽는다.
- 기능 추가, 구조 변경, 스킬 추가/수정, 문서 구조 변경 작업을 수행할 때는 `agent-ops/roadmap/current.md`를 먼저 읽는다.
- 요청이 기본 Milestone 범위에 맞으면 기본 Milestone 문서를 같은 세션에서 1회 읽는다.
- 요청이 기본 Milestone과 맞지 않으면 `current.md`의 진행 중인 Milestone 목록에서 가장 관련 있는 Milestone 문서를 같은 세션에서 1회 읽는다.
- 진행 중인 Milestone에도 맞지 않는 요청은 무리하게 Milestone에 끼워 넣지 않는다.
- 버그 수정, 테스트 보강, 작은 문서 수정, 기존 기능 유지보수처럼 제품 방향을 바꾸지 않는 작업은 관련 domain rule만 적용하고 진행한다.
- 새 기능, 구조 변경, 장기 방향에 영향을 주는 작업이면 `agent-ops/roadmap/ROADMAP.md`의 Milestone 인덱스를 확인하고, 로드맵 밖 작업으로 진행할지 또는 로드맵을 갱신할지 사용자에게 확인한다.
- `agent-ops/roadmap/ROADMAP.md`는 로드맵 생성/갱신, Phase 전환, Milestone 추가/수정 요청이 있을 때만 읽는다.
- 작업 요청이 Active Milestone의 Goal 또는 Non-Goals와 충돌하면 구현 전에 사용자에게 알리고 방향을 확인한다.
- 작업 요청이 선택된 Milestone의 Goal 또는 Non-Goals와 충돌하면 구현 전에 사용자에게 알리고 방향을 확인한다.
## 도메인 매핑
| 경로 패턴 | 도메인 | rules.md |
|----------|--------|----------|
| `bin/main.dart` | cli | `agent-ops/rules/project/domain/cli/rules.md` |
| `lib/oto/pipeline/**` | pipeline | `agent-ops/rules/project/domain/pipeline/rules.md` |
| `lib/oto/commands/**` | command | `agent-ops/rules/project/domain/command/rules.md` |
| `lib/oto/data/**` | command | `agent-ops/rules/project/domain/command/rules.md` |
@ -113,16 +119,30 @@ lib/
| `lib/oto/application.dart` | core | `agent-ops/rules/project/domain/core/rules.md` |
| `lib/oto/core/**` | core | `agent-ops/rules/project/domain/core/rules.md` |
| `lib/oto/utils/**` | core | `agent-ops/rules/project/domain/core/rules.md` |
| `assets/script/**/jenkins_env_params.*` | core | `agent-ops/rules/project/domain/core/rules.md` |
| `assets/template/**` | command | `agent-ops/rules/project/domain/command/rules.md` |
| `assets/yaml/sample/**` | sample | `agent-ops/rules/project/domain/sample/rules.md` |
| `assets/package/**` | cli | `agent-ops/rules/project/domain/cli/rules.md` |
| `assets/bin/**` | cli | `agent-ops/rules/project/domain/cli/rules.md` |
| `assets/script/**` | cli | `agent-ops/rules/project/domain/cli/rules.md` |
| `pubspec.yaml` | framework | `agent-ops/rules/project/domain/framework/rules.md` |
| `analysis_options.yaml` | framework | `agent-ops/rules/project/domain/framework/rules.md` |
`test/**`는 별도 도메인으로 고정하지 않는다. 테스트 변경 시 검증 대상 production 경로의 domain rule을 읽고, 여러 도메인을 검증하는 테스트면 관련 domain rule을 함께 읽는다.
## 스킬 라우팅
| 요청 키워드 | 수행 방법 |
|------------|---------|
| agent-ops 세팅해줘, scaffold 만들어줘, 초기화해줘 | `agent-ops/skills/common/init-agent-ops/SKILL.md` 수행 |
| yaml 짜줘, 파이프라인 만들어줘, 자동화 작성, 빌드 yaml | `agent-ops/rules/project/domain/sample/rules.md` 읽고 해당 샘플 참조 |
| 도메인 업데이트, domain rule 갱신, 도메인 검토, domain 스캔 | `agent-ops/skills/common/update-domain-rule/SKILL.md` 수행 |
| domain rule 만들어줘, rules.md 생성, 새 도메인 규칙 | `agent-ops/skills/common/create-domain-rule/SKILL.md` 수행 |
| skill 만들어줘, SKILL.md 생성, 새 스킬 추가 | `agent-ops/skills/common/create-skill/SKILL.md` 수행 |
| 코드 리뷰해줘, code review | `agent-ops/skills/common/code-review/SKILL.md` 수행 |
| 로드맵 만들어줘, roadmap 생성, 마일스톤 설계, goal/phase 구조 잡아줘 | `agent-ops/skills/common/create-roadmap/SKILL.md` 수행 |
| 로드맵 업데이트, roadmap 갱신, 마일스톤 갱신, phase 변경, 현재 마일스톤 변경, 로드맵 한국어 전환, 로드맵 번역 | `agent-ops/skills/common/update-roadmap/SKILL.md` 수행 |
| 계획 세워줘, 구현 계획, PLAN.md, plan | `agent-ops/skills/common/plan/SKILL.md` 수행 |
| 코드 리뷰해줘, 리뷰 진행해, 리뷰해줘, code review, CODE_REVIEW.md, 리뷰 루프 | `agent-ops/skills/common/code-review/SKILL.md` 수행 |
| 커밋해줘, 푸시해줘, commit, push, 반영해줘 | `agent-ops/skills/common/commit-push/SKILL.md` 수행 |
| agent-ops 싱크해, agent-ops 동기화해, agentic-framework에 올려줘, agent-ops를 [프로젝트]로 싱크해 | `agent-ops/skills/common/sync-push/SKILL.md` 수행 |
| agent-ops pull해, agent-ops 가져와, agentic-framework에서 가져와, agent-ops 내려받아 | `agent-ops/skills/common/sync-pull/SKILL.md` 수행 |