Split out of #1535 so it is not lost when that thread closes. Surfaced by the issue audit; the work exists only inside that thread today and has no tracking issue of its own.
The gap
Lite/Services/ConnectionEdgeDetector.cs:41-47 returns None in two cases that matter:
- The first-ever observation of a server. If the app starts while a server is already unreachable, there is no previous state to form an edge against, so no "Unreachable" alert ever fires.
- Every offline-to-offline poll. A standing outage produces exactly one alert at the moment of transition and then goes silent, however long it lasts.
Both are correct edge-detection behavior in isolation. They are wrong for the use case the reporter in #1535 actually has: a webhook pointed at GitHub repository_dispatch driving an auto-heal loop. That loop worked on 7/18 and 7/19 and did not on 7/20, and this is why.
Proposed shape (Erik's, from the #1535 thread)
Opt-in, so the default stays quiet:
- Re-fire "Unreachable" every N minutes while a server remains down.
- Optionally fire once at startup if a server is already down.
Blocked on one answer
Sizing depends on a question asked in #1535 on 2026-07-20 and never answered: during the 7/20 outage, was the app running continuously, or did it restart while the server was already unreachable?
- If it was running continuously, case 2 (no re-fire) is the whole story and the fix is the re-fire timer alone.
- If it restarted, case 1 is also in play and the startup-fire behavior is needed too.
Notes
Split out of #1535 so it is not lost when that thread closes. Surfaced by the issue audit; the work exists only inside that thread today and has no tracking issue of its own.
The gap
Lite/Services/ConnectionEdgeDetector.cs:41-47returnsNonein two cases that matter:Both are correct edge-detection behavior in isolation. They are wrong for the use case the reporter in #1535 actually has: a webhook pointed at GitHub
repository_dispatchdriving an auto-heal loop. That loop worked on 7/18 and 7/19 and did not on 7/20, and this is why.Proposed shape (Erik's, from the #1535 thread)
Opt-in, so the default stays quiet:
Blocked on one answer
Sizing depends on a question asked in #1535 on 2026-07-20 and never answered: during the 7/20 outage, was the app running continuously, or did it restart while the server was already unreachable?
Notes
webhook/Delivered. This issue is only about when the connection alert fires, not about delivery.