# mvirt 0.29.9

migrations: no
wire: unchanged
floor: undeclared
rev: b58544294aedbe6bee3dc7f1ad9b569679bd01c0

mvirt 0.29.9

A planned reboot no longer cuts pod egress, a routed public IPv6 on a vNIC
answers reliably, a dark prefix steers itself back, and a node declares the
control plane it needs.

- node, cplane, ebpf: a planned shutdown hands the host's NAT anchors over
  before its datapath goes — the leader fences the leaving node at once and
  the agent waits (≤20 s) until no network's NAT egress depends on it; before,
  pod egress on every node stopped for ~3 s (member) or ~64 s (leader's host)
  per reboot. Takes effect from the roll AFTER this one (#400).
- cplane: a block whose provider will not follow a move steers back onto the
  set the provider still delivers to after 15 min — zero provider calls,
  interlocked with in-flight switches, never on a genuine re-home (#319).
- net: vNICs with an IPv6 get unsolicited Router Advertisements (burst on
  change, then every 200–600 s), so an address that arrives on a running
  guest is offered without a link bounce and the 1800 s router lifetime is
  refreshed (#418).
- net: egress sourced from a hetzner-failover v6 block leaves through the
  block's anchor (relay over the fabric via a per-node link-local), the v6
  counterpart of the v4 relay (#419).
- node, cplane, release: a node declares its control-plane floor
  (IdentifyResponse, release manifest, third tag line); activation refuses a
  staged generation whose floor exceeds the serving control plane (#250).
- ci: the meta-plane integration suite runs on Postgres too (#248).
- ops: datapath-check reports loss/latency and a DEGRADED verdict (exit 4)
  (refs #357, #344).


## Upgrading

Point your flake's `mvirt` input at this release and redeploy the control-plane
host first, then each node in turn:

```
nix run .#colmena -- apply boot --reboot --on <control-plane host>
nix run .#colmena -- apply boot --reboot --on <node>   # one at a time
```

This release adds no migrations, so the control-plane host rolls back the same way
a node does: boot the previous NixOS generation.
