<!-- task=m-oto-registration-unlock-handoff/02+01_unlock_evidence_handoff plan=0 tag=ORU02 -->

# OTO Registration Unlock - Evidence Handoff

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

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

## 배경

OTO lock을 해제하려면 iop2oto의 registry, bootstrap command, online smoke 결과가 OTO `registration-state`로 옮길 수 있는 evidence가 되어야 한다. 이 작업은 선행 Milestone 완료를 확인하고, accepted/heartbeat/failed/retry 기준과 lock sync 준비 상태를 handoff 문서에 모은다.

## 사용자 리뷰 요청 흐름

구현 중 차단은 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:
  - `upstream-complete`: `OTO Agent Registry 구현`, `OTO Bootstrap Command 발급`, `OTO Registration Online Smoke`가 [검토중] 또는 [완료] 상태이며 각 완료 근거가 확인되어 있다.
  - `online-evidence`: registration accepted와 최초 heartbeat 이후 online 전환이 같은 smoke evidence 안에서 확인된다.
  - `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`로 동기화할 수 있는 완료 근거가 남는다.
- 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-agent-registry-implementation.md`
- `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-bootstrap-command-issue.md`
- `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-online-smoke.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, registry/transport/service, 사용자 실행 파이프라인 기준으로 `edge-smoke`, `testing-smoke`, `platform-common-smoke`를 적용한다. 선행 구현이 완료된 뒤에는 최소 `go test -count=1 ./apps/edge/... ./packages/go/config`, 관련 smoke evidence 확인, `roadmap-dependency-checker.sh` 판별을 실행한다. 실제 full-cycle이 환경 문제로 불가하면 실행한 명령, 출력, blocker, 남은 위험을 review stub에 남긴다.

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

- 현재 `OTO Agent Registry 구현`은 active plan 상태이고 아직 complete evidence가 없다.
- `OTO Bootstrap Command 발급`과 `OTO Registration Online Smoke`는 Milestone 상태가 [계획]이므로 구현/evidence가 없다.
- OTO Dart smoke 또는 통합 smoke PASS 로그가 아직 없다.

### 심볼 참조

none. 이 plan은 evidence/handoff 정리이며 rename/remove가 없다. 구현 중 lock checker 또는 helper script call site를 바꾸면 새 plan이 필요하다.

### 분할 판단

split decision policy를 평가했다. 이 subtask는 `02+01_unlock_evidence_handoff`이고 predecessor `01_node_interface_parity`의 `complete.log`가 필요하다. 현재 작성 시점에는 predecessor complete.log가 없으므로 implementation 시작 전 `agent-task/m-oto-registration-unlock-handoff/01_node_interface_parity/complete.log` 또는 archive matching complete.log를 확인한다.

### 범위 결정 근거

이 작업은 선행 Milestone 완료 evidence를 모아 handoff 문서와 lock readiness를 정리한다. 선행 Milestone 자체 구현, OTO Dart agent 코드 변경, OTO bootstrap script 변경, OTO lock status를 evidence 없이 `enable`로 바꾸는 작업은 제외한다.

### 빌드 등급

`cloud-G07`: cross-repo evidence, smoke log 신뢰도, lock 동기화 판정이 핵심이며 단순 로컬 문서 작업보다 검증 판단 부담이 크다.

## 구현 체크리스트

- [ ] 시작 전 `01_node_interface_parity`의 `complete.log`로 predecessor 완료를 확인한다.
- [ ] `OTO Agent Registry 구현`, `OTO Bootstrap Command 발급`, `OTO Registration Online Smoke` 상태와 완료 근거를 확인하고, 충족되지 않으면 `사용자 리뷰 요청`이 아니라 구현-owned blocker/evidence gap으로 기록한다.
- [ ] registration accepted, 최초 heartbeat online, failure reason, retry 기준을 `oto-registration-unlock-handoff.md`에 OTO가 소비할 수 있는 문장으로 정리한다.
- [ ] `roadmap-dependency-checker.sh --find-milestone`으로 handoff Milestone이 OTO lock의 `rely-on` target인지 확인하고, enable 동기화 조건을 문서화한다.
- [ ] `go test -count=1 ./apps/edge/... ./packages/go/config`와 필요한 smoke/evidence 확인 명령을 실행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [ORU02-1] Upstream completion gate

#### 문제

`oto-registration-unlock-handoff.md:35`는 세 선행 Milestone이 [검토중] 또는 [완료]인지 확인해야 한다. 현재 Phase 흐름에서는 `OTO Agent Registry 구현`이 [진행중], `OTO Bootstrap Command 발급`과 `OTO Registration Online Smoke`가 [계획]이다. evidence 없이 이 Task를 체크하면 OTO lock이 잘못 해제될 수 있다.

#### 해결 방법

선행 Milestone 문서의 상태와 완료 리뷰를 확인하고 handoff 문서에 완료 근거 또는 미충족 blocker를 기록한다. archive 문서는 읽지 않는다. 완료 evidence가 부족하면 current task는 완료하지 않고 review stub에 evidence gap을 남긴다.

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

- [ ] `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md`: 선행 상태/evidence 섹션 추가 또는 갱신.

#### 테스트 작성

테스트 작성은 건너뛴다. roadmap evidence gate이며 코드 동작 변경이 없다.

#### 중간 검증

```bash
rg --sort path -n 'OTO Agent Registry 구현|OTO Bootstrap Command 발급|OTO Registration Online Smoke|upstream-complete' agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md
```

### [ORU02-2] Online and failure handoff evidence

#### 문제

`oto-registration-unlock-handoff.md:36`과 `oto-registration-unlock-handoff.md:37`는 accepted, heartbeat online, failure/retry 기준을 요구한다. `oto-registration-online-smoke.md`는 smoke evidence를 만들 계획이지만 아직 [계획] 상태다. 구현 후에는 OTO `registration-state`에 그대로 옮길 수 있는 reason 이름과 판정 기준이 필요하다.

#### 해결 방법

Online smoke 완료 로그나 문서 링크를 근거로 handoff 문서에 다음 정보를 정리한다: registration accepted 조건, 최초 heartbeat online 조건, unknown token/duplicate/heartbeat timeout/bootstrap failure reason, retry 기준. 실행 로그 원문은 tracked roadmap에 길게 붙이지 말고 path/명령/요약만 남긴다.

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

- [ ] `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md`: online/failure/retry handoff evidence 추가.

#### 테스트 작성

테스트 작성은 선행 smoke 구현 Milestone에서 수행한다. 이 작업은 PASS 로그와 문서 링크를 검증 evidence로 수집한다.

#### 중간 검증

```bash
go test -count=1 ./apps/edge/... ./packages/go/config
```

예상 결과: Edge 전체와 config package 테스트 PASS. Go test cache output은 허용하지 않는다.

### [ORU02-3] Lock sync readiness

#### 문제

`/config/workspace/.agent-roadmap-sync/locks.yaml`의 OTO lock은 `iop2oto:agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md`를 `disable`로 추적한다. 이 Milestone이 [검토중] 또는 [완료]가 되면 runtime/update-roadmap이 enable로 동기화할 수 있는 근거가 있어야 한다.

#### 해결 방법

lock checker로 현재 Milestone이 OTO lock의 `rely-on` target인지 확인하고, handoff 문서에 enable 동기화 조건과 남은 blocker를 기록한다. 이 plan에서는 evidence 없이 `locks.yaml` status를 enable로 바꾸지 않는다.

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

- [ ] `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md`: lock sync readiness 근거 추가.
- [ ] `/config/workspace/.agent-roadmap-sync/locks.yaml`: status 변경은 Milestone이 [검토중] 또는 [완료]가 된 후 update-roadmap 동기화로만 수행한다.

#### 테스트 작성

테스트 작성은 건너뛴다. lock checker 명령으로 판별한다.

#### 중간 검증

```bash
../oto/agent-ops/bin/roadmap-dependency-checker.sh --find-milestone "iop2oto:agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md" rely-on "/config/workspace/.agent-roadmap-sync/locks.yaml"
```

예상 결과: `rely-on:oto:oto-agent-registration`.

## 의존 관계 및 구현 순서

이 task directory의 `+01`은 `01_node_interface_parity` 완료 의존성을 뜻한다. 구현 전 predecessor `complete.log`를 확인한다. 그 뒤 선행 Milestone 완료 상태를 확인하고, evidence가 있으면 ORU02-1 -> ORU02-2 -> ORU02-3 순서로 진행한다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md` | ORU02-1, ORU02-2, ORU02-3 |
| `/config/workspace/.agent-roadmap-sync/locks.yaml` | ORU02-3, enable 동기화 조건 확인만 |

## 최종 검증

```bash
go test -count=1 ./apps/edge/... ./packages/go/config
../oto/agent-ops/bin/roadmap-dependency-checker.sh --find-milestone "iop2oto:agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-unlock-handoff.md" rely-on "/config/workspace/.agent-roadmap-sync/locks.yaml"
git diff --check
```

예상 결과: Go 테스트 PASS, lock checker가 `rely-on:oto:oto-agent-registration`를 출력, 공백 오류 없음.

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