Daemon-mode metrics fix + cross-OS metric-source hygiene. Internal correctness release — no user-visible feature changes.
Daemon-mode crash (latent regression in v9.6.2)
TRCC_DAEMON=1 users would crash on every metrics-touching command after the 2026-05-14 chain migration (trcc info, trcc led test, theme overlay loops, /system/metrics). TrccProxy had no os facade. Fixed with OSFacadeProxy + new _meta.metrics IPC route + HardwareMetrics wire serialization. Verified by dev/smoke_daemon_metrics.py.
Capability probe-once at construction
LinuxPlatform.__init__ now resolves subprocess tools (sensors, dmidecode, lshw, smartctl) via shutil.which() once at startup. Read paths consult the cached map. Dev / minimal-install boxes used to spam "lshw not installed — mem_clock lshw probe unavailable" every metrics tick — now ONE INFO line at startup naming what's available and what's absent, then silence.
NVML probe-at-discovery (sysctl-style)
Each NVIDIA card's supported metric set is frozen at _discover_nvidia time. _poll_nvidia is a flat loop over what each card answers. No per-tick try/except for "NVML_ERROR_NOT_SUPPORTED" cases on cards lacking fan/power/mem-info.
Cross-OS log hygiene
Same "no failure wording for normal absence" pass across Windows, macOS, BSD adapters. 18 noisy log lines neutralized.
Smoke harnesses
dev/smoke_metrics_chain.py— 9 checks pinning every formersvc.all_metricscall site.dev/smoke_l1_unification.py— verifies GUI panel + LCD overlay + LED engine observe the sameHardwareMetricsrecord.dev/smoke_daemon_metrics.py— boots a daemon subprocess, drivesTrccProxy.os.metricsover IPC.
Lambda audit
69 lambdas eliminated from src/trcc (119 → 50). Every callable in the runtime is now a named class method, function, or operator.itemgetter-style accessor. Qt signal slots use setProperty + self.sender().property(key) for variable-cardinality button bindings.
See doc/CHANGELOG.md for full detail.