Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EPZ4GJ8L5Jqf8UiPwbn1kt
3.0 KiB
felhom.eu — task reports
Overwrite this file with a summary of the most recent task only (uniform with the other repos; not cumulative). The cumulative hub history lives in hub/CHANGELOG.md.
Agent capability-degraded operator alert — hub leg (HostCapabilityChecker), hub v0.19.0
Date: 2026-06-29 · Baseline: hub main @ 1958204 (v0.18.0) → v0.19.0 @ b7b165b;
manifest synced @ 2312572. Companion: felhom-agent v0.44.0.
What & why
felhom-agent v0.44.0 now rides a capabilities snapshot on its host report (each required sudo -n
grant: ok/degraded). This is the hub leg: detect the ok→degraded transition and alert the operator
— closing the loop that let the 2026-06-28 non-root-cutover regressions go undetected until breakage.
Implementation
monitor.HostCapabilityChecker(NEW): a deliberate sibling ofHostStalenessChecker— same per-host state map, seed-without-event, emit-only-on-transition. A host isdegradediff its latest report has any Critical capabilitystatus:"degraded"; non-critical degradations never alert. Runs on the existing 60s sweep alongside the staleness checkers.- Events:
agent_capability_degraded(warning, ok→degraded; names the degraded caps + gated features in message + details JSON),agent_capability_recovered(info, degraded→ok). Routed via the existingDispatcher.ProcessEvent— operator-only (not a customer notification toggle, same mechanism ashost_stale) with the standard 1 h operator cooldown. store.GetHostCapabilities(NEW): reads the snapshot from the latest host-report'sreport_jsonper host, keyed onMAX(id)(notreceived_at— within-second ties would return multiple rows). No schema migration. A pre-v0.44.0 agent (nocapabilities) reads asok→ no false alert.- Cross-repo
host-report.golden.jsonmirrorscapabilities: [](byte-identical with the agent copy).
Tests (all green: go build/vet/test ./...)
TestHostCapabilityChecker (seed no-event → ok→degraded ONE event → steady degraded none →
degraded→ok recovered), …_NonCriticalIgnored, …_OldAgentNoCaps. The golden contract test +
key-set tests pass with the mirrored field.
Live validation (k3s felhom-system) — deployed + verified
- Built + pushed
felhom-hub:0.19.0on 180; bumpedmanifests/hub.yaml; ArgoCD hard-refresh → sync → rollout. Synced / Healthy, running image…felhom-hub:0.19.0. - Startup:
felhom-hub 0.19.0 starting+Host capability checker initialized: 1 ok, 0 degraded— the checker is live and reading the demo host's snapshot (agent reports 40/40 ok).
NOT yet live-validated (deferred)
The full live agent→hub→operator-email degraded transition: the hub alert fires only on a Critical capability degraded, which on the live host would require removing a Critical grant (forbidden — would re-break drives) or a separate test host, plus a real operator email. Fully covered by the unit tests above. Deferred to a scratch-host exercise.