# Milestone: OTO Agent Registry 구현

## 위치

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

## 목표

Edge-side registration record와 connected registry가 generic `iop-node`와 `oto-agent`를 구분하도록 구현한다.
기존 `RegisterRequest(token)` handshake는 유지하되 token이 가리키는 record에서 `agent_kind=oto-agent`를 판별하고 lifecycle/capability 표시의 기반을 만든다.

## 상태

[완료]

## 구현 잠금

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

## 범위

- Edge config와 in-memory store에 generic node와 OTO agent record를 구분하는 최소 모델을 추가한다.
- 기존 `nodes[]` 기반 generic node 등록 경로와 호환성을 유지한다.
- connected entry에 agent kind, alias, id, lifecycle state, optional capability summary를 보존할 수 있는 구조를 만든다.
- duplicate connection과 reconnect 정책은 기존 reject 기본값을 유지하고, replace 허용은 후속 감사/close reason 정의 뒤로 미룬다.

## 기능

### Epic: [registry-model] Agent Registry Model

Edge가 token으로 찾은 record를 generic node 또는 OTO agent로 분류하고 연결 상태를 구분한다.

- [x] [agent-kind-model] Edge-side registration record가 `generic-node`와 `oto-agent` kind를 표현한다.
- [x] [compat-node] 기존 `nodes[]`와 `iop-node` 등록 테스트가 agent kind 추가 뒤에도 깨지지 않는다. 검증: `go test ./apps/edge/internal/node ./apps/edge/internal/transport ./apps/edge/cmd/edge`
- [x] [connected-entry] connected registry entry가 agent id, alias, kind, lifecycle state를 노출할 수 있다.
- [x] [duplicate-policy] 같은 OTO agent identity의 중복 연결은 기본 reject로 처리되고 reason이 구분된다.

## 완료 리뷰

- 상태: 승인됨
- 요청일: 2026-06-03
- 완료 근거: `agent-task/archive/2026/06/m-oto-agent-registry-implementation/01_config_store/complete.log`, `02+01_registry_transport/complete.log`, `03+01,02_service_snapshots/complete.log`가 모두 PASS이며 Roadmap Completion에 `agent-kind-model`, `connected-entry`, `duplicate-policy`, `compat-node` 완료가 기록되어 있다.
- 완료 근거: `go test -count=1 ./apps/edge/... ./packages/go/config`, 대상 package 테스트, `make test-e2e`, repo 내부 edge-node 진단이 PASS로 기록되어 있다.
- 리뷰 필요:
  - [x] 사용자가 완료 결과를 확인했다
  - [x] archive 이동을 승인했다
- 리뷰 코멘트: 2026-06-03 사용자 요청으로 모든 기능 Task 완료 상태를 확인하고 Milestone을 완료/archive 처리한다.

## 범위 제외

- 장기 credential rotation 구현
- OTO build/deploy run payload 구현
- Control Plane fleet 화면 구현
- DB 영속화와 audit schema 확정

## 작업 컨텍스트

- 관련 경로: `packages/go/config`, `apps/edge/internal/node`, `apps/edge/internal/transport`, `apps/edge/internal/service`, `configs/edge.yaml`
- 완료된 task group: `agent-task/archive/2026/06/m-oto-agent-registry-implementation/`
- 완료된 plan 분할:
  - `01_config_store`: `agent-kind-model` 완료. Config/NodeStore에 `generic-node`, `oto-agent` kind 모델을 추가했다.
  - `02+01_registry_transport`: `connected-entry`, `duplicate-policy` 완료. Registry entry와 transport registration 경로에 kind/lifecycle과 OTO duplicate reason을 반영했다.
  - `03+01,02_service_snapshots`: `compat-node` 완료. Service snapshot에 kind/lifecycle을 노출하고 기존 generic node 회귀를 검증했다.
- 표준선(선택): `RegisterRequest`에는 kind field를 추가하지 않고, token이 가리키는 Edge-side record에서 kind를 판별한다.
- 표준선(선택): registry는 먼저 기존 `NodeEntry` 확장 또는 얇은 `AgentEntry` 도입 중 가장 작은 변경으로 시작한다.
- 선행 작업: Agent Bootstrap과 OTO 등록, Specialized Agent proto-socket 연결 기반
- 후속 작업: OTO Bootstrap Command 발급, OTO Registration Online Smoke
- 확인 필요: Control Plane에 노출할 agent kind/status 필드 이름은 Control Plane wire 갱신 시 재확인한다.
