# Changelog — mgf-vm-sdk

All notable changes land here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
and [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.1.10] - 2026-07-14

### Changed
- **Released what was stranded on `main`.** `main` had moved past `v0.1.9` while still
  declaring `0.1.9`, so the *published* `0.1.9` was different code under the same version
  number. Two things consumers never received:
  - the **Apache-2.0 relicence** (landed on main 2026-07-12; every published wheel still
    carried `License: MIT`, with no `NOTICE` — a relicence is not real until it is released);
  - the **widened `mgf-common` pin** (`<1.0`, was `<0.50`). The stale published cap
    backtracked the whole federation's co-install to `mgf-common` 0.49.2.

  `REL-13` could not see this: it compares declared version to *registry* version, and both
  said `0.1.9`. The drift was main-vs-tag content. `mgf/tools/verify_release_currency.py`
  now catches the class — *a fix that isn't released isn't shipped.*

## [0.1.9] - 2026-06-26

### Changed
- Release the **mgf-common 0.49** pin (`<0.50`) onto devpi so the full
  fleet co-installs at the 0.49 cornerstone (devpi backfill; no API change).

## [Unreleased]

## [0.1.7] — 2026-06-06 — federation cohort: mgf-common 0.46 walk

Walk the `mgf-common` pin ceiling `<0.46 → <0.47` to accept the
library-API-neutral `mgf-common 0.46.0` (CLI-only release: new
`federation`/`design` commands + a `doctor --standards` gate; no library
surface change).

---

## [0.1.6] — 2026-06-05 — rename_vm verb (D-G26)

### Added
- **`client.rename_vm(vm_id, new_name)`** (sync + async) — routes to the new
  REQUIRED `HypervisorBackend.rename` (core 0.1.8) via `RenamePayload` +
  `VM_RENAME`. The `vm_id` is stable across the rename; the transport re-syncs
  the cached desired-state spec's name so `get_vm` reports it. Propagates
  `DomainStateInvalid` (running) / `DomainAlreadyExists` (taken) /
  `DomainNotFound`. Floor `mgf-vm-core>=0.1.8`. Lets the app's `vm rename` drain
  off `VMProvider`.

## [0.1.5] — 2026-06-05 — autostart + managed_save verbs (D-G25)

### Added
- **`get_autostart` / `set_autostart` / `managed_save`** (sync + async) — routed
  to the new OPTIONAL `DomainPolicyBackend` (core 0.1.6) via a `GetAutostart`
  read + `VM_SET_AUTOSTART` / `VM_MANAGED_SAVE` ops (core 0.1.7). `InProcessTransport`
  + `AsyncInProcessTransport` `from_adapters` gain a `policy=` injection slot;
  with no policy backend the calls raise a typed `TransportError`. Floor
  `mgf-vm-core>=0.1.7`.

## [0.1.4] — 2026-06-05 — snapshot state pass-through (D-G21)

### Changed
- `list_snapshots` now propagates `_SnapshotInfoContract.state` (the captured VM
  run-state) unchanged. Requires mgf-vm-core >= 0.1.5. No client surface change.

## [0.1.3] — 2026-06-04 — storage-read enrichment (D-G20)

### Added
- `VmManagerClient.refresh_pool(name) -> PoolInfo` (sync + async) — a read-path
  verb backed by the new `RefreshPool` query, dispatched to
  `StorageBackend.refresh_pool`. Requires mgf-vm-core >= 0.1.4.

## [0.1.2] — 2026-06-04 — federation cohort: mgf-common 0.45 walk

PATCH: pin widened to `mgf-common…,<0.46` to accept mgf-common 0.45 (Codeberg cutover — PKG-01..12). `mgf-*` resolve from the `codeberg-mgf` index (PKG-06). No API change.

## [0.1.1] - 2026-06-04

### Added
- **Guest-agent client surface (D-G19, Wave R6).** Sync + async
  `guest_ping` / `guest_os_info` / `guest_interfaces` on `VmManagerClient` /
  `AsyncVmManagerClient`, over an OPTIONAL injectable `guest_agent=` backend in
  `InProcessTransport` / `AsyncInProcessTransport.from_adapters` — mirroring the
  `MetricsBackend` (D-G13) CQRS path. New read queries `GuestPing` /
  `GetGuestOsInfo` / `GetGuestInterfaces`; a transport with no guest-agent
  backend raises a typed `TransportError` (never a silent empty), and the
  backend's `DomainNotFound` / `GuestUnreachableError` propagate unchanged.

### Changed
- Bumped the `mgf-vm-core` floor to `>=0.1.2` — the guest surface depends on the
  `GuestAgentBackend` Protocol + `GuestNic` / `GuestOsInfo` value types (D-G19).

## [0.1.0] - 2026-06-03

First Codeberg release. External `mgf-*` dependencies now resolve from the
Magogi Foundation Codeberg PyPI registry (PKG-01/PKG-06).

### Added
- Initial repo skeleton (2026-05-24): `pyproject.toml` + four-gate
  scaffolding (ruff / mypy / pytest / import-linter), MIT license,
  src/mgf/vm/core/ namespace skeleton with smoke test, README
  pointing to `vm-vmanager-docs` as the single source of truth.
- Federation scaffolding: `USERS.md`, `STANDARDS_NOTE.md`,
  `docs/inprogress/MGF_STANDARDS_CONFORMANCE.md`.
- `docs/claude/CLAUDE.md` via `mgf-common init-project --kind library`.

### Pending (Phase 0 — see `vm-vmanager-docs/ROADMAP.md`)
- `domain.py` — `VmSpec`, `VmStatus`, `VmState`, `IsolationLevel`, ID types.
- `state_machine.py` — `VmLifecycleStateMachine`.
- `contracts.py` — the four Protocols per `vm-vmanager-docs/component-specs/contracts.md`.
- `exceptions.py` — `VmManagerError` hierarchy.
- `fakes/` — `FakeHypervisorBackend`, `FakeStorageBackend`, `FakeDeviceBackend`.
- `conformance/` — the cross-adapter conformance suite (CONF-H-*, CONF-S-*, CONF-D-*, CONF-X-*).
