# nh3-svos application-consistent backup hook (svos-dev, vendored 2026-10-05) - `50-svos` → installed as `/etc/qemu/fsfreeze-hook.d/50-svos` (root 0755) on nh3-svos. Authored by svos-dev (SHA256 `f94cbba36fc410db2334a7c1fd552ffef60f16831f4e03501c53a4785970b556`, identical to the installed copy). On freeze it records which SVOS services are active (root-private `/run/svos-backup/state.json`), stops them, and requires `inactive` + `Result=success` within 35 s. On failure it queues a restart and keeps the record. On thaw it restarts only those services, within 15 s, and keeps the record if a restart fails. - `test_quiesce.py`: the hook's six failure/recovery controls (`python3 -m unittest test_quiesce` from this directory; the loader points at `50-svos` beside it). - Runs under `../fsfreeze-dispatch`, which qemu-ga calls via `/etc/qemu/qemu-ga.conf`. Without that config, Debian's qemu-ga runs no hooks at all. - If the voice service is ever enabled, add it to `SERVICES` before enabling it (svos-dev). - 2026-10-07 (a737a06 refresh): `SERVICES` gained `svos-terminal`, `svos-knowledge` and `svos-postoffice` before they were started. The hook restores only the units that were active at freeze, so a declared-but-stopped app (postoffice until its bridge handle exists) is recorded as inactive and left stopped. - 2026-10-08: `svos-voice` added (Prime: voice on), before it started.