<!-- task=m-oto-registration-online-smoke/01_iop_edge_lifecycle plan=1 tag=REVIEW_API -->

# Follow-up Plan - REVIEW_API

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

`CODE_REVIEW-*-G??.md`의 구현 에이전트 소유 섹션을 채우는 것까지가 구현입니다. 코드를 바꾼 뒤 검증을 실행하고, 실제 변경 내용과 stdout/stderr를 리뷰 stub에 기록한 상태로 멈추세요. 종결 판정, log rename, `complete.log`, archive 이동은 code-review 스킬 전용입니다. 구현 중 사용자 결정, 사용자 소유 외부 환경, 범위 충돌이 없으면 `사용자 리뷰 요청`을 만들지 않습니다.

## 배경

이전 리뷰 `code_review_cloud_G07_0.log`는 lifecycle/event 구현과 targeted/Edge/package 회귀 검증은 통과했지만, `gofmt -l`가 변경된 Go test 파일 두 개를 반환해 WARN으로 종료했다. 이번 후속은 동작 변경 없이 formatting을 정리하고 같은 targeted 검증을 재실행하는 작업이다.

## 사용자 리뷰 요청 흐름

구현 중 사용자-only blocker가 있으면 active `CODE_REVIEW-*-G??.md`의 `사용자 리뷰 요청` 섹션을 실제 내용으로 교체하고 멈춘다. code-review가 요청 정당성을 검증하고 실제 `USER_REVIEW.md` 작성 여부를 결정한다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-online-smoke.md`
- Task ids:
  - `accepted-state`: OTO agent registration accepted 상태가 generic node와 구분되어 기록된다.
  - `failure-reason`: unknown token, duplicate connection, heartbeat timeout이 서로 다른 실패 reason으로 확인된다.
- Completion mode: check-on-pass

## 범위 결정 근거

- source behavior, test assertions, event constants, registry/transport logic은 변경하지 않는다.
- 이전 리뷰의 Suggested issue만 해소한다.
- `agent-roadmap/**`는 수정하지 않는다.

## 구현 체크리스트

- [ ] `gofmt -w apps/edge/internal/node/registry_test.go apps/edge/internal/transport/integration_test.go`를 실행한다.
- [ ] `gofmt -l apps/edge/internal/node/registry.go apps/edge/internal/node/registry_test.go apps/edge/internal/transport/server.go apps/edge/internal/transport/integration_test.go packages/go/events/events.go`가 빈 출력인지 확인한다.
- [ ] `go test -count=1 ./apps/edge/internal/transport ./apps/edge/internal/node ./apps/edge/internal/service ./packages/go/events`를 실행한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 변경 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_API-1] gofmt Cleanup

문제: `gofmt -l`가 [registry_test.go](/config/workspace/iop2oto/apps/edge/internal/node/registry_test.go:132)와 [integration_test.go](/config/workspace/iop2oto/apps/edge/internal/transport/integration_test.go:359)를 반환한다.

해결 방법: touched Go files 중 formatter가 지적한 두 파일에 `gofmt -w`를 적용한다.

수정 파일 및 체크리스트:

- [ ] `apps/edge/internal/node/registry_test.go` gofmt 적용.
- [ ] `apps/edge/internal/transport/integration_test.go` gofmt 적용.

테스트 작성: 없음. formatting-only 후속이다.

중간 검증:

```bash
gofmt -l apps/edge/internal/node/registry.go apps/edge/internal/node/registry_test.go apps/edge/internal/transport/server.go apps/edge/internal/transport/integration_test.go packages/go/events/events.go
go test -count=1 ./apps/edge/internal/transport ./apps/edge/internal/node ./apps/edge/internal/service ./packages/go/events
```

예상 결과: `gofmt -l`은 빈 출력, `go test`는 exit code 0.
