# mvirt 0.14.2

migrations: no
wire: unchanged
rev: a53136451c591f19080eb048fd0ac83299ee447d

v0.14.2 — a fresh install bootstraps to a working three-member platform

Fixes found bringing mvirt-1/2/3 up from zero on 0.14.1.

- node: the control-plane placement is level-applied on every resync. An
  adopted host whose slice had arrived before its adoption never started its
  replica (no new slice follows an adoption); both fleet replicas sat
  Inactive until a manual agent restart. The node now re-asserts the item on
  its own resync and right after the adoption exchange.
- cplane: the control-plane growth reconciler waits for first-run setup, like
  every other substrate reconciler — the raft is not grown off the boot seed's
  group flags before the wizard has said which groups carry controlPlane.
- cplane: the manifest refines the seeded node group case-insensitively
  (wizard 'Default' vs seed 'default' produced a duplicate group and bound the
  offerings to the empty twin); creates new groups before demoting seeded
  ones; keeps the seed's controlPlane flag (and says so) instead of refusing
  the whole manifest when its nodes still sit in it.
- cplane: nodeGroups[].offers omitted now means every instance type; an
  explicit [] means none. A wizard-installed platform can place VMs (#108).

Upgrade: control-plane host first, then nodes one at a time; a node rolls back
by booting the previous generation.


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