# Changelog — mgf-cloud-provision

Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); SemVer once it ships its first release.

## [Unreleased]

### 2026-06-18 — Phase 1a skeleton

Initial skeleton of the federation's declarative provisioning library (self-hosted-infra rollout, Phase 1a).

**Added**
- `ServiceSpec` / `ServicePlan` / `ApplyResult` / `Action` — frozen pydantic models for desired state + plan/apply outcomes.
- `plan()` / `apply()` / `destroy()` / `to_server_spec()` — the converge engine over any `mgf.cloud.providers.base.CloudProvider`. `plan` is read-only (CREATE / NOOP / REPLACE); `apply` gates destructive REPLACE behind `allow_replace`.
- `load_spec()` — TOML spec loader (with `cloud_init_file` inlining) → `ServiceSpec`; typed `SpecError` on bad input.
- `devpi_service_spec()` + `examples/devpi.toml` — the first customer, encoding the Phase-0-resolved sizing (`a2-ram4-disk50-perf1` / Ubuntu 24.04 / `ext-net1`).
- `mgf-cloud-provision` CLI — `plan` / `apply` / `destroy`, with `--provider fake` for cloud-free runs.
- `ProvisionError` / `SpecError` extending `mgf.common.exceptions`.
- Full unit coverage against `mgf-cloud`'s in-memory `FakeProvider` (no cloud, no credentials).

**Not yet**
- Live `infomaniak` provider end-to-end + the devpi cloud-init converge (Phase 1b).
- Federation registration (`MGF_LIBRARIES` + roster + `mgf-fed scaffold` for generated CI + policy files + conformance tracker).
