oto/agent-ops/rules/project/domain/framework/rules.md

5.8 KiB

domain last_rule_review_commit last_rule_updated_at
framework 99cc06767f 2026-06-13

framework

목적 / 책임

현재 프로젝트에는 lib/framework/ 모듈이 없다. 이 도메인은 runner, client, console, core service의 패키지 선언(manifest), lockfile, 분석기(analyzer/lint), protobuf 계약 정의 및 생성 코드 관리, 외부 의존성 경계와 빌드 도구 설정을 기록한다. 단, 전용 도메인 규칙(dedicated domain rule)이 아직 존재하지 않는 apps/client/lib/**, packages/flutter/oto_console/lib/**, services/core/internal/** 등의 구현 코드가 가진 구체적인 비즈니스 동작 규칙은 이 framework 도메인이나 기존 runner 도메인 규칙으로 무리하게 확장하여 단정하지 않고, 추후 별도 도메인 규칙 생성 또는 후속 milestone 작업을 통해 정리한다.

포함 경로

  • Makefile — runner/client/core 검증 명령, proto 생성 명령, 로컬 실행 포트 기본값
  • apps/runner/pubspec.yaml — runner Dart dependency와 dart_framework Git 의존성 선언
  • apps/runner/pubspec.lock — runner dependency resolution snapshot
  • apps/runner/analysis_options.yaml — runner Dart analyzer/lint 기준
  • apps/client/pubspec.yaml — Flutter client dependency 선언
  • apps/client/pubspec.lock — Flutter client dependency resolution snapshot
  • apps/client/analysis_options.yaml — Flutter client analyzer/lint 기준
  • packages/flutter/oto_console/pubspec.yaml — embeddable console package dependency 선언
  • packages/flutter/oto_console/analysis_options.yaml — console package analyzer/lint 기준
  • services/core/go.mod — Go core service dependency 선언
  • services/core/go.sum — Go core service dependency checksum
  • services/core/oto/proto/oto/runner.proto에서 생성된 Go protobuf 코드
  • proto/ — runner/server protobuf 계약 정의

제외 경로

  • lib/framework/ — 제거된 로컬 모듈. 새로 만들지 않는다
  • apps/runner/lib/oto/ — OTO 비즈니스 로직 (framework 위에서 동작)
  • apps/runner/lib/cli/ — CLI 레이어 (framework를 소비)

주요 구성 요소

  • dart_framework/core/application.dartapps/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.dartApplication.logWithType()의 로그 타입에 사용
  • proto_socket — legacy iop Edge compatibility 경로에서 사용하는 workspace 상위 path dependency
  • protobuf / fixnum — generated protobuf 코드 런타임 의존성
  • resource_importerapps/runner/lib/resources.resource_importer.dart 생성 파일과 asset 임베딩 설정
  • proto/oto/runner.proto — OTO Server runner 등록, heartbeat, bootstrap, job claim, execution/log/artifact report, cancel/status/self-update 계약
  • services/core/oto/runner.pb.gomake proto-go 생성물
  • apps/runner/lib/oto/agent/oto/*.pb*.dartmake proto-dart 생성물

유지할 패턴

  • 프로세스 실행은 ProcessExecutor.start() (스트리밍, stdout/stderr 실시간 수신) 또는 ProcessExecutor.run() (블로킹, 결과만 필요) 중 목적에 맞게 선택
  • dart_framework API 사용 시 기존 import 패턴을 따른다
  • 외부 의존성 ref 변경은 각 pubspec.yaml 또는 go.mod에서 수행하고, 변경 후 패키지 갱신 및 dart analyze 또는 빌드 확인을 한다
  • tracked lockfile이 있는 package의 dependency 변경은 대응하는 pubspec.lock 또는 go.sum 갱신 여부를 확인한다
  • analyzer/lint 기준 변경은 기존 코드 전체에 영향을 줄 수 있으므로 dart analyze 결과와 필요한 수정 범위를 함께 확인한다
  • generated protobuf lint 예외는 analysis_options.yaml의 analyzer exclude 또는 파일 생성 주석으로 관리한다
  • protobuf 계약 변경 후 make proto-gomake proto-dart를 실행해 Go/Dart 생성물을 함께 갱신한다
  • 로컬에 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: http, proto_socket, protobuf, fixnum 의존성은 framework 도메인에서 관리하지만 OTO Server/legacy iop protocol 사용 방식과 agent 정책은 agent 도메인에 둔다
  • services/core/internal: Go core service business logic은 아직 dedicated domain rule이 없다. framework 도메인은 go.mod, go.sum, generated proto, build/test command 경계만 다룬다

금지 사항

  • lib/framework/ 디렉터리를 새로 만들지 않는다
  • 외부 dart_framework 내부 코드를 이 저장소의 도메인 rule 기준으로 직접 수정한다고 가정하지 않는다
  • OTO 비즈니스 로직(파이프라인, 커맨드 등록 등)을 framework 의존성 변경으로 해결하려 하지 않는다
  • generated dependency/runtime 코드를 수동 수정으로 문제 해결하려 하지 않는다
  • dedicated domain rule이 없는 apps/client/lib/**, packages/flutter/oto_console/lib/**, services/core/internal/**의 비즈니스 동작을 framework 규칙으로 단정하지 않는다