# Milestone: Agent Bootstrap과 OTO 등록

## 위치

- Roadmap: `agent-roadmap/ROADMAP.md`
- Phase: `agent-roadmap/phase/automation-runtime-bridge/PHASE.md`

## 목표

Edge가 specialized domain agent를 생성하고 bootstrap command를 발급해 대상 머신에서 agent 설치와 등록을 완료하는 enrollment 흐름을 설계한다.
OTO는 build/deploy domain agent의 대표 후보로 둔다.
이 Milestone은 OTO 연동 전체 구현을 한 번에 담지 않고, iop2oto 브랜치에서 이어서 구현할 registry, bootstrap command, online smoke, message boundary Milestone의 계약 경계를 확정한다.

## 상태

[완료]

## 구현 잠금

- 상태: 해제
- 결정 필요: 없음

## 범위

- Edge agent registry를 generic node와 specialized domain agent를 함께 다룰 수 있는 모델로 확장하는 구현 Milestone 경계 정의
- agent type별 bootstrap command 발급 표면 설계와 OTO 전용 command 구현 Milestone 분리
- MVP enrollment token은 1회성 등록 토큰으로 두고, 등록 후 장기 credential 재발급은 후속 보안 강화로 분리
- HTTP local/insecure bootstrap은 명시적 local/dev 모드에서만 허용하고, 운영 기본값은 HTTPS bootstrap/release URL로 둔다
- OTO agent의 build run, cancel, status, capability, artifact, log event 메시지 경계를 후속 message boundary Milestone으로 분리
- OTO가 확정한 Linux MVP bootstrap command, release asset, config path, background 실행 기준을 Edge bootstrap 발급 계약으로 수용
- Edge가 OTO agent 생성, command 발급, registration accepted, 최초 heartbeat 기반 online 상태를 구분해 표현하는 기준 정리

## 기능

### Epic: [agent-boundary] Agent Boundary and Enrollment Path

- [x] [direct-agent] OTO agent는 `iop-node` 하위 프로세스가 아니라 Edge에 직접 outbound 연결하는 specialized domain agent로 둔다.
- [x] [bootstrap-first] Agent를 설치할 수 있는 대상은 bootstrap/enrollment를 우선한다.
- [x] [bridge-split] Agent 설치가 어렵거나 일회성 유지보수 대상이면 remote terminal bridge 경로와 구분한다.

### Epic: [bootstrap-command] Bootstrap Command Contract

- [x] [bootstrap-command] Edge가 OTO agent 생성과 bootstrap command 발급 상태를 표현하고 Linux 대상에서 바로 실행할 one-line bootstrap command를 발급하는 계약이 정의되어 있다.
- [x] [agent-record] Edge-side agent record가 `agent_kind=oto-agent`, agent id, alias, enrollment token, bootstrap 발급 상태를 소유하는 기준이 정의되어 있다.
- [x] [oto-contract] OTO의 bootstrap script 인자, release asset 이름, config path, background 실행 기준이 iop Edge 발급 계약에 반영되어 있고 OTO 로드맵 계약과 충돌하지 않는다.
- [x] [registration-state] bootstrap command 실행 후 agent config/service 등록과 Edge outbound enrollment 흐름이 문서화되고, `bootstrap issued`, `registration accepted`, `first heartbeat received`, `online`, `failed` 상태 기준이 구분되어 있다.
- [x] [insecure-policy] HTTP local/insecure bootstrap 모드는 명시 선택과 추가 검증 조건을 요구한다.
- [x] [milestone-split] registry 구현, bootstrap command 발급, online smoke, message boundary가 iop2oto Phase 안의 후속 Milestone으로 분리되어 있다.

### Epic: [ownership-boundary] IOP and OTO Ownership

- [x] [ownership] OTO agent와 generic Node의 책임 경계가 registry와 protocol 수준에서 구분되고 iop와 OTO의 책임 경계가 문서화되어 있다.
- [x] [iop-ownership] iop는 Edge agent registry, bootstrap command 발급, credential, 보안 검증 기준을 소유한다.
- [x] [oto-ownership] OTO는 build/deploy domain agent의 설치 산출물, 설정 생성, YAML run/capability/event 의미를 소유하고, OTO의 Edge bootstrap 계약 문서는 이 Milestone 산출물을 참조해 재개 가능하다.

## 완료 리뷰

- 상태: 승인됨
- 요청일: 2026-06-03
- 완료 근거: OTO direct agent 경계, bootstrap/enrollment 우선 경로, OTO bootstrap command/record/state 기준, insecure policy, iop/OTO ownership이 현재 Milestone 문서와 후속 구현 Milestone으로 정리되었다.
- 리뷰 필요:
  - [x] 사용자가 완료 결과를 확인했다
  - [x] archive 이동을 승인했다
- 리뷰 코멘트: 2026-06-03 사용자 요청으로 현재 마일스톤을 종료하고 archive 이동한다.

## 범위 제외

- OTO 구현을 `apps/node` adapter로 흡수
- Control Plane이 Node나 OTO agent를 직접 스케줄링
- bootstrap 보안 검증을 생략한 insecure 기본값
- OTO의 Linux bootstrap script 구현 자체
- OTO의 YAML run/capability/artifact/log 메시지 전체 구현
- Edge registry/API/DB schema의 전체 운영 영속화
- OTO와 iop 양쪽 repo의 모든 구현을 같은 Milestone에서 완료 처리

## 작업 컨텍스트

- 관련 경로: `apps/edge`, `README.md`, `agent-test/local/testing-smoke.md`, `../oto/agent-roadmap/phase/edge-direct-oto-agent/milestones/oto-agent-registration.md`, `../oto/agent-roadmap/phase/message-based-build-agent/milestones/agent-message-protocol.md`, `../oto/assets/script/shell/oto_agent_bootstrap.sh`
- 전환 상태: iop2oto 브랜치에서는 OTO 연동 작업을 이 Phase 아래에서 이어가며, OTO repo 로드맵에는 iop 구현 결과를 소비하는 후속 계약만 남긴다.
- 표준선(선택): OTO agent는 `iop-node` 하위 프로세스가 아니라 Edge에 직접 outbound 연결하는 specialized domain agent로 둔다.
- 표준선(선택): Edge는 `oto-agent` record를 만들고, agent id/alias/enrollment token/release base URL/bootstrap script URL을 포함한 one-line command를 발급한다.
- 표준선(선택): `enrollment_token`은 MVP에서 1회성 등록 토큰으로 다루고, 장기 credential 재발급/rotation은 후속 보안 강화 Milestone 후보로 둔다.
- 표준선(선택): OTO Linux MVP command 형식은 `curl -fsSL "${OTO_BOOTSTRAP_URL}" | bash -s -- --edge-url "${EDGE_URL}" --agent-id "${AGENT_ID}" --enrollment-token "${ENROLLMENT_TOKEN}" --release-base-url "${OTO_RELEASE_BASE_URL}" --agent-alias "${AGENT_ALIAS}"`를 기준으로 한다.
- 표준선(선택): OTO bootstrap 필수 인자는 `--edge-url`, `--agent-id`, `--enrollment-token`, `--release-base-url`이고, 선택 인자는 `--agent-alias`, `--install-dir`, `--config-path`, `--workspace-root`, `--log-dir`, `--no-background`다.
- 표준선(선택): OTO Linux release asset은 `uname -m` 기준으로 `oto-linux-x64.tar.gz` 또는 `oto-linux-arm64.tar.gz`를 선택하며, archive 안에는 실행 파일 `oto`가 있어야 한다.
- 표준선(선택): OTO MVP 기본 경로는 `$HOME/.oto/bin`, `$HOME/.oto/agent/config.yaml`, `$HOME/.oto/workspace`, `$HOME/.oto/agent/log`이고, background 실행은 사용자 권한 best-effort로 시작한다.
- 표준선(선택): online 판정은 Edge registration accepted와 최초 heartbeat 도착을 모두 만족했을 때로 둔다.
- 표준선(선택): OTO MVP 보안은 HTTPS bootstrap/release URL, token 재출력 금지, 설정 파일 권한 제한, 임시 파일 정리를 기본으로 두고 checksum/signature, Edge fingerprint pinning, credential rotation은 후속 강화로 둔다.
- 전달 계약: iop는 OTO script 구현을 복제하지 않고, Edge가 발급하는 bootstrap command와 registry/credential/state 모델이 OTO 계약을 소비하도록 문서화한다.
- 선행 작업: Edge-Node 실행 스켈레톤, Edge 입력 표면, Specialized Agent proto-socket 연결 기반
- 후속 작업: OTO Agent Registry 구현, OTO Bootstrap Command 발급, OTO Registration Online Smoke, OTO Agent Message Boundary
- 확인 필요: OTO release asset 실제 배포 URL과 iop local/dev smoke에서 사용할 포트/host 값
