# Milestone: agent 등록 capability 경계 정리

## 상태

[완료]

## 목표

`oto agent` 등록 경로가 command catalog를 직접 해석하지 않도록 분리하고, build/deploy runner가 노출할 capability 목록을 agent/runner 경계의 명시적 port로 제공한다.

## 범위

- `apps/runner`의 agent registration client가 command domain 구현체를 직접 import하는 경로를 제거한다.
- command catalog 기반 capability 산출은 command domain adapter가 담당하고, agent 등록 경로는 adapter 계약만 소비한다.
- 기존 OTO Server registration payload와 smoke 동작은 유지한다.

## 범위 제외

- 메시지 프로토콜 필드 확장
- generic remote shell capability 추가
- iop Edge 직접 연결 경로 복원

## 구현 잠금

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

## 작업 컨텍스트

- Agent domain rule은 agent 영역에서 command catalog 직접 실행/해석을 금지한다.
- 현재 `apps/runner/lib/oto/agent/edge_registration_client.dart`는 command registry를 import하고 `Command.catalogRows`를 직접 읽어 기본 command type 목록을 만든다.
- 표준선: agent 등록 경로는 capability provider port를 받고, command domain은 해당 port의 adapter 구현으로 연결한다.

## 기능

### Epic: [boundary] agent-command capability boundary

- [x] [agent-port] agent 등록에 필요한 capability provider 계약과 기본값 주입 지점을 정의한다.
- [x] [command-adapter] command catalog 조회와 `registerAllCommands()` 호출을 command domain adapter 뒤로 이동한다.
- [x] [registration] 기존 registration payload 의미를 유지하면서 agent registration client가 adapter 계약만 소비하도록 바꾼다. 검증: runner registration 관련 테스트와 OTO Server connection smoke가 통과한다.
- [x] [rule-evidence] 변경 후 agent domain rule 위반 import가 남아 있지 않은지 확인한다.

## 완료 리뷰

- 상태: 승인됨
- 요청일: 2026-06-11
- 완료 근거:
  - `RunnerCapabilityProvider`/`RunnerCapabilitySnapshot` port와 registration client 주입 지점이 PASS 완료 로그로 확인되었다.
  - `CommandCatalogRunnerCapabilityProvider` adapter와 command catalog parity test가 PASS 완료 로그로 확인되었다.
  - registration wiring과 agent domain rule import evidence가 PASS 완료 로그 및 현재 코드 대조로 확인되었다.
- 리뷰 필요:
  - [x] 사용자가 agent 등록 capability 경계 정리 Milestone 완료를 승인한다.
- 리뷰 코멘트: 사용자 승인에 따라 Milestone을 완료 처리하고 archive로 이동한다.
