oto/agent-ops/rules/project/domain/framework/rules.md
toki ba5abbf9d8 docs(agent-ops): 모노레포 규칙과 로드맵을 정리한다
현재 workspace 구조와 맞지 않던 agent-ops 규칙, domain rule, 로드맵 항목을 함께 정리해 후속 작업이 올바른 경로와 검증 기준을 참조하도록 한다.
2026-06-07 04:31:32 +09:00

63 lines
4.3 KiB
Markdown

---
domain: framework
last_rule_review_commit: 67d7b6e411b8a28d6d42cac550a29872a7ef6b7e
last_rule_updated_at: 2026-06-01
---
# framework
## 목적 / 책임
현재 프로젝트에는 `lib/framework/` 모듈이 없다.
이 도메인은 runner, client, console, core service의 패키지 선언(manifest), 분석기(analyzer/lint), protobuf 계약 정의 및 생성 코드 관리, 외부 의존성 경계와 빌드 도구 설정을 기록한다.
단, 전용 도메인 규칙(dedicated domain rule)이 아직 존재하지 않는 `apps/client/lib/**`, `packages/flutter/oto_console/lib/**`, `services/core/internal/**` 등의 구현 코드가 가진 구체적인 비즈니스 동작 규칙은 이 framework 도메인이나 기존 runner 도메인 규칙으로 무리하게 확장하여 단정하지 않고, 추후 별도 도메인 규칙 생성 또는 후속 milestone 작업을 통해 정리한다.
## 포함 경로
- `apps/runner/pubspec.yaml` — runner Dart dependency와 `dart_framework` Git 의존성 선언
- `apps/runner/analysis_options.yaml` — runner Dart analyzer/lint 기준
- `apps/client/pubspec.yaml` — Flutter client dependency 선언
- `apps/client/analysis_options.yaml` — Flutter client analyzer/lint 기준
- `packages/flutter/oto_console/pubspec.yaml` — embeddable console package dependency 선언
- `services/core/go.mod` — Go core service dependency 선언
- `proto/` — runner/server protobuf 계약 정의
## 제외 경로
- `lib/framework/` — 제거된 로컬 모듈. 새로 만들지 않는다
- `apps/runner/lib/oto/` — OTO 비즈니스 로직 (framework 위에서 동작)
- `apps/runner/lib/cli/` — CLI 레이어 (framework를 소비)
## 주요 구성 요소
- `dart_framework/core/application.dart``apps/runner/bin/main.dart`에서 앱 진입 래퍼로 사용
- `dart_framework/platform/process.dart` — 커맨드 실행에서 `ProcessExecutor`, `ProcessData` 사용
- `dart_framework/platform/isolate_manager.dart` — CLI 실행/스케줄러 isolate 처리에서 사용
- `dart_framework/utils/*``simpleFuture`, path/system/string/os startup 유틸 사용
- `dart_framework/log/log.dart``Application.logWithType()`의 로그 타입에 사용
- `proto_socket` — agent Edge 등록 통신에서 사용하는 workspace 상위 path dependency
- `protobuf` / `fixnum` — generated protobuf 코드 런타임 의존성
- `resource_importer``apps/runner/lib/resources.resource_importer.dart` 생성 파일과 asset 임베딩 설정
## 유지할 패턴
- 프로세스 실행은 `ProcessExecutor.start()` (스트리밍, stdout/stderr 실시간 수신) 또는 `ProcessExecutor.run()` (블로킹, 결과만 필요) 중 목적에 맞게 선택
- `dart_framework` API 사용 시 기존 import 패턴을 따른다
- 외부 의존성 ref 변경은 각 `pubspec.yaml` 또는 `go.mod`에서 수행하고, 변경 후 패키지 갱신 및 `dart analyze` 또는 빌드 확인을 한다
- analyzer/lint 기준 변경은 기존 코드 전체에 영향을 줄 수 있으므로 `dart analyze` 결과와 필요한 수정 범위를 함께 확인한다
- generated protobuf lint 예외는 `analysis_options.yaml`의 analyzer exclude 또는 파일 생성 주석으로 관리한다
- 로컬에 `lib/framework/`를 되살리는 대신 필요한 OTO 로직은 `apps/runner/lib/oto/` 또는 `apps/runner/lib/cli/`의 해당 도메인에 둔다
## 다른 도메인과의 경계
- **core**: `apps/runner/lib/oto/application.dart`는 OTO 오케스트레이터이며 외부 framework의 Application과 별개다
- **cli/scheduler**: isolate, process, OS startup 유틸을 소비하지만 스케줄러 정책은 scheduler 도메인에 둔다
- **command**: 커맨드들은 `ProcessExecutor`를 소비하지만 커맨드별 비즈니스 로직은 command 도메인에 둔다
- **agent**: `proto_socket`, `protobuf`, `fixnum` 의존성은 framework 도메인에서 관리하지만 Edge 등록 프로토콜과 agent 정책은 agent 도메인에 둔다
## 금지 사항
- `lib/framework/` 디렉터리를 새로 만들지 않는다
- 외부 `dart_framework` 내부 코드를 이 저장소의 도메인 rule 기준으로 직접 수정한다고 가정하지 않는다
- OTO 비즈니스 로직(파이프라인, 커맨드 등록 등)을 framework 의존성 변경으로 해결하려 하지 않는다
- generated dependency/runtime 코드를 수동 수정으로 문제 해결하려 하지 않는다