The app follows GET /api/v2/events instead of asking /schedules every 15 s; each `schedules` frame goes to the page (the Scheduled page redraws from it) and a schedule's newly finished last run is told by the server's decision: `notified` when it already told a device, else its `notify` policy (matters: a result, not a silent one; always: silent too; never: nothing), and a failure the first time in a row and on the third, which asks whether to pause. A run is told once, also when it finished under the id it had while running. Signing out or another server ends the stream; a server without it is asked again every 5 minutes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>