# Milestone: OTO Registration Unlock Handoff

## 위치

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

## 목표

iop2oto의 OTO registry, bootstrap command, registration online smoke 결과를 OTO repo의 `oto-agent` 등록 흐름 잠금 해제 근거로 정리한다.
완료 시점에는 OTO가 `registration-state`를 마무리할 수 있도록 accepted, first heartbeat, online/failed/retry 기준과 실행 evidence가 한곳에 남아 있어야 한다.

## 상태

[폐기]

## 구현 잠금

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

## 범위

- `OTO Agent Registry 구현`, `OTO Bootstrap Command 발급`, `OTO Registration Online Smoke` 완료 근거를 OTO 잠금 해제 관점에서 묶는다.
- OTO agent config와 bootstrap command가 기존 `iop-node` config/bootstrap 인터페이스를 대부분 이어받고, OTO 전용 차이만 명시되어 있는지 확인한다.
- registration accepted, 최초 heartbeat, online 전환, failure reason, retry 기준을 OTO `registration-state`에 넘길 수 있는 형태로 요약한다.
- workspace `.agent-roadmap-sync/locks.yaml`의 OTO lock target으로 사용할 수 있는 완료 evidence를 남긴다.
- OTO repo의 Dart agent 구현이나 bootstrap script 자체 구현은 OTO repo 책임으로 남긴다.

## 기능

### Epic: [unlock-gate] OTO Unlock Gate

OTO repo의 `oto-agent` 등록 흐름 잠금 해제에 필요한 iop2oto 쪽 완료 근거를 모은다.

- [ ] [upstream-complete] `OTO Agent Registry 구현`, `OTO Bootstrap Command 발급`, `OTO Registration Online Smoke`가 [검토중] 또는 [완료] 상태이며 각 완료 근거가 확인되어 있다.
- [x] [node-interface-parity] OTO agent config와 bootstrap command가 기존 `iop-node` config/bootstrap의 필드명, flag 의미, 출력 형식, 진단 흐름을 최대한 유지하고 OTO 전용 차이만 별도로 설명한다.
- [ ] [online-evidence] registration accepted와 최초 heartbeat 이후 online 전환이 같은 smoke evidence 안에서 확인된다. 검증: `OTO Registration Online Smoke`의 실행 명령과 PASS 로그 또는 문서 링크가 남는다.
- [ ] [failure-retry] unknown token, duplicate connection, heartbeat timeout, bootstrap/registration 실패 reason과 retry 기준이 OTO가 소비할 수 있는 형태로 요약되어 있다.
- [ ] [lock-sync-ready] OTO lock entry에서 `iop2oto:agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md`를 `enable`로 동기화할 수 있는 완료 근거가 남는다.

## 완료 리뷰

- 상태: 폐기
- 요청일: 없음
- 완료 근거: `node-interface-parity`는 `agent-task/archive/2026/06/m-oto-registration-unlock-handoff/01_node_interface_parity/complete.log`에서 PASS 완료되었다.
- 완료 근거: unlock handoff evidence completion은 `agent-task/archive/2026/06/m-oto-registration-unlock-handoff/02+01_unlock_evidence_handoff/complete.log`에서 선행 gate 미충족 re-block으로 종결되었으며, bootstrap command와 online smoke evidence가 아직 남아 있다.
- 리뷰 필요:
  - [x] 사용자가 OTO 독립형 실행 방식 전환을 결정했다
  - [x] archive 이동을 승인했다
- 리뷰 코멘트: OTO 독립형 실행 전환으로 Edge 직접 등록 흐름 잠금 해제 handoff가 필요 없어져 폐기한다.

## 범위 제외

- OTO Dart `oto-agent` 구현 변경
- OTO bootstrap script 자체 구현
- OTO build/deploy run payload 전체
- Control Plane fleet UI 반영
- 장기 credential rotation과 운영 인증서 관리

## 작업 컨텍스트

- 관련 경로: `apps/edge/internal/transport`, `apps/edge/internal/node`, `apps/edge/internal/events`, `scripts/e2e-*.sh`, `../oto/test/oto_iop_connection_smoke_test.dart`, `../oto/agent-roadmap/phase/edge-direct-oto-agent/milestones/oto-agent-registration.md`
- 표준선(선택): OTO agent는 `iop-node` bootstrap/config UX를 기본형으로 삼고, `agent_kind=oto-agent`, OTO bootstrap script URL, OTO release asset URL처럼 OTO 책임 경계에 필요한 차이만 추가한다.
- 표준선(선택): unlock evidence는 registration accepted와 최초 heartbeat online을 모두 포함해야 한다.
- 표준선(선택): failure/retry 기준은 OTO `registration-state` 문장으로 옮길 수 있는 수준의 reason 이름과 판정 기준을 포함한다.
- 선행 작업: OTO Agent Registry 구현, OTO Bootstrap Command 발급, OTO Registration Online Smoke
- 후속 작업: OTO repo `oto-agent` 등록 흐름 잠금 해제 검토, OTO Agent Message Boundary
- 확인 필요: OTO lock 동기화는 이 Milestone이 [검토중] 또는 [완료]가 된 뒤 update-roadmap 또는 런타임 완료 이벤트로 수행한다.

## 선행 상태 점검 (2026-06-03, REVIEW_ORU02 재검증)

ORU02 handoff plan의 upstream completion gate 평가 결과다. 상태는 각 선행 Milestone 문서(`## 상태`)를 source-of-truth로 직접 재확인했다.

- predecessor `01_node_interface_parity`: PASS. `agent-task/archive/2026/06/m-oto-registration-unlock-handoff/01_node_interface_parity/complete.log` 확인 결과 `node-interface-parity`가 PASS 완료되었고, `rg --sort path -n 'node-interface-parity|iop-node|agent_kind' ...`와 `git diff --check` 검증이 통과했다.
- `OTO Agent Registry 구현`: [완료] — archive 문서 `agent-roadmap/archive/phase/automation-runtime-bridge/milestones/oto-agent-registry-implementation.md`로 이동되었고, 기능 Task(`agent-kind-model`, `compat-node`, `connected-entry`, `duplicate-policy`)와 registry task group의 3개 `complete.log`가 모두 PASS evidence를 갖는다.
- `OTO Bootstrap Command 발급`: [완료] — archive 문서 `agent-roadmap/archive/phase/automation-runtime-bridge/milestones/oto-bootstrap-command-issue.md`로 이동되었고, `agent register` command, one-line bootstrap output, OTO args, config roundtrip evidence가 PASS로 남아 있다.
- `OTO Registration Online Smoke`: [진행중] — 현재 실행 가능한 다음 Milestone이며 registration accepted/최초 heartbeat online PASS 로그 또는 smoke evidence는 아직 없다.
- **upstream-complete gate: 미충족.** `OTO Registration Online Smoke`가 아직 [검토중] 또는 [완료]가 아니므로 online-evidence(accepted/heartbeat)와 failure-retry(unknown token, duplicate connection, heartbeat timeout, bootstrap/registration 실패 reason과 retry 기준) evidence를 OTO `registration-state`로 옮길 수 있는 형태로 수집할 수 없다. 따라서 `upstream-complete`, `online-evidence`, `failure-retry`, `lock-sync-ready`는 아직 `[x]` 처리하지 않는다. 이 gate는 사용자 결정이 아니라 선행 Milestone 구현이 완료되어야 닫히는 repo-owned evidence gap이다.

### lock sync readiness

- lock checker(`../oto/agent-ops/bin/roadmap-dependency-checker.sh --find-milestone ... rely-on ...`) 출력: `rely-on:oto:oto-agent-registration`. 이 handoff Milestone은 OTO lock `oto:oto-agent-registration`의 `rely-on.target`이다.
- `/config/workspace/.agent-roadmap-sync/locks.yaml`에서 이 target의 `status`는 `disable`이다. enable 동기화 조건: 이 Milestone이 [검토중] 또는 [완료]가 되어 upstream evidence가 한곳에 정리되어야 하며, 동기화 실행은 evidence 없이 직접 수정하지 않고 update-roadmap 또는 런타임 완료 이벤트로만 수행한다. 현재는 upstream-complete 미충족으로 `disable` 유지.
- 폐기 결정: OTO는 독립형 실행 방식으로 전환될 예정이므로 iop2oto Edge 직접 registration evidence를 OTO `oto-agent` 등록 흐름 잠금 해제 근거로 넘기는 handoff는 폐기한다.
