Scanner status handlers all derived operationId "status" from their fn
name, so Swagger UI's "Try it out" executed the first one (ARP) — the
DHCP doc hit /api/arp_scanner/status. Same collision for read/list/
register/unregister. Each path now sets an explicit unique operation_id.
main's tokio::join!(...).0 kept only the ARP result and silently dropped
the other tasks' errors, so a DHCP scanner that failed to bind port 67
just showed "off" with no log. Each task is now wrapped to log its error.
Fixes#5
Add a GET /api/config endpoint exposing the front-end-facing backend
configuration (currently the notification delivery method, grouped under
a nested "notifications" object so the shape can grow). The settings
screen fetches it on init and only shows the per-device push toggle when
the backend method is "push" (and the platform supports push, which keeps
it off the browser).
Also fold in related push-notifications cleanups: fix the Android app
label ("frontend" -> "OOTT") so the notification permission dialog reads
correctly, remove the completed push_notifications.md plan, and update
TODO.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>