# mvirt 0.26.1

migrations: no
wire: unchanged
rev: 365b255a3085a9c412fda096b90f846862c20e49

mvirt 0.26.1

The daemons survive a panicking task without wedging their shared state,
a manifest PUT no longer loses inline secrets silently, and a break-glass
release runs the same shape checks as CI.

- ebpf, node: every std Mutex in mvirt-ebpf and mvirt-node recovers its
  guard after a panic (46 sites, invariant stated per site); a sqlite
  transaction torn by a panic is rolled back before the lock is reused
  (#324).
- cplane: manifest PUT names in `consumedSecrets` every inline secret a
  held or failed pass consumed but did not seal, and the applied-secret
  markers commit in the same transaction as the sealed value (#384);
  the five ADR-0051 §7 export/PUT loose ends are closed (#255).
- dist: release-shape checks live in dist/release-lib.sh, shared by the
  release workflow, release-facts.sh and the break-glass publish path
  (#141). This release is the first built through it.
- tests: the login throttle tests run on an injected clock (refs #145).


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