Pulse/internal/notifications
rcourtman 76dc690840 Suppress recovery notifications when the firing never left the queue
An alert that resolved while its firing notification was still in the
grouping window or waiting in the persistent queue (alert delay pushes
activation close to resolution; quiet-hours replay defers delivery)
produced a recovery-only notification: CancelAlert dropped the queued
firing, but LastNotified had been set optimistically at dispatch, so
the resolved-notification gate believed the firing had been sent.

CancelAlert now reports whether it cancelled a firing notification that
had not been delivered (grouping window entries and pending queue rows;
mid-send rows are excluded because their delivery may still complete),
and handleAlertResolved suppresses the recovery in that case. This also
covers the quiet-hours replay bypass: a recovery only follows a deferred
firing if the replay was actually delivered.

Addresses #1553
2026-07-11 18:28:28 +01:00
..
concurrency_test.go feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
email_enhanced.go Thread alert emails with their resolved notifications 2026-07-11 18:22:07 +01:00
email_enhanced_test.go Thread alert emails with their resolved notifications 2026-07-11 18:22:07 +01:00
email_legacy_coverage_test.go Port RC3 maintenance fixes from v5 2026-05-01 20:28:11 +01:00
email_providers.go chore: remove more dead code 2025-11-27 00:10:55 +00:00
email_template.go feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
email_template_test.go feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
httptest_ipv4_test.go feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
notification_utils_test.go feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
notifications.go Suppress recovery notifications when the firing never left the queue 2026-07-11 18:28:28 +01:00
notifications_additional_test.go Harden scanned request and storage boundaries 2026-07-09 17:22:29 +01:00
notifications_resolved_apprise_test.go Harden scanned request and storage boundaries 2026-07-09 17:22:29 +01:00
notifications_security_cli_test.go Harden scanned request and storage boundaries 2026-07-09 17:22:29 +01:00
notifications_security_http_test.go Harden Apprise server URL base handling 2026-04-01 15:50:30 +01:00
notifications_test.go Suppress recovery notifications when the firing never left the queue 2026-07-11 18:28:28 +01:00
provider_client_isolation_test.go Add entitlement-gated report branding 2026-06-02 18:11:25 +01:00
queue.go Suppress recovery notifications when the firing never left the queue 2026-07-11 18:28:28 +01:00
queue_observability_test.go Suppress recovery notifications when the firing never left the queue 2026-07-11 18:28:28 +01:00
queue_queryplan_test.go feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
queue_test.go Suppress recovery notifications when the firing never left the queue 2026-07-11 18:28:28 +01:00
security_utils_test.go feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
templates_test.go Forward-port webhook JSON template escaping 2026-04-01 17:04:40 +01:00
webhook_allowlist_test.go Harden repository advisory boundaries 2026-05-24 08:15:29 +01:00
webhook_client_test.go feat: Pulse v6 release 2026-03-18 16:06:30 +00:00
webhook_enhanced.go Register template funcs on the enhanced ntfy payload path 2026-07-11 18:11:22 +01:00
webhook_enhanced_test.go Register template funcs on the enhanced ntfy payload path 2026-07-11 18:11:22 +01:00
webhook_retry_test.go fix(notifications): classify webhook HTTP retries canonically 2026-03-27 12:15:17 +00:00
webhook_security_test.go Pin metadata GET zero-record payload contract 2026-06-10 10:53:57 +01:00
webhook_signing_test.go Pin metadata GET zero-record payload contract 2026-06-10 10:53:57 +01:00
webhook_templates.go Fix security scan findings 2026-07-01 09:55:35 +01:00
webhook_tenant_identity_test.go Stamp tenant identity into alert webhook payloads 2026-06-10 10:03:39 +01:00