# mvirt 0.24.5

migrations: no
wire: unchanged
rev: 369192fb55601acb7ad872c78124cb5598466402

mvirt 0.24.5

A patch release: observed state is re-asserted on a level cadence, and the
gateway agent stops retrying two failures forever.

What changed

- #331: the node re-publishes its full observed projection every 5 minutes
  (MVIRT_OBSERVED_REASSERT_SECS) even when nothing changed. It used to
  publish only on a change, so a report the control plane lost or did not
  apply stayed lost until the object's next transition — for an exited
  container, never. The cplane's writes are change-guarded, so a re-assert
  costs one report burst and no store writes.
- #327: the gateway agent binds its ADS listener explicitly and exits after
  a minute of `AddrInUse` instead of rebinding silently forever while Envoy
  is served nothing; and an endpoint whose proxy-config body does not decode
  now counts as a failure of that endpoint, so the agent rotates away.

Also carries everything in 0.24.3 and 0.24.4 (#358 level-owned report
consumer, #355 container logs after pod-VM re-creation, #322 seeds once per
term, #326 outbound HTTP error causes, #336 registry refusal wording).

Upgrade: ordinary host-by-host roll (release.md §C1 + §C3). No store migration.
The fleet gateway pods keep their pinned gw-agent image until it is rebuilt.


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