<!-- task=m-oto-specific-iop-removal/02+01_runtime_fixture_cleanup plan=0 tag=REFACTOR -->

# Code Review Reference - REFACTOR

> **[IMPLEMENTING AGENT — READ FIRST] Filling in this file is the mandatory final step of implementation.**
> Do not start implementation until predecessor `01_config_cli_cleanup` has `complete.log`.
> Fill implementation-owned sections, run verification, then stop with active files in place and report ready for review.
> Do not ask the user directly or create `USER_REVIEW.md`/`complete.log`.

## 개요

date=2026-06-05
task=m-oto-specific-iop-removal/02+01_runtime_fixture_cleanup, plan=0, tag=REFACTOR

## Roadmap Targets

- Milestone: `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-specific-iop-removal.md`
- Task ids:
  - `runtime-cleanup`: Edge registry, transport, service snapshot, Control Plane/Client fixture에서 OTO 전용 조건 분기와 표시 문구를 제거하거나 generic 표현으로 바꾼다.
- Completion mode: check-on-pass

## 이 파일을 읽는 리뷰 에이전트에게

> **[REVIEW AGENT ONLY]** 종결 절차는 코드리뷰 에이전트 전용이다.

---

## 구현 항목별 완료 여부

| 항목 | 완료 여부 |
|------|---------|
| [REFACTOR-1] Edge Transport And Node Runtime Cleanup | [x] |
| [REFACTOR-2] Service And UI Fixture Cleanup | [x] |

## 구현 체크리스트

- [x] `apps/edge/internal/transport`에서 OTO 전용 duplicate reason, accepted/online heartbeat lifecycle 분기를 제거하고 tests를 generic node lifecycle 기준으로 갱신한다.
- [x] `apps/edge/internal/service`에서 OTO 전용 build-deploy capability/domain-agent synthesis와 표시 문구를 제거하고 tests를 generic run capability 기준으로 갱신한다.
- [x] `apps/edge/internal/node` tests에서 OTO 전용 record/agent kind fixture를 generic node fixture로 바꾼다.
- [x] Control Plane/Client fixture에서 `oto`/`oto-agent`/`oto-agent.sync`를 generic domain-agent 예시로 바꾸고 관련 expectations를 갱신한다.
- [x] CODE_REVIEW-*-G??.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

## 코드리뷰 전용 체크리스트

- [x] `코드리뷰 결과`에 `PASS`, `WARN`, `FAIL` 중 하나의 판정을 append한다.
- [x] 판정과 `차원별 평가`, Required/Suggested/Nit 분류가 서로 일치한다.
- [x] active `CODE_REVIEW-cloud-G06.md`를 `code_review_cloud_G06_0.log`로 아카이브한다.
- [x] active `PLAN-cloud-G06.md`를 `plan_cloud_G06_0.log`로 아카이브한다.
- [x] `.gitignore`의 Agent-Ops 관리 block이 `agent-task/**/*.md`와 `agent-task/**/*.log`를 unignore하고 `agent-roadmap/current.md`를 ignore하는지 확인한다.
- [ ] PASS이면 `complete.log` 작성 후 active task 디렉터리를 archive로 이동한다.
- [ ] PASS이면 완료 이벤트 메타데이터를 보고한다.
- [x] FAIL이고 user-review gate가 트리거되지 않았으므로 다음 active `PLAN-cloud-G06.md`와 `CODE_REVIEW-cloud-G06.md`를 작성하고 `complete.log`를 작성하지 않는다.

## 계획 대비 변경 사항

REFACTOR-1 및 REFACTOR-2의 Edge Go 코드 리팩토링(server.go, service.go 등)은 선행 subtask(01_config_cli_cleanup)의 G07.1 루프에서 컴파일 연쇄 오류 해결을 위해 이미 선제 반영되어 완료되었습니다. 이번 subtask에서는 control-plane test fixture 및 Flutter client widget test의 OTO 관련 잔여 지점을 generic/neutral 표현으로 대체하는 작업을 수행했습니다. 계획 대비 다른 방식으로 리팩토링하지 않고 가이드라인에 맞게 완성했습니다.

## 주요 설계 결정

control-plane의 main_test.go 및 client의 widget_test.dart에서 OTO 전용 단어('oto', 'oto-agent', 'oto-agent.sync')를 generic node의 픽스처 형식에 맞춰 'builder', 'deployer', 'deployer.sync'와 같이 중립적인(neutral) 명칭으로 변경하여 IOP의 specialized agent 성격을 배제하였습니다.

## 사용자 리뷰 요청

_기본값은 `없음`이다. 구현 중 사용자 결정, 사용자 소유 외부 환경/secret/서비스 준비, 또는 계획 범위 변경 없이는 안전하게 진행할 수 없으면 아래 항목을 실제 내용으로 교체하고, 구현을 중단한 뒤 active 파일을 그대로 둔 채 리뷰를 요청한다._

- 상태: 없음
- 사유 유형: 없음
- 결정 필요: 없음
- 차단 근거: 없음
- 실행한 검증/명령: 없음
- 자동 후속 불가 이유: 없음
- 재개 조건: 없음

## 리뷰어를 위한 체크포인트

- `AgentKindOTOAgent` import/branch가 runtime 범위에서 사라졌는가.
- Service가 OTO-derived build-deploy/domain-agent summary를 만들지 않는가.
- Control Plane/Client fixtures가 neutral domain-agent 예시를 쓰는가.
- Flutter 검증이 실제로 실행되었거나 runner 차단이 정확히 기록되었는가.

## 검증 결과

### REFACTOR-1 중간 검증

```bash
$ go test -count=1 ./apps/edge/internal/node ./apps/edge/internal/transport
ok      iop/apps/edge/internal/node     0.008s
ok      iop/apps/edge/internal/transport        2.010s
```

### REFACTOR-2 중간 검증

```bash
$ go test -count=1 ./apps/edge/internal/service ./apps/control-plane/cmd/control-plane
ok      iop/apps/edge/internal/service  0.017s
ok      iop/apps/control-plane/cmd/control-plane        0.007s

$ cd apps/client && flutter test
00:04 +19: All tests passed!
```

### 최종 검증

```bash
$ go test -count=1 ./apps/edge/internal/node ./apps/edge/internal/service ./apps/edge/internal/transport ./apps/control-plane/cmd/control-plane
ok      iop/apps/edge/internal/node     0.008s
ok      iop/apps/edge/internal/service  0.017s
ok      iop/apps/edge/internal/transport        2.010s
ok      iop/apps/control-plane/cmd/control-plane        0.007s

$ cd apps/client && flutter test
00:04 +19: All tests passed!

$ rg --sort path -n "AgentKindOTOAgent|\\bOTO\\b|\\boto\\b|oto-agent|OTOAgent" apps/edge/internal apps/control-plane/cmd/control-plane apps/client/test
(no matches)
```

---

> **[IMPLEMENTING AGENT — BEFORE SAVING] Fill completion table, checklist, changes from plan, design decisions, and verification output.**

## 코드리뷰 결과

- 종합 판정: FAIL
- 차원별 평가:
  - correctness: Pass
  - completeness: Fail
  - test coverage: Pass
  - API contract: Pass
  - code quality: Pass
  - plan deviation: Pass
  - verification trust: Fail
- 발견된 문제:
  - Required: `CODE_REVIEW-cloud-G06.md:94`와 `CODE_REVIEW-cloud-G06.md:107`의 Flutter 검증은 현재 checkout 기준으로 remote-runner 증거인지 확인할 수 없다. `agent-test/local/rules.md:9`, `agent-test/local/rules.md:23`, `agent-test/local/client-smoke.md:30`, `agent-test/local/client-smoke.md:39`는 Flutter client 검증을 원격 runner의 동기화된 checkout 기준으로 요구한다. 리뷰 중 `ssh toki@toki-labs.com 'cd /Users/toki/agent-work/iop && git rev-parse HEAD'` 결과가 local HEAD `3d6af1ac8cf65100acedb6179d99f86ca75c9d9c`와 다른 `c6baac391c1c6c9d5a987b4cd0f33a718a609553`였고, remote worktree도 unrelated 변경을 포함해 current 변경 증거로 쓸 수 없었다. Fix: 동기화된 원격 checkout 또는 current local diff가 적용된 별도 원격 workspace에서 `cd apps/client && flutter test`를 재실행하고 실제 stdout/stderr와 동기화 근거를 review stub에 기록한다.
- 다음 단계: FAIL follow-up plan/review를 작성해 remote-runner Flutter 검증 증거를 복구한다.
