diff --git a/documentation/audits/SPIKE-controller-agent-channel-health-2026-06-29.md b/documentation/audits/SPIKE-controller-agent-channel-health-2026-06-29.md index cb69110..f30acdf 100644 --- a/documentation/audits/SPIKE-controller-agent-channel-health-2026-06-29.md +++ b/documentation/audits/SPIKE-controller-agent-channel-health-2026-06-29.md @@ -100,6 +100,17 @@ No wrinkle blocks a straightforward slice. The single thing to get right: **clas error (latching, config) distinctly from runtime errors (mostly transient)**, and **probe via the memoized client** so the check can't lie. Debounce transient reasons (N≥2) to avoid restart-blip noise. +## IMPLEMENTED 2026-06-29 — controller v0.90.0 (+ hub v0.20.0) + +The channel-check slice shipped per this spike's GO: `internal/channelhealth` (a ~60s scheduler job +probing via the memoized `Server.ProbeAgentChannel`, the Q1 classifier, N≥2 debounce for transient +reasons, first-obs seed) + an English operator-only Notifier event + a Hungarian dashboard banner. +Live-validated on guest 9201: a clean agent restart fired **no** alert (debounce); a sustained stop +logged `transient down (unreachable, 1/2) — suppressed` then `agent channel DOWN (up→down:unreachable)` ++ the dashboard banner; start → `recovered`. One thing the spike didn't predict: the hub's +`allowedEventTypes` allowlist rejected the controller-pushed `agent_channel_*` events (HTTP 400) — +fixed in **hub v0.20.0**. See `felhom-controller/REPORT.md` + CHANGELOG v0.90.0. + ## Teardown — confirmed Throwaway `channelspike_test.go` removed (build-server working tree clean — `git status` shows it