<!-- task=m-oto-registration-unlock-handoff/01_node_interface_parity plan=0 tag=ORU01 -->

# OTO Registration Unlock - Node Interface Parity

## 이 파일을 읽는 구현 에이전트에게

`CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션 작성은 필수다. 구현 후 검증을 실행하고 실제 변경 내용과 stdout/stderr를 채운 뒤 active 파일을 그대로 두고 리뷰 준비를 보고한다. 사용자 결정, 사용자 소유 외부 환경, 또는 범위 충돌 없이는 진행할 수 없을 때만 review stub의 `사용자 리뷰 요청` 섹션에 근거를 적고 중단한다. 재실행으로 해소 가능한 증거 공백은 사용자 리뷰 요청이 아니다.

## 배경

현재 Milestone은 OTO 등록 잠금 해제 evidence를 모으는 작업이다. 사용자는 OTO agent가 별도 UX로 갈라지지 않고 `iop-node`의 config/bootstrap 인터페이스를 대부분 이어받아야 한다고 명시했다. 이 작업은 그 기준을 현재 handoff 문서와 bootstrap command Milestone에 구현 가능한 계약으로 고정한다.

## 사용자 리뷰 요청 흐름

구현 중 차단은 active `CODE_REVIEW-*-G??.md`의 `사용자 리뷰 요청` 섹션에 기록한다. 이 섹션은 `agent-ops/skills/common/_templates/implementation-user-review-request-section.md` 양식이며, `USER_REVIEW.md` 작성과 검증은 code-review가 담당한다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md`
- Task ids:
  - `node-interface-parity`: OTO agent config와 bootstrap command가 기존 `iop-node` config/bootstrap의 필드명, flag 의미, 출력 형식, 진단 흐름을 최대한 유지하고 OTO 전용 차이만 별도로 설명한다.
- Completion mode: check-on-pass

## 분석 결과

### 읽은 파일

- `agent-ops/rules/project/domain/edge/rules.md`
- `agent-ops/rules/project/domain/node/rules.md`
- `agent-ops/rules/project/domain/testing/rules.md`
- `agent-test/local/rules.md`
- `agent-test/local/edge-smoke.md`
- `agent-test/local/testing-smoke.md`
- `agent-test/local/platform-common-smoke.md`
- `agent-roadmap/current.md`
- `agent-roadmap/phase/automation-runtime-bridge/PHASE.md`
- `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md`
- `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-bootstrap-command-issue.md`
- `apps/edge/cmd/edge/main.go`
- `apps/edge/cmd/edge/main_test.go`
- `apps/node/cmd/node/main.go`
- `packages/go/config/config.go`
- `configs/node.yaml`
- `configs/edge.yaml`

### 테스트 환경 규칙

`test_env=local`이다. `agent-test/local/rules.md`를 읽었고, Edge CLI/bootstrap UX 및 사용자 실행 파이프라인 기준으로 `edge-smoke`, `testing-smoke`, `platform-common-smoke`를 적용한다. 이 작업은 문서/로드맵 계약 정렬이므로 필수 검증은 `rg --sort path` 기반 내용 확인과 `git diff --check`다. 코드까지 고치면 `go test -count=1 ./apps/edge/cmd/edge ./packages/go/config`를 추가한다.

### 테스트 커버리지 공백

- 현재 `iop-edge node register`는 한 줄 `curl -fsSL .../bootstrap/node.sh | bash -s TOKEN` 출력 테스트가 있다.
- OTO 전용 command는 아직 구현 전이라 OTO command 출력/roundtrip 테스트는 없다. 이번 작업은 그 테스트 요구를 문서 계약으로 남긴다.
- 실제 OTO online smoke는 `02+01_unlock_evidence_handoff`에서 다룬다.

### 심볼 참조

none. 이 작업은 symbol rename/remove가 없다.

### 분할 판단

split decision policy를 평가했다. 공유 task group은 `m-oto-registration-unlock-handoff`다. `01_node_interface_parity`는 지금 실행 가능한 계약 정렬이고, `02+01_unlock_evidence_handoff`는 이 parity 계약과 선행 Milestone 완료 evidence에 의존한다. 따라서 두 subtask로 나눈다.

### 범위 결정 근거

이 작업은 `iop-node` parity 계약을 문서화하고 후속 구현/검증 기준을 고정한다. `apps/edge/cmd/edge/main.go`의 OTO command 구현, OTO Dart agent 구현, 실제 online smoke, workspace lock status enable 변경은 제외한다.

### 빌드 등급

`local-G06`: 문서/계약 정렬이 중심이고, 근거 코드와 테스트 라인이 명확하며 검증이 deterministic하다.

## 구현 체크리스트

- [ ] `oto-registration-unlock-handoff.md`에 `iop-node` bootstrap/config parity의 기준과 OTO 전용 차이 허용 범위를 명확히 남긴다.
- [ ] `oto-bootstrap-command-issue.md`에 OTO command가 기존 `node register`의 한 줄 token UX와 config field 의미를 유지해야 한다는 구현/검증 기준을 보강한다.
- [ ] `rg --sort path -n 'node-interface-parity|iop-node|agent_kind' agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md agent-roadmap/phase/automation-runtime-bridge/milestones/oto-bootstrap-command-issue.md`와 `git diff --check`를 실행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [ORU01-1] Handoff parity contract

#### 문제

`agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md:35`의 `node-interface-parity`는 기준을 요구하지만, 완료 evidence로 무엇을 확인할지 별도 계약 표가 없다. `apps/edge/cmd/edge/main.go:720`의 node bootstrap script는 `transport.edge_addr`, `transport.token`, `logging`, `metrics`를 만들고 `iop-node serve --config`로 바로 실행한다. 이 구조를 OTO가 얼마나 유지해야 하는지 handoff 문서에 남겨야 한다.

#### 해결 방법

`작업 컨텍스트` 또는 새 짧은 섹션에 parity 기준을 추가한다.

Before:

```markdown
# agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md:60
- 표준선(선택): OTO agent는 `iop-node` bootstrap/config UX를 기본형으로 삼고, `agent_kind=oto-agent`, OTO bootstrap script URL, OTO release asset URL처럼 OTO 책임 경계에 필요한 차이만 추가한다.
```

After:

```markdown
- Node parity 기준: OTO bootstrap은 `curl -fsSL <url> | bash -s <token>` 계열 한 줄 UX, `transport.edge_addr`/token 의미, logging/metrics 기본 구조, config check/diagnostic 흐름을 유지한다.
- OTO 차이 기준: `agent_kind=oto-agent`, OTO bootstrap script URL, OTO release asset URL, OTO-owned runtime path처럼 책임 경계에 필요한 값만 추가한다.
```

#### 수정 파일 및 체크리스트

- [ ] `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md`: parity 기준과 OTO-only 차이 기준 추가.

#### 테스트 작성

테스트 작성은 건너뛴다. roadmap 계약 문서 보강이며, 코드 동작 변경이 없다.

#### 중간 검증

```bash
rg --sort path -n 'node-interface-parity|iop-node|agent_kind' agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md
```

예상 결과: parity task, node UX 기준, `agent_kind` 차이 기준이 모두 검색된다.

### [ORU01-2] Bootstrap milestone parity criteria

#### 문제

`apps/edge/cmd/edge/main.go:1100`은 node register의 최종 사용자 출력이 한 줄 command임을 보장한다. `apps/edge/cmd/edge/main_test.go:642`와 `apps/edge/cmd/edge/main_test.go:873`은 이 출력을 테스트한다. `oto-bootstrap-command-issue.md`에도 OTO command가 이 인터페이스를 이어받아야 한다는 구현 기준과 테스트 기준이 있어야 한다.

#### 해결 방법

`oto-bootstrap-command-issue.md`의 범위/기능/작업 컨텍스트에 `node-interface-parity`와 테스트 요구를 명확히 남긴다.

Before:

```markdown
# agent-roadmap/phase/automation-runtime-bridge/milestones/oto-bootstrap-command-issue.md:35
- [ ] [bootstrap-output] command 출력은 한 줄 bootstrap command만 안정적으로 제공하고 token을 불필요하게 재출력하지 않는다.
```

After:

```markdown
- [ ] [node-interface-parity] OTO agent command/config 표면이 기존 `iop-node` bootstrap의 필드명, flag 의미, 출력 형식, 진단 흐름을 최대한 유지한다. 검증: node register의 one-line command 테스트와 같은 형태의 OTO command 테스트가 있다.
```

#### 수정 파일 및 체크리스트

- [ ] `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-bootstrap-command-issue.md`: parity Task 또는 검증 문구 보강.

#### 테스트 작성

테스트 작성은 건너뛴다. 이 Milestone은 아직 구현 계획 단계이며, 실제 OTO command test는 해당 구현 plan에서 작성한다.

#### 중간 검증

```bash
rg --sort path -n 'node-interface-parity|iop-node|agent_kind' agent-roadmap/phase/automation-runtime-bridge/milestones/oto-bootstrap-command-issue.md
```

예상 결과: bootstrap command Milestone에 parity 기준과 OTO-only 차이가 검색된다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md` | ORU01-1 |
| `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-bootstrap-command-issue.md` | ORU01-2 |

## 최종 검증

```bash
rg --sort path -n 'node-interface-parity|iop-node|agent_kind' agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md agent-roadmap/phase/automation-runtime-bridge/milestones/oto-bootstrap-command-issue.md
git diff --check
```

예상 결과: 검색 결과가 두 Milestone 모두에서 parity 기준을 보여주고, 공백 오류가 없다.

모든 코드 변경 완료 후 반드시 `CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채운다. 이 파일 작성이 구현의 마지막 단계다.
