<!-- task=m-oto-registration-online-smoke/03+01,02_smoke_evidence plan=1 tag=REVIEW_TEST -->

# OTO Registration Online Smoke Formatter Follow-up

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

이 plan은 1차 리뷰 WARN에서 발견된 Dart formatter cleanup만 수행한다. 기능 변경, smoke 구조 변경, 추가 리팩터링은 범위 밖이다. 구현 후 active `CODE_REVIEW-*-G??.md`의 구현 소유 섹션에 실제 명령과 stdout/stderr를 남기고, code-review가 archive/complete 처리를 맡게 둔다.

## 배경

1차 `cloud-G07` 리뷰에서 OTO registration online smoke의 기능 검증은 통과했다. 다만 `dart format --output=none --set-exit-if-changed ...`가 `test/oto_iop_connection_smoke_test.dart` formatter 차이를 보고해 WARN으로 후속 루프가 필요하다.

## 사용자 리뷰 요청 흐름

사용자-owned 외부 host, credential, private endpoint가 꼭 필요해지면 review stub의 `사용자 리뷰 요청`에 근거를 남긴다. 이 follow-up은 기본적으로 local formatter cleanup이므로, formatter/test 재실행으로 확인 가능한 실패는 사용자 리뷰 요청이 아니라 후속 구현/검증 이슈다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-registration-online-smoke.md`
- Task ids:
  - `heartbeat-online`: 최초 heartbeat 도착 후 online으로 전환된다. 검증: OTO Dart smoke 또는 통합 smoke에서 registration accepted 뒤 heartbeat 도착까지 확인한다.
  - `unlock-evidence`: OTO `oto-agent` 등록 흐름 잠금 해제에 사용할 smoke 결과와 실행 명령이 문서 또는 test log에 남는다.
- Completion mode: check-on-pass

## 범위 결정 근거

- 이전 루프에서 `go test`, `dart analyze`, `make test-oto-registration-online-smoke`는 통과했다.
- WARN 사유는 formatter-clean 하나이므로, 이번 루프는 Dart format 적용과 그에 따른 검증 재확인만 수행한다.
- `Makefile`, Edge lifecycle code, OTO persistent session API, smoke assertion 로직은 변경하지 않는다.

## 구현 체크리스트

- [ ] `../oto/test/oto_iop_connection_smoke_test.dart`를 Dart formatter 기준으로 정리한다.
- [ ] `cd ../oto && dart format --output=none --set-exit-if-changed test/oto_iop_connection_smoke_test.dart lib/oto/agent/edge_registration_client.dart lib/oto/agent/agent_runner.dart test/oto_agent_registration_test.dart`를 실행해 formatter-clean을 확인한다.
- [ ] `cd ../oto && dart analyze`와 `make test-oto-registration-online-smoke`를 실행해 기존 analyzer/smoke evidence가 유지되는지 확인한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_TEST-1] Format OTO Smoke Test

문제: `../oto/test/oto_iop_connection_smoke_test.dart:211`의 긴 삼항 할당이 Dart formatter 기준을 만족하지 않는다. 1차 리뷰에서 아래 명령이 실패했다.

```bash
cd ../oto && dart format --output=none --set-exit-if-changed test/oto_iop_connection_smoke_test.dart lib/oto/agent/edge_registration_client.dart lib/oto/agent/agent_runner.dart test/oto_agent_registration_test.dart
```

출력 요약:

```text
Changed test/oto_iop_connection_smoke_test.dart
Formatted 4 files (1 changed) in 0.13 seconds.
```

해결 방법: `../oto/test/oto_iop_connection_smoke_test.dart`에 `dart format`을 적용한다. formatter가 바꾸는 줄 외의 기능 변경은 하지 않는다.

수정 파일 및 체크리스트:

- [ ] `../oto/test/oto_iop_connection_smoke_test.dart` format 적용.
- [ ] 기능 로직이나 smoke timeout/marker/command는 변경하지 않는다.

중간 검증:

```bash
cd ../oto && dart format --output=none --set-exit-if-changed test/oto_iop_connection_smoke_test.dart lib/oto/agent/edge_registration_client.dart lib/oto/agent/agent_runner.dart test/oto_agent_registration_test.dart
```

예상 결과: exit code 0, `Formatted 4 files (0 changed)`.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `../oto/test/oto_iop_connection_smoke_test.dart` | REVIEW_TEST-1 |

## 최종 검증

```bash
cd ../oto && dart format --output=none --set-exit-if-changed test/oto_iop_connection_smoke_test.dart lib/oto/agent/edge_registration_client.dart lib/oto/agent/agent_runner.dart test/oto_agent_registration_test.dart
cd ../oto && dart analyze
make test-oto-registration-online-smoke
```

예상 결과: 모두 exit code 0. Smoke output은 command, registration accepted, `node.online`/`first_heartbeat` evidence를 유지해야 한다.
