v0.3.0 — telemetry, state file, resume + NVML recovery
Telemetry
- dGPU power draw, graphics clock, VRAM used/total, and a top-5 per-process VRAM breakdown on every tick — in the GUI (new VRAM panel with sparkline, session peak and per-process rows), the tray tooltip, and the CLI.
- Process names come from
/procargv0 with NVML as fallback, so Chromium-style command lines and Wine/Proton Windows paths reduce to a clean binary name. Game detection is rebuilt on the same list; one NVML pass per tick feeds both. cryoctl statusprints a human summary (--jsonfor the raw frame).cryoctl watch --log FILE.csvappends a CSV stream for long leak-hunt sessions.
Robustness
/etc/cryo/config.jsonis now overrides-only and the daemon never rewrites it. Runtime state (last lighting, the curves-off latch a manual boost sets) moves to/var/lib/cryo/state.json. Flipping the curves switch clears the latch. A broken config or state file logs and falls back to defaults instead of keeping the daemon — and the Thermal Guard — down.- NVML is retried every 30 s while unavailable, so starting before the NVIDIA driver loads no longer disables game detection for the session.
- The lighting controller is reopened once on a USB error.
- New
reapplyop /cryoctl reapplyre-asserts lighting, platform profile and NVML;cryod-resume.serviceruns it after suspend and hibernate. - Telemetry subscribers that are closing or stop reading are dropped instead of buffered forever.
Packaging
cryod.service:After=systemd-modules-load.service,StartLimitIntervalSec=0, generic description.- The installer ships and enables
cryod-resume.service, restarts the daemon on re-run (the update path), and refuses to run without a sudo caller instead of falling back to a hardcoded username. - pytest suite (37 tests) wired into CI.
Upgrading
cd cryo && git pull && sudo ./packaging/install.sh
Existing config files keep working; they are simply treated as overrides from now on.