sync: to agentic-framework v1.1.3 + add framework domain rule

- add update-domain-rule skill to common
- add framework domain rule (lib/framework/)
- update core domain to include lib/oto/application.dart
- update domain mapping table in rules.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
toki 2026-04-19 12:23:11 +09:00
parent e865f7dc8b
commit be1b139c25
6 changed files with 154 additions and 2 deletions

View file

@ -1 +1 @@
1.1.2
1.1.3

View file

@ -2,10 +2,11 @@
## 목적 / 책임
파이프라인 실행 전 단계에서 YAML 파싱, Jenkins 환경 변수 합성, 태그 치환을 담당하는 공통 인프라 레이어다.
파이프라인 실행 전 단계에서 YAML 파싱, Jenkins 환경 변수 합성, 태그 치환을 담당하는 공통 인프라 레이어다. `Application` 싱글턴이 전체 빌드 흐름을 오케스트레이션한다.
## 포함 경로
- `lib/oto/application.dart` — 싱글턴 오케스트레이터 (BuildType enum, 빌드 진입점)
- `lib/oto/core/` — 태그 시스템, 데이터 합성, 정의 데이터
- `lib/oto/utils/` — 공통 유틸리티 (Mattermost 등 재사용 헬퍼)

View file

@ -0,0 +1,48 @@
# framework
## 목적 / 책임
oto_cli 전체에서 공유하는 런타임 인프라를 제공한다: 프로세스 실행, Isolate 관리, 로깅, 플랫폼 추상화, 공통 유틸리티.
## 포함 경로
- `lib/framework/core/` — Application 베이스, AppDataManager (앱 메타데이터)
- `lib/framework/data/` — Isolate 메시지 데이터 타입
- `lib/framework/log/` — 로깅 시스템 (Log, LogItem, LogType)
- `lib/framework/model/` — AppData 모델 및 JSON 직렬화
- `lib/framework/platform/` — 플랫폼 추상화, IsolateManager, ProcessExecutor
- `lib/framework/utils/` — 공통 유틸 (system_util, path, string_util, os_startup, Slack 헬퍼)
## 제외 경로
- `lib/oto/` — OTO 비즈니스 로직 (framework 위에서 동작)
- `lib/cli/` — CLI 레이어 (framework를 소비)
## 주요 구성 요소
- `Application` (`core/application.dart`) — `runZonedGuarded` 기반 앱 진입점 베이스
- `AppDataManager` (`core/app_data_manager.dart`) — 버전, Git hash, 빌드 일자 생성 및 `app_data.json` 저장
- `IsolateManager` / `IsolateBase` / `IsolateHandler` (`platform/isolate_manager.dart`) — Dart Isolate 라이프사이클 관리
- `ProcessExecutor` / `ProcessData` (`platform/process.dart`) — 셸 스크립트·외부 프로세스 실행 (macOS: zsh, Linux: bash, Windows: PowerShell)
- `Log` / `LogItem` (`log/log.dart`) — 로그 수집 및 파일 기록
- `AppData` (`model/app_data.dart`) — 앱 메타 모델 (`app_data.json`)
- `system_util.dart` — 환경 초기화, CLI 인자 파싱, YAML/JSON 파싱 헬퍼
- `SlackSender` / `SlackData` (`utils/slack/`) — Slack 메시지 전송 헬퍼
## 유지할 패턴
- 프로세스 실행은 `ProcessExecutor.start()` (스트리밍, stdout/stderr 실시간 수신) 또는 `ProcessExecutor.run()` (블로킹, 결과만 필요) 중 목적에 맞게 선택
- 로그 출력은 `log()` / `logWarning()` / `logError()` 함수를 통해서만 기록
- OS 분기가 필요한 코드는 `Platform.isMacOS / isLinux / isWindows` 조건으로 분기하고, 플랫폼별 구현은 `platform_*` 파일로 분리
## 다른 도메인과의 경계
- **core**: `lib/oto/application.dart`(OTO 오케스트레이터)는 framework의 `Application`을 상속하지 않고 독립 singleton. framework는 하위 인프라만 제공
- **cli**: `scheduler_isolate.dart``IsolateBase`를 상속. framework가 API를 제공하고 cli가 소비
- **command**: 커맨드들이 `ProcessExecutor`를 직접 사용하여 셸 스크립트 실행
## 금지 사항
- framework 내부에서 `lib/oto/` 또는 `lib/cli/`를 import하지 않는다 (단방향 의존성 유지)
- OTO 비즈니스 로직(파이프라인, 커맨드 등록 등)을 framework에 넣지 않는다
- `ProcessExecutor`를 우회하여 `dart:io Process`를 직접 호출하지 않는다

View file

@ -82,5 +82,7 @@ lib/
| `lib/oto/commands/**` | command | `agent-ops/rules/project/domain/command/rules.md` |
| `lib/oto/data/**` | command | `agent-ops/rules/project/domain/command/rules.md` |
| `lib/cli/**` | cli | `agent-ops/rules/project/domain/cli/rules.md` |
| `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` |
| `lib/framework/**` | framework | `agent-ops/rules/project/domain/framework/rules.md` |

View file

@ -9,3 +9,4 @@
| 코드 리뷰해줘, 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-agent-ops/SKILL.md` |
| 도메인 업데이트, domain rule 갱신, 도메인 검토, domain 스캔 | `agent-ops/skills/common/update-domain-rule/SKILL.md` |

View file

@ -0,0 +1,100 @@
---
name: update-domain-rule
version: 1.0.0
description: 기존 도메인 rules.md를 코드 현황에 맞게 갱신. 전체 스캔(full) 또는 지정 도메인(targeted) 두 모드 지원
---
# update-domain-rule
## 목적
프로젝트 코드가 변경되면서 기존 domain rule이 실제 구조와 어긋날 수 있다.
이 스킬은 실제 파일 구조를 탐색하여 기존 `rules.md`와 비교하고, 누락·오류·구식 항목을 수정한다.
## 언제 호출할지
- 대규모 리팩터링 또는 외부 패키지 내재화 후 domain rule 동기화가 필요할 때
- 특정 도메인 파일 구조가 바뀌어 기존 rule이 맞지 않을 때
- 사용자가 "도메인 업데이트", "domain rule 갱신", "domain 검토" 등을 요청할 때
- agent-ops 초기 scaffold 이후 코드가 많이 달라진 경우
## 입력
- `mode`: `full`(전체 도메인 스캔) | `targeted`(지정 도메인만) (필수)
- `domain-name`: 업데이트할 도메인 이름 — `targeted` 모드에서만 필수
## 먼저 확인할 것
- [ ] `agent-ops/rules/project/domain/` 하위 기존 도메인 목록 확인
- [ ] `agent-ops/rules/common/_templates/domain-rule-template.md` 읽어 최신 템플릿 형식 파악
- [ ] `targeted` 모드이면 `agent-ops/rules/project/domain/<domain-name>/rules.md` 존재 여부 확인
- 존재하지 않으면 `create-domain-rule` 스킬을 사용하도록 안내하고 중단
## 실행 절차
1. **대상 목록 결정**
- `full`: `agent-ops/rules/project/domain/` 하위 모든 도메인 디렉터리를 대상으로 한다
- `targeted`: 지정된 `domain-name` 하나만 대상으로 한다
2. **도메인별 코드 탐색**
- 기존 `rules.md`**포함 경로** 목록을 기준으로 실제 파일 구조 탐색
- 포함 경로에 없지만 도메인 이름과 연관된 경로도 함께 탐색
- 탐색 시 실제로 존재하는 경로만 수집한다
3. **비교 및 변경 항목 식별**
다음 항목 각각을 현재 `rules.md`와 비교한다:
- **포함 경로**: 실제로 존재하지 않는 경로 제거, 새로 생긴 경로 추가
- **주요 구성 요소**: 파일/클래스 삭제·이름 변경·신규 추가 반영
- **유지할 패턴**: 코드에서 더 이상 사용되지 않는 패턴 제거, 새 패턴 추가
- **다른 도메인과의 경계**: 도메인 간 import 관계가 바뀐 경우 반영
- **목적/책임**: 도메인 책임이 실질적으로 변경된 경우에만 수정
4. **rules.md 업데이트**
- 변경이 필요한 항목만 수정한다 — 변경 불필요한 섹션은 그대로 둔다
- 확인된 사실만 기재한다; 불확실하면 `<!-- TODO: 확인 필요 -->` 주석 처리
- `domain-rule-template.md`의 섹션 구조를 유지한다
5. **도메인 매핑 테이블 검토** (`full` 모드 시)
- `agent-ops/rules/project/rules.md`의 도메인 매핑 테이블과 실제 포함 경로 비교
- 누락된 경로 패턴은 추가, 존재하지 않는 경로 패턴은 제거
- 기존 항목 순서는 변경하지 않는다
6. **결과 보고**
- 도메인별로 수정한 항목 목록
- `TODO`로 남긴 항목 (해당 시)
- 도메인 매핑 테이블 변경 내용 (full 모드 시)
## 실행 결과 검증
- [ ] 수정된 `rules.md`의 포함 경로가 모두 실제 프로젝트에 존재하는가
- [ ] 섹션 구조가 `domain-rule-template.md` 형식을 유지하는가
- [ ] 변경하지 않아도 되는 섹션이 의도치 않게 바뀌지 않았는가
- [ ] `full` 모드에서 도메인 매핑 테이블이 실제 포함 경로와 일치하는가
- 검증 실패 시: 실제 존재하지 않는 경로나 누락된 섹션을 사용자에게 알리고 해당 항목만 보완한다
## 출력 형식
```
## 업데이트 완료
### <domain-name>
- 변경: <수정된 항목 요약>
- 추가: <새로 추가된 경로/구성 요소>
- 제거: <삭제된 경로/구성 요소>
- 유지: 변경 없음 (해당 섹션)
### 도메인 매핑 테이블 (full 모드 시)
- 추가: < 경로 패턴>
- 제거: <삭제된 경로 패턴>
## TODO 항목 (확인 필요)
- <불확실하여 직접 확인이 필요한 항목> (해당 시)
```
## 금지 사항
- 실제 존재하지 않는 경로를 포함 경로에 기재하지 않는다
- 추측으로 패턴·금지 사항을 추가하지 않는다 — 코드에서 확인된 내용만 기재한다
- 신규 도메인 생성이 필요한 경우 직접 생성하지 않고 `create-domain-rule` 스킬 사용을 안내한다
- `rules/project/rules.md`의 기존 항목을 삭제하거나 재정렬하지 않는다
- 코드 파일을 수정하지 않는다 — 이 스킬은 rule 파일 갱신만 담당한다