# Complete - m-edge-local-dev-config-runtime/02+01_node_register_bootstrap

## 완료 일시

2026-05-28

## 요약

Edge node register/bootstrap CLI 작업을 3회 리뷰 루프 끝에 PASS로 종결했다.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | FAIL | register가 invalid duplicate/adapter mutation을 write 전에 막지 못해 후속 보완 필요 |
| `plan_cloud_G07_1.log` | `code_review_cloud_G07_1.log` | FAIL | non-node config defaults가 register 후 empty/zero 값으로 고정되는 회귀 발견 |
| `plan_cloud_G07_2.log` | `code_review_cloud_G07_2.log` | PASS | YAML node patch로 non-node defaults를 보존하고 기존 duplicate/Ollama 방어도 유지됨 |

## 구현/정리 내용

- `iop-edge config check`가 runtime node seed 검증과 adapter/runtime semantic 검증을 함께 수행하도록 확장했다.
- `iop-edge node register <node-id>`를 추가해 `nodes[]` record를 create/update하고 one-line bootstrap command를 출력하도록 했다.
- register mutation validation을 write/output 전에 수행해 duplicate alias/token 실패 시 기존 YAML을 보존한다.
- 기존 CLI node의 Ollama 전환이 valid config를 만들도록 fallback base URL을 적용했다.
- raw YAML patch 전략으로 `nodes[]`와 명시적 `bootstrap.artifact_base_url`만 갱신하고 unrelated defaulted config semantics를 보존했다.

## 최종 검증

- `gofmt -d apps/edge/cmd/edge/main.go apps/edge/cmd/edge/main_test.go` - PASS; 출력 없음
- `go test -count=1 ./apps/edge/cmd/edge -run 'TestNodeRegisterPreservesDefaultedNonNodeConfig|TestNodeRegisterRejects.*Duplicate|TestNodeRegister.*Ollama'` - PASS; `ok iop/apps/edge/cmd/edge`
- `go test -count=1 ./apps/edge/cmd/edge` - PASS; `ok iop/apps/edge/cmd/edge`
- `go test -count=1 ./apps/edge/cmd/edge ./apps/edge/internal/node ./packages/config` - PASS; all three packages passed
- `tmp="$(mktemp -d)" && go build -o "$tmp/iop-edge" ./apps/edge/cmd/edge && (cd "$tmp" && ./iop-edge config init --force && ./iop-edge node register node-silicon-ollama --adapter ollama --ollama-base-url http://127.0.0.1:11434 --target darwin-arm64 --artifact-base-url http://toki-labs.com:18080 && ./iop-edge config check)` - PASS; bootstrap command printed and `OK edge.yaml`
- Manual CLI regression checks - PASS; defaulted OpenAI config survived register, duplicate alias failure left file hash unchanged, and CLI -> Ollama update passed `config check`

## 잔여 Nit

- 없음

## 후속 작업

- 없음
