Acknowledgement + re-notify (escalation) for warnings #81

Closed
opened 2026-07-18 05:31:42 +00:00 by claude-bot · 1 comment
Contributor

Generalize what Pushover priority-2 already does — for life-threatening warnings (Tornado, Flash Flood Emergency), keep re-sending on an interval until someone acknowledges via a link/reaction. Missed because the MVP was deliberately fire-and-forget. Effort M, value Medium-High. Dependency: only makes sense after the delivery-outbox work (F-11) gives dispatch a retry/state spine — otherwise there's nowhere to track "acked."


Filed from the 2026-07-17 codebase audit (docs/.internal/report-2026-07-17.md), finding I-11.

Generalize what Pushover priority-2 already does — for life-threatening warnings (Tornado, Flash Flood Emergency), keep re-sending on an interval until someone acknowledges via a link/reaction. Missed because the MVP was deliberately fire-and-forget. Effort M, value Medium-High. Dependency: only makes sense *after* the delivery-outbox work (F-11) gives dispatch a retry/state spine — otherwise there's nowhere to track "acked." --- _Filed from the 2026-07-17 codebase audit (`docs/.internal/report-2026-07-17.md`), finding I-11._
Author
Contributor

Done in #102 (merged), building on the #50 outbox. Ack + escalation fields on the dashboard SentAlert row (migration 0023); POST /api/alerts/{id}/ack (any viewer, CSRF) + a dashboard "Acknowledge" button. A scheduler job re-notifies active, unacknowledged, warning-class alerts every ESCALATION_INTERVAL_MINUTES up to ESCALATION_MAX_COUNT, reusing the delivery outbox with kind="escalation" (excluded from the alert-retry worker so a reminder and a retry can't both fire); bounds only advance on a successful send, and acknowledging/clearing/expiry/snooze stops it. Opt-in via ESCALATION_ENABLED (default off, since re-notifying can be noisy). One flagged UX follow-up: acking a grouped multi-location dashboard card acks the representative location's lifecycle, not every location sharing the nws_alert_id.

Done in #102 (merged), building on the #50 outbox. Ack + escalation fields on the dashboard `SentAlert` row (migration 0023); `POST /api/alerts/{id}/ack` (any viewer, CSRF) + a dashboard "Acknowledge" button. A scheduler job re-notifies active, unacknowledged, warning-class alerts every `ESCALATION_INTERVAL_MINUTES` up to `ESCALATION_MAX_COUNT`, reusing the delivery outbox with `kind="escalation"` (excluded from the alert-retry worker so a reminder and a retry can't both fire); bounds only advance on a successful send, and acknowledging/clearing/expiry/snooze stops it. Opt-in via `ESCALATION_ENABLED` (default off, since re-notifying can be noisy). One flagged UX follow-up: acking a grouped multi-location dashboard card acks the representative location's lifecycle, not every location sharing the `nws_alert_id`.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/WeatherBot#81
No description provided.