# mvirt 0.18.2

migrations: no
wire: unchanged
rev: b2023932829d8a1e1651a5cb3f44c2dabd7cf27b

Release 0.18.2 — the 0.18.1 level-convergence fixes, plus the UpdateNic self-deadlock fix 0.18.1
shipped with. 0.18.1 must not be deployed: its UpdateNic handler parked forever holding the vNIC
mutation lock (an if-let scrutinee kept the nics read guard alive into its own write), freezing
every node's reconcile on the first update of a managed vNIC.

Carries everything in 0.18.1: the border gateway (#267), vxlan0 bring-up (#271) and the per-vNIC
datapath (#272) in mvirt-ebpf are level-set — converged on every pass from observed state; the
cplane re-derives a connected node's Online status, underlay IP and identity on every resync tick
(#273); a platform-manifest pass that only HELD no longer stamps the applied hash, so bootstrap
keeps retrying instead of freezing with the work undone (#274). On top: the UpdateNic deadlock fix,
and the border withdraw's kernel probe moved behind the BorderLinks seam (the gate still observes
the kernel, the tests observe the recorded double).


Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01577XCdTfo1u5tUo9gM6aKP

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