# Milestone: Personal Local Edge 패키징과 배포 모드 프로파일

## 위치

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

## 목표

로컬용과 서버용 코어를 분기하지 않고, 같은 Edge runtime을 personal/local, server/team, fleet 배포 모드로 운용하는 방향을 스케치한다.
개인 로컬 사용자는 Node 직접 세팅이 아니라 provider를 꽂으면 localhost OpenAI-compatible endpoint가 생기는 UX를 기준으로 두고, 서버/팀 배포는 Docker, Control Plane, remote Node, fleet 운영 기능을 같은 코어의 확장 모드로 둔다.
이 Milestone은 즉시 구현이 아니라 후속 패키징, 설치, 업데이트, 기능 gate 구현을 위한 제품/운영 경계 정리를 목적으로 한다.

## 상태

[스케치]

## 승격 조건

- [ ] personal/local, server/team, fleet 배포 모드의 이름과 책임 범위를 결정한다.
- [ ] 같은 코어를 유지하면서 사용자 관리, Control Plane enrollment, remote Node, audit/fleet 기능을 capability gate 또는 config profile로 끄고 켜는 기준을 결정한다.
- [ ] 개인 로컬 모드에서 Node를 embedded backend, local child process, 또는 숨겨진 loopback Node 중 어떤 방식으로 시작할지 결정한다.
- [ ] macOS, Windows, Linux native package와 Docker/server package의 기본 배포 경로와 지원 우선순위를 결정한다.
- [ ] 로컬 모드의 보안 기준을 localhost bind, local API token, OS keychain 또는 env secret 중 어디까지 요구할지 결정한다.
- [ ] personal mode에서 provider catalog, route policy, usage ledger, local secrets가 어디에 저장되고 Control Plane과 어떻게 분리되는지 정리한다.
- [ ] server/team mode로 확장할 때 기존 personal Edge 상태를 어떻게 이전하거나 enrollment할지 결정한다.
- [ ] 후속 구현 Milestone과 SDD 필요 범위를 나눈다.

## 구현 잠금

- 상태: 잠금
- SDD: 불필요
- SDD 문서: 없음
- SDD 사유: 현재 Milestone은 personal/server 배포 토폴로지와 패키징 방향성 스케치이며, installer/config/update/security 계약 구현으로 승격할 때 SDD 필요 여부를 재판정한다.
- 잠금 해제 조건: 아래 체크리스트
  - [ ] 승격 조건의 미정 항목이 사용자 검토로 해소되어 있다.
  - [ ] 구현 가능한 목표, 범위, 기능 Task, 후속 구현 Milestone 후보가 분리되어 있다.
- 결정 필요: 아래 체크리스트
  - [ ] 초기 제품 표면을 `iop-edge` 단일 바이너리로 유지할지, 별도 `iop-agent` 또는 tray/app wrapper를 둘지 결정한다.
  - [ ] personal/local 모드의 기본 backend를 embedded, local child Node, remote Node disabled 중 어떤 조합으로 시작할지 결정한다.
  - [ ] personal/local 모드에서 multi-user 관리, 조직 RBAC, fleet audit를 완전히 끌지, minimal local identity/audit만 남길지 결정한다.
  - [ ] macOS/Windows 개인 배포에서 Docker를 보조 경로로만 둘지, 특정 provider runtime에는 Docker 옵션을 허용할지 결정한다.
  - [ ] provider credential 저장을 OS keychain, local encrypted file, env reference 중 어떤 기본값으로 둘지 결정한다.
  - [ ] personal Edge가 Control Plane에 optional enrollment될 때 로컬 상태와 provider key를 어디까지 공유하거나 공유하지 않을지 결정한다.

## 범위

- 동일 코어 기반 personal/local, server/team, fleet 배포 모드 후보
- 배포 모드별 feature gate: Control Plane, 사용자 관리, remote Node, fleet audit, provider pool, OpenAI-compatible API
- 개인 로컬 Edge UX: provider plug-in, localhost endpoint, local route policy, local secrets, Node 세부 노출 축소
- 서버/팀 Edge UX: Docker 또는 Linux service 배포, Control Plane enrollment, remote Node registry, fleet 운영 기능
- macOS, Windows, Linux native package와 Docker image/package의 역할 구분
- personal mode에서 server/team mode로 확장하는 enrollment 또는 migration 후보

## 기능

### Epic: [deploy-mode] Unified Deployment Modes

코어 분기 없이 배포 모드와 capability gate로 개인 로컬 제품과 서버/팀 운영 제품을 함께 수용하는 방향을 정리한다.

- [ ] [mode-taxonomy] personal/local, server/team, fleet 모드의 책임과 기본 feature set 후보가 정리되어 있다.
- [ ] [core-boundary] provider catalog, routing policy, adapter + target 실행 계약, usage ledger, OpenAI-compatible surface를 공통 코어로 유지하고 로컬/서버용 fork를 만들지 않는 경계가 정리되어 있다.
- [ ] [feature-gates] 사용자 관리, Control Plane enrollment, remote Node, fleet audit, provider pool, OpenAI-compatible API를 capability gate 또는 config profile로 끄고 켜는 기준이 정리되어 있다.
- [ ] [personal-ux] 개인 로컬 사용자가 Node를 직접 의식하지 않고 provider만 연결해 localhost endpoint를 쓰는 UX 기준이 정리되어 있다.
- [ ] [node-topology] personal mode에서 embedded backend, local child Node, loopback Node, remote Node disabled의 장단점과 초기 선택 후보가 정리되어 있다.
- [ ] [package-targets] macOS/Windows native package, Linux service, Docker/server package의 기본 배포 경로와 지원 우선순위가 정리되어 있다.
- [ ] [local-security] localhost bind, local API token, credential storage, log/usage ledger 보존 범위 같은 personal mode 최소 보안 기준이 정리되어 있다.
- [ ] [server-mode] server/team 배포에서 Docker, Control Plane, remote Node registry, multi-user/audit/fleet 기능을 켜는 기준이 정리되어 있다.
- [ ] [migration] personal Edge를 server/team 모드로 enrollment하거나 상태를 이전할 때 공유/비공유할 설정과 secret 경계가 정리되어 있다.
- [ ] [followups] installer, update plane, config schema, local security, UI/tray, provider setup wizard 같은 후속 구현 Milestone 후보가 분리되어 있다.

## 완료 리뷰

- 상태: 없음
- 요청일: 없음
- 완료 근거: 스케치 Milestone이며 기능 Task가 아직 충족되지 않았다.
- 검토 항목:
  - [ ] 사용자가 동일 코어, 배포 모드, personal local UX 방향을 검토했다.
  - [ ] 승격 조건과 결정 필요 항목이 후속 구현 Milestone으로 분리되었다.
  - [ ] archive 이동을 승인했다.
- agent-ui 상태 반영: 해당 없음
- 리뷰 코멘트: 없음

## 범위 제외

- 실제 macOS/Windows installer, tray/app, Docker image 구현
- Edge/Node update runner, host-local manager, rollback 상태 머신 구현
- direct/Plan/Milestone workflow 라우팅 모듈 또는 provider adapter 구현
- 사용자 관리, 조직 RBAC, billing/chargeback, 장기 audit schema 구현
- provider runtime 다운로드, 모델 획득, local model marketplace 구현
- 개인 로컬 모드의 UI onboarding 구현

## 작업 컨텍스트

- 관련 경로: `apps/edge/**`, `apps/node/**`, `packages/go/config/**`, `packages/go/hostsetup/**`, `configs/edge.yaml`, [edge-local-dev-guide.md](../../../../docs/edge-local-dev-guide.md)
- 표준선(선택): 로컬용/서버용 코어를 나누지 않고 deployment mode, capability gate, config profile로 기능 표면을 조정한다.
- 표준선(선택): personal/local mode의 사용자 경험은 Node bootstrap이 아니라 provider plug-in과 localhost OpenAI-compatible endpoint를 기본으로 둔다.
- 표준선(선택): 개인 배포의 기본은 macOS/Windows/Linux native package이며, Docker는 서버/팀 배포와 개발/격리 실행의 우선 경로로 둔다.
- 표준선(선택): local mode에서도 보안을 제거하지 않고 localhost bind, local API token, credential storage, 최소 usage ledger 기준을 둔다.
- 선행 작업: [Update Plane 안정 프로토콜](../../update-plane-self-update-foundation/milestones/update-plane-stable-protocol.md), [Host-local Manager 기반 자체 업데이트](../../update-plane-self-update-foundation/milestones/host-local-manager-self-update.md), [에이전트 작업 루프 오케스트레이션 MVP](../../automation-runtime-bridge/milestones/agent-workflow-loop-orchestration-mvp.md)
- 후속 작업: personal Edge installer 구현, deployment mode config schema, local provider setup wizard, Control Plane optional enrollment
- 확인 필요: `구현 잠금 > 결정 필요` 항목
