<!-- task=m-oto-specific-iop-removal/01_config_cli_cleanup plan=1 tag=REVIEW_REFACTOR -->

# Plan - REVIEW_REFACTOR Config/CLI Cleanup Follow-up

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

이 plan은 `code_review_local_G06_0.log`의 Required 이슈만 처리한다. 구현 후 `CODE_REVIEW-local-G07.md`의 구현 에이전트 소유 섹션을 채우는 것이 필수다. 사용자 결정, 사용자 소유 외부 환경, 범위 충돌 없이는 사용자에게 직접 묻지 말고, 막히면 review stub의 `사용자 리뷰 요청` 섹션에 근거를 남긴다. `USER_REVIEW.md`, `complete.log`, archive 이동은 code-review 전용이다.

## Roadmap Targets

- Milestone: `agent-roadmap/phase/automation-runtime-bridge/milestones/oto-specific-iop-removal.md`
- Task ids:
  - `inventory`: 활성 파일 기준으로 OTO 전용 잔여 지점을 목록화하고 archive 스냅샷과 무관한 제거 대상을 확정한다.
  - `config-cleanup`: `packages/go/config`, `configs/edge.yaml`, Edge command에서 OTO 전용 agent kind와 bootstrap/release config를 제거한다.
- Completion mode: check-on-pass

## 배경

첫 리뷰에서 focused Go tests와 `go test ./...`는 통과했지만, config package에 `AgentKindOTOAgent` exported contract가 남아 있고, 삭제된 OTO CLI flag의 dead global, adapterless validation test 공백, gofmt 불일치가 확인되었다. 이 상태로 PASS하면 `config-cleanup` Roadmap Target을 실제보다 일찍 완료 처리할 수 있으므로 후속 루프에서 잔여 계약을 정리한다.

## 범위 결정 근거

- 포함: `packages/go/config`, `apps/edge/cmd/edge`, 그리고 `AgentKindOTOAgent` 제거 때문에 컴파일상 필요한 `apps/edge/internal/{node,service,transport}` Go 참조의 최소 정리.
- 제외: Control Plane/Client fixture, README/docs/roadmap 문구, final full-search 정리. 해당 범위는 기존 `02+01_runtime_fixture_cleanup`과 `03+01,02_docs_verification` split 작업이 다룬다.
- 이 follow-up은 사용자 결정을 요구하지 않는다. 필요한 작업은 repo-local code/test 수정과 deterministic verification이다.

## 구현 체크리스트

- [ ] `packages/go/config`에서 `AgentKindOTOAgent` exported constant를 제거하고 남은 compile-time 참조를 generic node 계약으로 전환한다.
- [ ] `apps/edge/cmd/edge`에서 `regAllowInsecureBootstrapURL` dead global과 삭제된 OTO bootstrap flag 잔여를 제거한다.
- [ ] `apps/edge/cmd/edge` test에서 generic node가 adapterless일 때 `config check`가 실패하는 assertion을 추가하거나 기존 test 입력을 고친다.
- [ ] 변경된 Go 파일을 `gofmt`로 정리하고 `gofmt -l` 결과가 비어 있음을 확인한다.
- [ ] CODE_REVIEW-local-G07.md의 구현 에이전트 소유 섹션을 실제 구현 내용과 검증 출력으로 채운다. 이 항목이 완료되기 전에는 구현이 완료된 것이 아니다.

### [REVIEW_REFACTOR-1] Remove Config Agent Kind Residue

#### 문제

`packages/go/config/config.go:13`에 `AgentKindOTOAgent` exported constant가 남아 있어 config package가 여전히 OTO 전용 agent kind를 계약으로 노출한다. 01 subtask가 `config-cleanup` Roadmap Target을 완료하려면 config contract에서 이 상수를 제거해야 한다.

#### 해결 방법

`AgentKindOTOAgent`를 삭제한다. 그 결과 compile-time 참조가 깨지는 `apps/edge/internal/node`, `apps/edge/internal/service`, `apps/edge/internal/transport`의 Go 코드와 테스트는 generic node lifecycle/capability 기준으로 최소 변경한다. Control Plane/Client string fixture 정리는 이 follow-up에서 다루지 않는다.

#### 중간 검증

```bash
go test -count=1 ./packages/go/config ./apps/edge/internal/node ./apps/edge/internal/service ./apps/edge/internal/transport
```

### [REVIEW_REFACTOR-2] Remove Deleted CLI Flag Global

#### 문제

`apps/edge/cmd/edge/main.go:834`에 삭제된 `agent register --allow-insecure-bootstrap-url` 전용 `regAllowInsecureBootstrapURL` global이 남아 있다.

#### 해결 방법

`regAllowInsecureBootstrapURL`을 제거한다. `regOTOBootstrapScriptURL`, `regOTOReleaseBaseURL`, OTO bootstrap flag 관련 잔여도 같은 검색에서 발견되면 함께 제거한다.

#### 중간 검증

```bash
rg --sort path -n "regAllowInsecureBootstrapURL|regOTOBootstrapScriptURL|regOTOReleaseBaseURL|allow-insecure-bootstrap-url|bootstrap-script-url|release-base-url" apps/edge/cmd/edge
```

기대 결과: 제거 대상 없음.

### [REVIEW_REFACTOR-3] Cover Adapterless Generic Node Rejection

#### 문제

`apps/edge/cmd/edge/main_test.go:652`의 `TestConfigCheckRejectsAdapterlessNode`는 `oto-agent` invalid kind만 검증하므로, adapterless exception 제거로 생긴 핵심 동작인 generic node의 adapterless rejection을 커버하지 못한다.

#### 해결 방법

해당 test 입력을 `agent_kind: "generic-node"` 또는 agent kind 생략으로 바꾸고, adapters block 없이 `config check`가 `"at least one adapter must be enabled"` 오류를 내는지 검증한다. `oto-agent` invalid-kind 검증은 `packages/go/config` test가 맡는다.

#### 중간 검증

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

### [REVIEW_REFACTOR-4] Restore Go Formatting

#### 문제

리뷰에서 `gofmt -l packages/go/config/config.go packages/go/config/config_test.go apps/edge/cmd/edge/main.go apps/edge/cmd/edge/main_test.go`가 `packages/go/config/config.go`와 `apps/edge/cmd/edge/main.go`를 출력했다.

#### 해결 방법

변경된 Go 파일에 `gofmt`를 적용한다.

#### 중간 검증

```bash
gofmt -l packages/go/config/config.go packages/go/config/config_test.go apps/edge/cmd/edge/main.go apps/edge/cmd/edge/main_test.go
```

기대 결과: 출력 없음.

## 수정 파일 요약

| 파일 | 항목 |
|---|---|
| `packages/go/config/config.go` | REVIEW_REFACTOR-1, REVIEW_REFACTOR-4 |
| `packages/go/config/config_test.go` | REVIEW_REFACTOR-1, REVIEW_REFACTOR-4 |
| `apps/edge/cmd/edge/main.go` | REVIEW_REFACTOR-2, REVIEW_REFACTOR-4 |
| `apps/edge/cmd/edge/main_test.go` | REVIEW_REFACTOR-3, REVIEW_REFACTOR-4 |
| `apps/edge/internal/node/**` | REVIEW_REFACTOR-1 if needed for compile-time references |
| `apps/edge/internal/service/**` | REVIEW_REFACTOR-1 if needed for compile-time references |
| `apps/edge/internal/transport/**` | REVIEW_REFACTOR-1 if needed for compile-time references |

## 최종 검증

```bash
gofmt -l packages/go/config/config.go packages/go/config/config_test.go apps/edge/cmd/edge/main.go apps/edge/cmd/edge/main_test.go
go test -count=1 ./packages/go/config ./apps/edge/cmd/edge ./apps/edge/internal/node ./apps/edge/internal/service ./apps/edge/internal/transport
go test ./...
rg --sort path -n "AgentKindOTOAgent|OTOBootstrap|OTORelease|oto_bootstrap|oto_release|regAllowInsecureBootstrapURL|regOTOBootstrapScriptURL|regOTOReleaseBaseURL|test-oto-registration-online-smoke|OTO_REPO" packages/go/config configs/edge.yaml apps/edge/cmd/edge Makefile apps/edge/internal/node apps/edge/internal/service apps/edge/internal/transport
```

기대 결과: formatting check 출력 없음, Go tests 통과, `rg`는 제거 대상 없음. 모든 코드 변경 완료 후 반드시 `CODE_REVIEW-local-G07.md`의 구현 에이전트 소유 섹션을 채운다.
