# Milestone: OTO Registration Online Smoke

## 위치

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

## 목표

iop Edge와 OTO `oto-agent`를 실제로 함께 띄워 Edge 직접 outbound 등록 흐름을 검증한다.
완료 시점에는 `registration accepted`와 최초 heartbeat 도착을 모두 만족했을 때만 online으로 보는 기준이 iop 구현과 OTO smoke에서 확인되어야 한다.

## 상태

[폐기]

## 구현 잠금

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

## 범위

- OTO Dart `proto_socket` client가 iop Edge의 OTO agent record token으로 등록되는 smoke를 구성한다.
- Edge는 registration accepted, first heartbeat received, online, failed 상태를 구분할 수 있어야 한다.
- unknown token, duplicate connection, heartbeat timeout, bootstrap command 실행 실패 또는 등록 실패를 구분해 진단 가능한 reason을 남긴다.
- OTO repo의 `oto-agent` 등록 흐름 잠금 해제 근거로 사용할 수 있는 최소 E2E evidence를 만든다.

## 기능

### Epic: [online-state] Registration and Online State

Edge와 OTO가 같은 기준으로 online/failed 상태를 판정한다.

- [x] [accepted-state] OTO agent registration accepted 상태가 generic node와 구분되어 기록된다.
- [ ] [heartbeat-online] 최초 heartbeat 도착 후 online으로 전환된다. 검증: OTO Dart smoke 또는 통합 smoke에서 registration accepted 뒤 heartbeat 도착까지 확인한다.
- [x] [failure-reason] unknown token, duplicate connection, heartbeat timeout이 서로 다른 실패 reason으로 확인된다.
- [ ] [unlock-evidence] OTO `oto-agent` 등록 흐름 잠금 해제에 사용할 smoke 결과와 실행 명령이 문서 또는 test log에 남는다.

## 완료 리뷰

- 상태: 폐기
- 요청일: 없음
- 완료 근거: `01_iop_edge_lifecycle` PASS로 `accepted-state`, `failure-reason`은 충족되었고, `heartbeat-online`, `unlock-evidence`가 아직 남아 있다.
- 리뷰 필요:
  - [x] 사용자가 OTO 독립형 실행 방식 전환을 결정했다
  - [x] archive 이동을 승인했다
- 리뷰 코멘트: OTO가 독립형 실행 방식으로 바뀔 예정이므로 Edge 직접 registration/heartbeat online smoke는 폐기한다.

## 범위 제외

- build/deploy run payload 전체
- artifact/log stream 전체
- 장기 credential rotation
- Control Plane fleet UI 반영

## 작업 컨텍스트

- 관련 경로: `apps/edge/internal/transport`, `apps/edge/internal/node`, `apps/edge/internal/events`, `scripts/e2e-*.sh`, `../oto/test/oto_iop_connection_smoke_test.dart`
- 표준선(선택): online 판정은 Edge registration accepted와 최초 heartbeat 도착을 모두 만족했을 때로 둔다.
- 표준선(선택): heartbeat timeout은 transport close reason과 lifecycle event metadata로 남긴다.
- 선행 작업: OTO Agent Registry 구현, OTO Bootstrap Command 발급
- 후속 작업: OTO Agent Message Boundary, OTO repo `oto-agent` 등록 흐름 잠금 해제 검토
- 확인 결과: local smoke의 기본 기준은 같은 host에서 iop Edge와 OTO를 띄우는 흐름으로 두고, split host는 주소/포트 override가 필요한 후속 또는 수동 검증 경로로 분리한다.
- 실행 계획: 큰 작업은 `agent-task/m-oto-registration-online-smoke/01_iop_edge_lifecycle`, `agent-task/m-oto-registration-online-smoke/02+01_oto_agent_session`, `agent-task/m-oto-registration-online-smoke/03+01,02_smoke_evidence`로 분리해 plan/code-review 기준을 작성했다.
- 폐기 결정: OTO는 독립형 실행 방식으로 전환될 예정이므로 iop Edge와 OTO `oto-agent`를 직접 proto-socket registration으로 연결하는 smoke 경로는 더 이상 현 로드맵의 진행 대상이 아니다.
