<!-- task=oto_agent_registration/02+01_edge_registration_runtime plan=1 tag=REVIEW_AGENT_REG -->

# Plan - REVIEW_AGENT_REG

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

구현 완료 전 `CODE_REVIEW-cloud-G07.md`의 구현 에이전트 소유 섹션을 반드시 채운다. 검증 명령을 실제로 실행하고 출력 원문을 붙이며, active 파일은 그대로 둔 채 review 준비 상태를 보고한다. `complete.log` 작성, `.log` 아카이브, task 디렉터리 이동은 code-review-skill 전용이다.

## 배경

`AGENT_REG` 구현은 동작 검증과 iop smoke를 통과했지만, 리뷰에서 non-generated Dart 파일 format drift와 production generated WKT analyzer info가 남은 것을 확인했다. 이 follow-up은 동작 로직을 건드리지 않고 `dart format`과 `dart analyze` 신뢰를 복구하는 좁은 보완이다.

## 분석 결과

### 읽은 파일

- `agent-task/oto_agent_registration/02+01_edge_registration_runtime/plan_cloud_G07_0.log`
- `agent-task/oto_agent_registration/02+01_edge_registration_runtime/code_review_cloud_G07_0.log`
- `agent-ops/rules/project/domain/cli/rules.md`
- `agent-ops/rules/project/domain/core/rules.md`
- `agent-ops/rules/project/domain/framework/rules.md`
- `analysis_options.yaml`
- `bin/main.dart`
- `pubspec.yaml`
- `lib/cli/commands/command_agent.dart`
- `lib/oto/agent/agent_config.dart`
- `lib/oto/agent/agent_runner.dart`
- `lib/oto/agent/edge_registration_client.dart`
- `lib/oto/agent/google/protobuf/struct.pb.dart`
- `lib/oto/agent/iop/runtime.pb.dart`
- `test/oto_agent_config_test.dart`
- `test/oto_agent_cli_test.dart`
- `test/oto_agent_registration_test.dart`
- `test/oto_iop_connection_smoke_test.dart`

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

- 동작 변경 없음: formatting과 analyzer exclude/경계 보정만 수행하므로 새 behavior test는 작성하지 않는다.
- 회귀 확인: 기존 agent config/CLI/registration tests와 iop Edge smoke를 그대로 재실행한다.

### 심볼 참조

- renamed/removed symbol: 없음.

### 분할 판단

- split decision policy를 평가했다.
- shared task group: `oto_agent_registration`
- 현재 subtask: `02+01_edge_registration_runtime`
- follow-up 범위가 formatting/analyzer 신뢰 복구 하나로 작고 독립적인 코드 동작 변경이 없어 추가 split은 만들지 않는다.

### 범위 결정 근거

- 포함: non-generated Dart formatting, generated WKT analyzer info를 repo 규칙에 맞게 숨기거나 경계를 정리하는 보완.
- 제외: registration protocol logic, Edge smoke 동작, bootstrap script, iop repo 변경, heartbeat/daemon loop 구현.

### 빌드 등급

- build=`cloud-G07`, review=`cloud-G07`.
- 근거: parent task가 protocol/smoke/CLI runtime 경계이고, final verification에 real iop Edge smoke와 analyzer 신뢰 복구가 포함된다.

## 구현 체크리스트

- [ ] REVIEW_AGENT_REG-1 Dart formatting과 analyzer info를 정리한다.
- [ ] 모든 중간 검증과 최종 검증을 실행하고 실제 stdout/stderr를 `CODE_REVIEW-cloud-G07.md`에 기록한다.
- [ ] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## 의존 관계 및 구현 순서

- 이 subtask directory 이름 `02+01_edge_registration_runtime`의 `+01`이 런타임 의존성이다.
- 선행 `01_agent_cli_config`는 이미 `agent-task/archive/2026/05/oto_agent_registration/01_agent_cli_config/complete.log`를 만들었다.

### [REVIEW_AGENT_REG-1] Dart formatting과 analyzer info 정리

#### 문제

- `dart format --output=none --set-exit-if-changed bin/main.dart lib/cli/commands/command_agent.dart lib/oto/agent/agent_config.dart lib/oto/agent/agent_runner.dart lib/oto/agent/edge_registration_client.dart test/oto_agent_config_test.dart test/oto_agent_cli_test.dart test/oto_agent_registration_test.dart test/oto_iop_connection_smoke_test.dart`가 exit 1로 끝나며 7개 파일을 `Changed`로 보고한다.
- 예시: `lib/oto/agent/edge_registration_client.dart:75`에 formatter가 정리할 whitespace가 남아 있고, `lib/oto/agent/agent_config.dart:57`, `test/oto_iop_connection_smoke_test.dart:72` 등 긴 줄 wrapping이 필요하다.
- `dart analyze`가 `lib/oto/agent/google/protobuf/struct.pb.dart:15`의 `package:protobuf/src/...` import를 `implementation_imports` info로 보고한다.

#### 해결 방법

- non-generated Dart 파일에 `dart format`을 적용한다.
- generated 파일을 직접 hand-edit하지 않고, 가장 좁은 범위로 `analysis_options.yaml`에서 generated WKT 경로를 analyzer 제외한다. iop runtime generated files는 계속 analyzer 대상에 둔다.

Before (`analysis_options.yaml:21-24`):

```yaml
# analyzer:
#   exclude:
#     - path/to/excluded/files/**
```

After:

```yaml
analyzer:
  exclude:
    - lib/oto/agent/google/protobuf/**
```

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

- [ ] `analysis_options.yaml`: `lib/oto/agent/google/protobuf/**`만 analyzer exclude에 추가.
- [ ] `lib/oto/agent/agent_config.dart`: `dart format` 적용.
- [ ] `lib/oto/agent/agent_runner.dart`: `dart format` 적용.
- [ ] `lib/oto/agent/edge_registration_client.dart`: `dart format` 적용.
- [ ] `test/oto_agent_config_test.dart`: `dart format` 적용.
- [ ] `test/oto_agent_cli_test.dart`: `dart format` 적용.
- [ ] `test/oto_agent_registration_test.dart`: `dart format` 적용.
- [ ] `test/oto_iop_connection_smoke_test.dart`: `dart format` 적용.

#### 테스트 작성

- 작성하지 않음: 동작 변경이 없고 formatting/analyzer 경계 보완이다.
- 회귀 검증은 기존 `test/oto_agent_config_test.dart`, `test/oto_agent_cli_test.dart`, `test/oto_agent_registration_test.dart`, `test/oto_iop_connection_smoke_test.dart`로 수행한다.

#### 중간 검증

```bash
dart format --output=none --set-exit-if-changed bin/main.dart lib/cli/commands/command_agent.dart lib/oto/agent/agent_config.dart lib/oto/agent/agent_runner.dart lib/oto/agent/edge_registration_client.dart test/oto_agent_config_test.dart test/oto_agent_cli_test.dart test/oto_agent_registration_test.dart test/oto_iop_connection_smoke_test.dart
dart analyze
```

예상 결과: format check exit 0, `dart analyze`가 `No issues found!`를 출력한다.

## 수정 파일 요약

| 파일 | 항목 |
|------|------|
| `analysis_options.yaml` | REVIEW_AGENT_REG-1 |
| `lib/oto/agent/agent_config.dart` | REVIEW_AGENT_REG-1 |
| `lib/oto/agent/agent_runner.dart` | REVIEW_AGENT_REG-1 |
| `lib/oto/agent/edge_registration_client.dart` | REVIEW_AGENT_REG-1 |
| `test/oto_agent_config_test.dart` | REVIEW_AGENT_REG-1 |
| `test/oto_agent_cli_test.dart` | REVIEW_AGENT_REG-1 |
| `test/oto_agent_registration_test.dart` | REVIEW_AGENT_REG-1 |
| `test/oto_iop_connection_smoke_test.dart` | REVIEW_AGENT_REG-1 |

## 최종 검증

```bash
dart format --output=none --set-exit-if-changed bin/main.dart lib/cli/commands/command_agent.dart lib/oto/agent/agent_config.dart lib/oto/agent/agent_runner.dart lib/oto/agent/edge_registration_client.dart test/oto_agent_config_test.dart test/oto_agent_cli_test.dart test/oto_agent_registration_test.dart test/oto_iop_connection_smoke_test.dart
dart analyze
dart test test/oto_agent_config_test.dart test/oto_agent_cli_test.dart test/oto_agent_registration_test.dart
dart test test/oto_iop_connection_smoke_test.dart
```

예상 결과: format check 통과, analyzer issue 없음, agent unit/CLI tests와 iop registration smoke 통과.

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