b51fefca2b
The evaluator only runs inside the monitor loop, so a rule on an idle device never fired. Now creating/updating/deleting an alert rule calls _sync_keepalive_to_rules: if the unit has any enabled rule, persist NL43Config.monitor_enabled=True (so the boot auto-start re-enables it after a restart) and turn on runtime keepalive. Never auto-OFF — a device may be kept alive for other reasons; operators control that on /admin/slmm. Alert CRUD endpoints are now async to await the monitor manager. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>