# Deployment Kit 구조와 책임

- Kit는 기존 Runtime/Auth/WSS를 import하거나 다시 구현하지 않습니다.
- 영속 자료와 release를 분리합니다. 배포 판단은 JSON 원장·hash·실제 상태로 합니다.
- source of truth는 서버별 site.json, 활성 applied receipt, immutable release입니다.
- 실제 제어/인증 프로토콜은 기존 component가 소유합니다.

```text
deployctl → cli
  ├─ site / storage: 경로·UUID·사용자 확인
  ├─ host: 읽기 진단·명시 fresh-host bootstrap
  ├─ bundle: tracked allowlist·체크섬·안전 압축 해제
  ├─ compose_snapshot: env/overlay → literal 보존된 private snapshot
  ├─ release: journal → apply → health → activation
  ├─ models / model_probe: 격리 변환·후보 검증
  └─ diagnostics: 비밀값 없는 projection
```

## 1. Compose를 그대로 한 번 더 쓰면 안 되는 이유

첫 `compose config`가 만든 `$` 포함 문자열은 다음 `up`에서 다시 해석될 수 있습니다.
Kit는 literal을 escape하고 두 번째 실제 config 결과가 같은지 검사합니다.
named volume/network의 project 이름도 보존합니다. 환경의 우연한 shell 변수로 private env를 덮지 않습니다.
정규화 snapshot에는 비밀번호가 있을 수 있어0600으로 저장하고 지원 archive에 넣지 않습니다.

## 2. 기존 기능 보존

base/private/secure/web-start 순서를 유지합니다. secure 설정값을 새로 정의하지 않습니다.
Event endpoint override, Artifact lan_public/authenticated, SUCCESS=접수, 기존 Event retry는 component 그대로입니다.
container에 app 소스를 bind해서 image-owned 코드를 가리는 배포는 차단합니다.
DB/volume 및 쓰기 가능한 bind 경로를 일반 patch에서 조용히 변경하지 않습니다.

## 3. v1 한계

실행 중 Stop/reap 자동화, 대용량 이동, 영구 mount unit, 자동 이미지 정리, 완전 raw-weight exporter,
부트 이미지·OS 전체 복구, 임의 DB schema migration은 제공하지 않습니다. 현장 계약이 필요한 부분입니다.
새로운 대형 deployment platform/DB/registry는 도입하지 않았습니다.
