update agent-roadmap: modify PHASE and milestone files, archive independent-control-plane

This commit is contained in:
toki 2026-06-11 05:54:38 +09:00
parent f798f78527
commit 4b79a06f75
7 changed files with 12 additions and 53 deletions

View file

@ -17,12 +17,12 @@ OTO는 YAML 기반 빌드/배포 파이프라인을 실행하는 Dart CLI에서
- [폐기] Edge 직접 연결 기반 `oto-agent`
- 경로: `agent-roadmap/archive/phase/edge-direct-oto-agent/PHASE.md`
- 요약: OTO가 iop Edge와 proto-socket 기반 outbound 통신을 하는 경로는 검증 근거만 보존하고, 독립 OTO Control Plane 방향으로 전환하며 기본 제품 경로에서는 폐기한다.
- [검토중] 독립 Control Plane 기반 OTO
- 경로: `agent-roadmap/phase/independent-control-plane/PHASE.md`
- 요약: OTO를 iop 직접 연결 구조에서 분리해 `apps/runner`, `apps/client`, `services/core`를 가진 독립 CI/CD runner/control plane 제품 구조로 전환했고, Phase 완료 후보로 검토 중이다.
- [검토중] 메시지 기반 빌드 에이전트
- [완료] 독립 Control Plane 기반 OTO
- 경로: `agent-roadmap/archive/phase/independent-control-plane/PHASE.md`
- 요약: OTO를 iop 직접 연결 구조에서 분리해 `apps/runner`, `apps/client`, `services/core`를 가진 독립 CI/CD runner/control plane 제품 구조로 전환하고 archive로 정리했다.
- [진행중] 메시지 기반 빌드 에이전트
- 경로: `agent-roadmap/phase/message-based-build-agent/PHASE.md`
- 요약: `oto agent` 또는 `oto daemon` 모드에서 Edge와 양방향 메시지 통신을 사용하며, OTO를 build/deploy 전용 domain agent로 노출한다.
- 요약: `oto agent` 또는 `oto daemon` 모드에서 OTO Server와 양방향 메시지 통신을 사용하며, 열린 계획 Milestone을 통해 build/deploy 전용 runner 경계를 정리 중이다.
## 로딩 정책

View file

@ -2,7 +2,7 @@
## 상태
[검토중]
[완료]
## 목표
@ -39,13 +39,13 @@ OTO를 iop Edge에 직접 붙는 domain agent가 아니라, 독립 실행 가능
## 완료 리뷰
- 상태: 요청
- 상태: 승인
- 요청일: 2026-06-09
- 완료 근거:
- 독립 Control Plane 분리, 포트/환경, agent-ops 규칙, runner 출력, oto_console, core server, workspace metadata Milestone이 모두 완료되어 archive 경로로 정리되었다.
- `apps/runner`, `apps/client`, `services/core` 중심의 독립 OTO runner/control plane 구조와 재현성 메타데이터 기준이 정리되었다.
- 사용자 최종 확인:
- [ ] 이 Phase를 완료로 승인하고 archive 이동해도 되는지 확인한다.
- [x] 이 Phase를 완료로 승인하고 archive 이동해도 되는지 확인한다.
- 리뷰 코멘트: runner 전체 test baseline 정리는 `메시지 기반 빌드 에이전트` Phase의 `runner 검증 기준 정합화` Milestone에서 별도 후속으로 추적한다.
## Phase 경계

View file

@ -2,7 +2,7 @@
## 상태
[검토중]
[진행중]
## 목표

View file

@ -1,4 +1,4 @@
# Milestone: agent 등록 capability 경계 정리
# Milestone: agent 등록 capability 경계 정리
## 상태

View file

@ -29,7 +29,7 @@
- `agent-test/local/agent-smoke.md`는 legacy iop smoke를 필수 agent smoke에서 제외하지만, `Makefile``runner-test`는 전체 `dart test`를 실행한다.
- `apps/runner/test/oto_iop_connection_smoke_test.dart`는 현재 iop Edge가 허용하지 않는 `agent_kind: "oto-agent"`를 사용해 기본 test suite를 실패시킨다.
- root `test_regist.dart`는 root package 경계 밖 import로 `dart analyze`를 실패시킨다.
- root 임시 Dart 파일 `test_regist.dart`, `check_datapath2.dart`를 제거했고, `dart analyze .`가 통과한다.
## 기능
@ -37,5 +37,5 @@
- [ ] [test-scope] `Makefile`의 runner/root 테스트 target과 `agent-test/local` smoke 문서의 필수 검증 범위를 일치시킨다.
- [ ] [legacy-iop] iop Edge 직접 연결 smoke를 기본 runner test에서 제외하거나 legacy 전용 명령으로 명시한다. 검증: `make runner-test`가 현재 필수 검증 기준으로 통과한다.
- [ ] [root-analyze] root analyzer를 깨뜨리는 임시 Dart 파일을 제거, 이동 또는 분석 제외 범위로 정리한다. 검증: root 분석 명령이 실패하지 않는다.
- [x] [root-analyze] root analyzer를 깨뜨리는 임시 Dart 파일을 제거, 이동 또는 분석 제외 범위로 정리한다. 검증: root 분석 명령이 실패하지 않는다.
- [ ] [smoke-evidence] 필수 agent smoke 명령과 제외된 legacy smoke의 상태가 문서와 명령 양쪽에서 같은 의미를 갖도록 확인한다.

View file

@ -1,10 +0,0 @@
import 'package:dart_framework/core/application.dart' as framework;
import 'package:dart_framework/utils/system_util.dart';
void main() {
framework.Application('oto', 'com.toki-labs.oto', () {
print('dataPath: $dataPath');
print('appName: $appName');
print('appIdendifier: $appIdendifier');
}, (e, s) {});
}

View file

@ -1,31 +0,0 @@
import 'dart:io';
import 'package:oto/cli/commands/scheduler/scheduler_manager.dart';
void main() async {
final file = File('test_pipeline.yaml');
await file.writeAsString('''
scheduler:
alias: test_alias
commands: []
pipeline:
id: main
workflow: []
''');
final manager = SchedulerManager.create();
final systemdDir = Directory('/config/.config/systemd/user');
if (!systemdDir.existsSync()) {
systemdDir.createSync(recursive: true);
}
try {
await manager.regist('test_pipeline.yaml');
print('Success!');
} catch (e, stack) {
print('Failed with: $e');
print(stack);
} finally {
if (file.existsSync()) file.deleteSync();
final copied = File('scheduler/test_alias.yaml');
if (copied.existsSync()) copied.deleteSync();
}
}