feat(svos): [tasks].judge = app-judge after Prime's grants; card audio verified (3/3 in 4.5-5.5 s)
This commit is contained in:
@@ -23,6 +23,30 @@ configuration, enrollment and acceptance.
|
||||
| App-consistent hook | svos-dev's `/etc/qemu/fsfreeze-hook.d/50-svos` stops the SVOS services on freeze and restarts the ones that were running on thaw. ⚠ **Debian's qemu-ga does NOT run fsfreeze hooks unless configured** (no `-F` in the unit, no `qemu-ga.conf` by default). Here `/etc/qemu/qemu-ga.conf` points it at **`/usr/local/sbin/fsfreeze-dispatch`** (`configs/qemu-ga/fsfreeze-dispatch`), which unlike the stock `/etc/qemu/fsfreeze-hook` propagates failure: if a freeze hook fails, it thaws that hook and the completed ones and exits 1, so qemu-ga refuses the freeze. **Live drill 2026-10-05 1952–1953 (services running):** quiesced backup `vm/111/2026-10-06T02:52:11Z` → kernel+interface down ~1–2 s, back by themselves, health ok. Refused freeze (temporary `60-drill-refuse` after 50-svos, since removed) `vm/111/2026-10-06T02:53:03Z` → the dispatcher unwound and restarted the services, and then **⚠ vzdump did NOT abort: it logged `ERROR: unable to freeze guest fs`, backed up UNFROZEN (crash-consistent, app live), and reported `Backup job finished successfully`, rc 0.** Both images mapped from PBS and mounted read-only (`ro,noload`) on nh3-pve-2, never booted: `svos.db` integrity ok (each image still carries its ~0.9 MB WAL: keep `-wal` with the db when restoring), interface `pins.sqlite3` integrity ok, config/key/config-generation hashes equal live, table counts equal live except `events`. **Monitoring:** `scripts/check-backup-freshness.sh` now reads the LOG of every OK vzdump task and reports ERROR lines; a freeze/thaw error is an APPLICATION-CONSISTENCY FAILURE, verdict **DEGRADED, exit 4** (alerted by the daily wrapper to infra-hermes). nh3-pve-2 was not in the check's node lists at all before 2026-10-05; it is now. Drill B is acknowledged by UPID in the script |
|
||||
| Monitoring | Beszel native agent 0.18.7 (`playbooks/beszel-native.yaml`, `configs/beszel-agent/hosts/nh3-svos.env`), hub system `t6y646ifa3x7xxv`, alerts CPU>95%/15m, Disk>85%/5m, Memory>90%/10m, offline/2m. Up 2026-10-05 |
|
||||
|
||||
## Release b51aa5e / v0.0.16, the judge app (2026-10-18 1633–1642; Prime: "go with your picks, cut over now"; svos-dev thread `01M57XAEZVQ39DKNYXRTMC29S5`)
|
||||
|
||||
- **Kit:** kernel 0.0.16, app-judge 0.0.1 and UI 0.0.20 from a clean archive of the tag. The rest was carried from 57d90d6. Kit sha256 `25f78195…`.
|
||||
Playbooks: `nh3-svos-b51aa5e-v0.0.16-stage.yaml`, then `…-v0.0.16.yaml`, then `nh3-svos-tasks-judge.yaml`.
|
||||
- **app-judge:**
|
||||
- Listens on 127.0.0.1:8409, unit `svos-judge` (`configs/svos-apps/svos-judge.service`), and is in the quiesce hook (`50-svos.pre-judge` kept).
|
||||
- Config `config/apps/judge.toml` (`configs/svos-apps/judge.toml`): drafting **gen-large**; route `*` → hermes/gen-large.
|
||||
- `/etc/svos/judge.env` (root 0600) holds two values:
|
||||
- `SVOS_JUDGE_GATEWAY_KEY`: LiteLLM alias `svos-app-judge`, scoped to exactly gen-large, gen, gen-reasoning, gen-small, sec and
|
||||
sec-reasoning; vault `nh3-svos/svos-judge-gateway-key`.
|
||||
- `SVOS_APP_CREDENTIAL`: enrolled 1633 via `svos-kernel mint-secret` + `POST /auth/enroll`; vault `nh3-svos/svos-judge-credential`.
|
||||
- Manifest revision 1 pinned, no card.
|
||||
- **Config:**
|
||||
- `[[apps]] app-judge`, and the hermes runtime gets `models = [the same six]`, which is the /tasks select ∩ the judge key's catalogue
|
||||
(gen `f5330a99`).
|
||||
- After Prime's three owner grants (approved 1641:04–1641:10: app-judge → app:app-interface read, app-judge →
|
||||
app:app-terminal read, prime → app:app-judge read), `[tasks].judge = "app-judge"` (gen `13241a403080788c`). All 8 apps are up.
|
||||
- **Card audio VERIFIED with the v0.0.15 spoken form:** the three grant cards spoke in 5.5, 4.5 and 5.4 s, all `accepted`.
|
||||
Before the fix: 12 of 12 failed at 15.0 s.
|
||||
- **Rollback:**
|
||||
- Remove `[tasks].judge` (`instance.toml.pre-tasks-judge`), stop and disable `svos-judge`.
|
||||
- For the full release: stop the apps and the kernel, restore `backup/pre-b51aa5e/svos.db` + `instance.toml.pre-b51aa5e`,
|
||||
`current → releases/57d90d6`, then start.
|
||||
|
||||
## Release 57d90d6 / v0.0.15, the short spoken summons (2026-10-17 1100–1102; Prime's wording ruling via svos-dev, thread `01M5558E19Q3ZK4RRZXQG6A2Y9`)
|
||||
|
||||
- **Kit:** kernel 0.0.15 and app-voice 0.0.2 wheels from a clean archive of the tag. Everything else, the web build included, was carried byte-identical
|
||||
|
||||
Reference in New Issue
Block a user