# Milestone: Host-local Manager 기반 자체 업데이트

## 위치

- Roadmap: [ROADMAP.md](../../../ROADMAP.md)
- Phase: [PHASE.md](../PHASE.md)

## 목표

Edge/Node 앱 프로세스가 자기 바이너리를 직접 교체하지 않고, 앱 바깥의 host-local manager 또는 updater helper가 프로세스 종료, release pointer 전환, 재시작, rollback을 담당하는 실행 모델을 정리한다.
Linux, macOS, Windows에서 공통으로 유지할 release directory와 current pointer 전략을 스케치하고, systemd/launchd/Windows Service와의 책임 경계를 잡는다.

## 상태

[스케치]

## 승격 조건

- [ ] 항상 떠 있는 manager 방식과 one-shot updater helper 방식의 MVP/장기 기준을 결정한다.
- [ ] Linux, macOS, Windows별 프로세스 종료와 binary 전환 제약을 정리한다.
- [ ] release directory, current pointer, staged artifact, rollback metadata의 파일 구조를 확정한다.
- [ ] manager가 담당하지 않을 IOP Node/Edge runtime 책임을 명확히 한다.
- [ ] 후속 구현 Milestone과 SDD 필요 범위를 나눈다.

## 구현 잠금

- 상태: 잠금
- SDD: 필요
- SDD 문서: 없음 (작성 전)
- SDD 사유: cross-OS 프로세스 lifecycle, 파일 전환, rollback 상태 머신, service manager 연동에 영향을 준다.
- 잠금 해제 조건:
  - [ ] SDD 잠금이 해제되어 있다
  - [ ] SDD 사용자 리뷰가 없거나 승인/해결되었다
- 결정 필요:
  - [ ] 초기 MVP를 one-shot updater helper로 시작할지, 항상 실행되는 manager로 시작할지 결정한다.

## 범위

- `iop-manager` 또는 `iop-updater` helper의 책임과 비책임 경계
- `releases/<version>/`, `current` pointer, `state/update.json`, rollback metadata 구조 후보
- Linux systemd, macOS launchd, Windows Service에서 manager/updater가 앱 프로세스를 내리고 다시 올리는 방식
- Edge/Node 앱이 update 필요를 판단하고 manager/updater에 전환 요청을 넘기는 로컬 API 또는 command boundary
- artifact 검증, staging, activation, rollback, post-start version 확인 흐름

## 기능

### Epic: [manager] Host-local 업데이트 실행자

Edge/Node 앱과 별개로 프로세스 바꿔치기 구간만 담당하는 작은 host-local 실행자를 정의한다.

- [ ] [responsibility] manager/updater가 담당할 process lifecycle, artifact 검증, release pointer 전환, rollback 책임이 정리되어 있다.
- [ ] [non-node] manager/updater가 Edge에 Node로 등록되지 않고 adapter 실행/routing/registry에 참여하지 않는 경계가 정리되어 있다.
- [ ] [layout] release directory와 current pointer, staged artifact, update state 파일 구조 후보가 정리되어 있다.
- [ ] [os-strategy] Linux, macOS, Windows별 교체/재시작 전략과 제약이 정리되어 있다.
- [ ] [local-boundary] Edge/Node 앱이 manager/updater에 업데이트 적용을 요청하는 로컬 경계 후보가 정리되어 있다.

## 완료 리뷰

- 상태: 없음
- 요청일: 없음
- 완료 근거: 스케치 상태이므로 완료 근거 없음
- 리뷰 필요:
  - [ ] 사용자가 완료 결과를 확인했다
  - [ ] archive 이동을 승인했다
- 리뷰 코멘트: 없음

## 범위 제외

- Edge/Node adapter execution, model serving, CLI runtime 기능 구현
- manager를 Control Plane 또는 Edge에 별도 agent로 등록하는 구조
- OS별 installer/package manager의 완성형 구현

## 작업 컨텍스트

- 관련 경로: `packages/go/hostsetup/**`, `apps/edge/internal/edgecmd/bootstrap.go`, `apps/edge/internal/edgecmd/setup.go`, `apps/node/cmd/node/main.go`
- 표준선(선택): 실행 중 바이너리를 덮어쓰지 않고 새 release를 옆에 풀어 검증한 뒤 current pointer를 전환한다.
- 선행 작업: Update Plane 안정 프로토콜
- 후속 작업: Edge/Node 롤아웃과 복구 정책
- 확인 필요: 초기 배포 UX에서 manager를 bootstrap에 포함할 시점, Windows current pointer 표현 방식
