Record the passing KVM integration run; CHANGELOG for validation, UEFI and tracing

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
2026-09-10 19:13:51 +00:00
co-authored by Claude Fable 5.1
parent c4f59bd153
commit cc0606d24f
3 changed files with 56 additions and 2 deletions
@@ -532,3 +532,28 @@ the docs now name the bug rather than blaming the host, and note that
bookworm images are unaffected. `latest` on cloud.debian.org was the
2026-08-31 build when this was hit, so every trixie point release to
date carries it.
### Run 6: pass
With UEFI the full lifecycle passed in 23 s on a warm cache: Create 2 s
(domain start 0.9 s), guest agent answering with `192.168.0.89` after
20 s (ARP never did; the host had not talked to the guest), TCP 22
reachable from the dev machine, ListByTag seeing it, Delete leaving only
the base image and marker in the pool, second Delete a no-op. Trace
excerpt worth keeping for the record:
```
09:44:28.603 libvirt virDomainDefineXML xmlBytes=1509 domain=proxy-hk5oavoqk45n3twq duration=13.51ms
09:44:28.603 kvm domain defined uid=9bbceb41-… firmware=uefi
09:44:29.542 libvirt virDomainCreate domain=proxy-hk5oavoqk45n3twq duration=938.705ms
09:44:49.573 libvirt virDomainInterfaceAddresses domain=proxy-hk5oavoqk45n3twq source=DomainInterfaceAddressesSrcAgent interfaces=2 duration=1.742ms
09:44:49.573 kvm KVM domain fetched state=Running ip=192.168.0.89 uid=9bbceb41-…
```
Worth noting: the sweep listed a second managed domain,
`proxy-qxge3dbm2mnpc3ih`, shut off, left behind by an earlier failed
run whose cleanup never ran. That is exactly the orphan GC exists for;
on the host it needs `virsh undefine --nvram` plus its two volumes by
hand. The `ListByTag` sweep costs one `virDomainGetMetadata` per
domain on the host (21 here, ~0.4 ms each over the tunnel), which is
fine at this scale but is the call to watch on a busy hypervisor.
@@ -9,7 +9,7 @@ Plan: [2026-09-10-0805-kvm-libvirt-tracing.md](../plans/2026-09-10-0805-kvm-libv
- [x] Step 4 — Call sites
- [x] Step 5 — Integration test output
- [x] Step 6 — Unit tests
- [ ] Step 7 — Docs, execution log, CHANGELOG (docs and this log done; CHANGELOG waits for the live run)
- [x] Step 7 — Docs, execution log, CHANGELOG
## Steps 1–6 — Tracer, pool logging, tests, integration wiring
@@ -98,3 +98,12 @@ trace.go:55: 09:04:33.165 libvirt virDomainCreate domain=proxy-abc123def456ghij
Worth noting: `length=0` on `virStorageVolUpload` is what the provider
passes (libvirt reads to EOF); the following `seed volume uploaded`
line has the byte count.
## Step 7 — Live run confirmed; CHANGELOG
The compact trace was accepted on the first passing live run
(2026-09-10, beelink): one line per RPC with the libvirt function name,
the provider's own lines between them, `Provisioning` polls readable at
a glance (`SrcArp interfaces=0`, `SrcAgent … ErrAgentUnresponsive`
until the agent came up at +20 s), and a full `ListByTag` sweep over 21
domains in 15 ms. CHANGELOG entry added under the KVM validation entry.