Requested: be told when the panel server or a remote has system updates. The
panel already knew how to check both — so_os_update_available for the panel
host, remote_os_check_updates over SSH — but only ever when someone opened a
page and looked.
New "os_updates" event, on by default, toggleable in Notification settings
like every other alert.
Checked once a DAY, not on the monitor's 60s tick: each check runs `apt
update`, a network fetch on every host. It rides the existing 30-minute
update-check ticker (which already does the panel-update and TLS-expiry
alerts) rather than adding another thread, and self-throttles from there.
It alerts on the TRANSITION — nothing waiting to something waiting — and
re-arms once the host is patched. Being told every morning that the same
twelve packages are still there is how an alert becomes something you filter
out, which is the failure this whole session started with.
Security updates are called out separately, in the title and the count:
"Security updates on Panel Server — 2 security updates of 3 waiting: openssl,
curl". Both parsers dropped the apt suite ("jammy-security"), the one field
that distinguishes a security update; they now keep it as an additive key, so
existing callers are untouched.
An unreachable host is skipped rather than probed — that is the monitor's
alert to raise, not this one's.
Ten checks drive the real function with stubbed hosts. Two of them were
worthless when first written and mutation testing said so: the throttle check
ran with the host already alerted, so the transition guard hid it; and the
"not probed" check asserted silence, which a swallowed exception provides
anyway. Both rebuilt to assert the thing itself. All four guarantees now fail
under mutation.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
You asked to be told when the panel server or a remote has system updates. The panel already knew how to check both —
os_update_availablefor the panel host,remote_os_check_updatesover SSH — but only ever when someone opened a page and looked.New
os_updatesevent, on by default, toggleable in Notification settings like every other alert.Design decisions worth flagging
Once a day, not every tick. Each check runs
apt update— a network fetch on every host. It rides the existing 30-minute ticker (which already does panel-update and TLS-expiry alerts) rather than adding another thread, and self-throttles to 24h from there.It alerts on the transition, and re-arms when the host is patched. Being told every morning that the same twelve packages are still waiting is how an alert becomes something you filter out — which is the exact failure this session started with.
Security updates are called out separately. Both parsers dropped the apt suite (
jammy-security), the one field that distinguishes a security update. They now keep it as an additive key, so existing callers are untouched.An unreachable host is skipped, not probed — that's the monitor's alert to raise, not this one's.
Tests
Ten checks drive the real function with stubbed hosts. Two were worthless when I first wrote them, and mutation testing said so:
Both rebuilt to assert the thing itself. All four guarantees now fail under mutation: transition, throttle, security detection, and skipping unreachable hosts.
unit 892 · smoke 313 → 323 · rbac 65 · manage 21 · template_actions 7 · lint clean.
🤖 Generated with Claude Code