From 65d99a0bedb286222db901cc3751c2aa46c8f342 Mon Sep 17 00:00:00 2001 From: toki Date: Thu, 21 May 2026 19:08:17 +0900 Subject: [PATCH] update agent-ops rules and roadmap --- agent-ops/roadmap/current.md | 12 ++++++--- agent-ops/rules/project/domain/cli/rules.md | 9 +++++++ .../rules/project/domain/command/rules.md | 10 +++++++ agent-ops/rules/project/domain/core/rules.md | 4 +++ .../rules/project/domain/framework/rules.md | 4 ++- agent-ops/rules/project/rules.md | 26 ++++++++++++++++--- 6 files changed, 57 insertions(+), 8 deletions(-) diff --git a/agent-ops/roadmap/current.md b/agent-ops/roadmap/current.md index 69e41e4..16c2d7e 100644 --- a/agent-ops/roadmap/current.md +++ b/agent-ops/roadmap/current.md @@ -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 diff --git a/agent-ops/rules/project/domain/cli/rules.md b/agent-ops/rules/project/domain/cli/rules.md index 2ed61a7..6100ae2 100644 --- a/agent-ops/rules/project/domain/cli/rules.md +++ b/agent-ops/rules/project/domain/cli/rules.md @@ -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 도메인에서 다룬다 ## 금지 사항 diff --git a/agent-ops/rules/project/domain/command/rules.md b/agent-ops/rules/project/domain/command/rules.md index 4e5ce8b..2432493 100644 --- a/agent-ops/rules/project/domain/command/rules.md +++ b/agent-ops/rules/project/domain/command/rules.md @@ -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`를 실행한다 ## 다른 도메인과의 경계 diff --git a/agent-ops/rules/project/domain/core/rules.md b/agent-ops/rules/project/domain/core/rules.md index b65bfe4..6b00b79 100644 --- a/agent-ops/rules/project/domain/core/rules.md +++ b/agent-ops/rules/project/domain/core/rules.md @@ -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 파싱 검증을 추가/확인한다 ## 다른 도메인과의 경계 diff --git a/agent-ops/rules/project/domain/framework/rules.md b/agent-ops/rules/project/domain/framework/rules.md index 3945498..91c53d5 100644 --- a/agent-ops/rules/project/domain/framework/rules.md +++ b/agent-ops/rules/project/domain/framework/rules.md @@ -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/`의 해당 도메인에 둔다 ## 다른 도메인과의 경계 diff --git a/agent-ops/rules/project/rules.md b/agent-ops/rules/project/rules.md index 9bedca9..5b13f7a 100644 --- a/agent-ops/rules/project/rules.md +++ b/agent-ops/rules/project/rules.md @@ -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` 수행 |