# Changelog — mgf-vm-libvirt

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-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).

## [0.1.9] - 2026-06-16

### Changed
- Widened the `mgf-common` pin to `<0.48` — mgf-common 0.47 is the pure-library release (the end-user CLI moved to `mgf-fed[cli]`); the importable API is unchanged.
- Regenerated `.woodpecker` so the supervisor lane calls `mtest` (the moved `mgf-common test` frontend is gone).

## [Unreleased]

## [0.1.8] — 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.7] — 2026-06-05 — HypervisorBackend.rename (D-G26)

### Added
- **`LibvirtHypervisorBackend.rename(d, new_name)`** — implements the new REQUIRED
  `HypervisorBackend.rename` (core 0.1.8): `virDomainRename` on an inactive domain,
  preserving the UUID. Pre-checks running (`DomainStateInvalid`) + name-taken
  (`DomainAlreadyExists`); `DomainNotFound` if absent; same-name no-op.
  `@translate_at_seam`-guarded. Floor `mgf-vm-core>=0.1.8`.

## [0.1.6] — 2026-06-05 — LibvirtDomainPolicyBackend (D-G25)

### Added
- **`LibvirtDomainPolicyBackend`** — implements the new OPTIONAL
  `DomainPolicyBackend` (core 0.1.6): `get_autostart` (`domain.autostart()`),
  `set_autostart` (`domain.setAutostart`), `managed_save` (`domain.managedSave(0)`).
  Own module over the shared `LibvirtConnection`, `@translate_at_seam`-guarded.
  Lets the app's `vm autostart` / `vm hibernate` drain off `VMProvider`.

## [0.1.5] — 2026-06-05 — forensic-acquisition escape hatch (D-G22)

### Added
- `LibvirtHypervisorBackend.dump_memory(name, dest, *, live)` +
  `screenshot(name, dest)` — engine-specific escape-hatch methods (OFF the
  neutral `HypervisorBackend` Protocol) for forensic live acquisition, wrapping
  `coreDumpWithFormat` / `virDomainScreenshot`.

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

### Added
- `list_snapshots` populates `_SnapshotInfoContract.state` from the domain
  snapshot XML `<state>` (folded onto the neutral `VmState`; unknown → `None`).
  Requires mgf-vm-core >= 0.1.5.

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

### Added
- `LibvirtStorageBackend.refresh_pool(name) -> PoolInfo` — rescans the pool
  (reusing the existing `_refresh_pool`) and returns fresh info.

### Changed
- `_pool_info` now populates `available_bytes` (`pool.info()[3]`) and `active`
  (`pool.isActive()`); `_volume_info` now populates `path` (`vol.path()`) and
  `allocation_bytes` (`vol.info()[2]`). 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.41,<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
- **`LibvirtGuestAgentBackend` — implements `GuestAgentBackend` (D-G19, Wave
  R6).** The libvirt adapter for the in-guest QEMU agent, over the SAME
  `LibvirtConnection` the hypervisor backend holds (injectable, like
  `LibvirtMetricsBackend`/D-G13): `guest_ping` (`qemuAgentCommand` guest-ping),
  `guest_os_info` (`guest-get-osinfo`), `guest_interfaces`
  (`interfaceAddresses(SRC_AGENT)`). An agent-unreachable libvirt error maps to
  the typed `GuestUnreachableError`; domain lookup normalises to
  `DomainNotFound`. Exported from the package.

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

## [0.1.0] - 2026-06-03

First release. Published to the Codeberg PyPI registry; mgf-* dependencies
(mgf-common, mgf-vm-core) now resolve from the Codeberg index (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-*).
