Pulse/frontend-modern
rcourtman 4cd4921e49 fix(alerts): surface failing notification delivery on the alerts overview
Notification delivery health was rendered by exactly one component on the
destinations config tab. A destination that stops delivering is invisible by
nature, because the failure is the channel that would have reported it, so
confining the only evidence to a tab people open once during setup means the
state persists indefinitely.

Production telemetry shows it persisting. 78 installs retry every notification
to the maxAttempts ceiling and deliver almost nothing: 155,967 attempts and 221
deliveries across a week. 50 of them have not delivered a single notification
in 30 days, and another 28 delivered normally at some point and have since
stopped, which is the worse case because nothing about the estate looks
different. The dominant terminal failure classes are authentication and
configuration, so most of these are fixable in minutes by the operator who
cannot currently tell there is anything to fix.

Extract the delivery-health load into useNotificationDeliveryHealth and render
the existing warning on the alerts overview as well as the destinations tab.
The shared hook also holds the trigger rule, so both surfaces agree on what
counts as needing attention and neither can warn before the first load
resolves.

This does not make Pulse monitor its own delivery. Every alert type is
resource-scoped and there is no system-scoped alert concept, so raising this
like any other monitored condition remains open.

Proof: useNotificationDeliveryHealth.test.tsx pins the trigger rule across
healthy, degraded, server-reported-unavailable and unreachable-endpoint cases,
plus the silent-until-loaded guard. Verified live at 1280x800 and 375x812: a
healthy queue leaves the overview clean, and a degraded payload renders the
warning above the stat cards with the dominant failure class named.

Contract-Neutral: frontend-only reuse of the existing /api/notifications/health payload on a second surface; no subsystem Canonical Files/Shared Boundaries/Extension Points delta and no API change. Proof ships as useNotificationDeliveryHealth.test.tsx; the alerts verification-artifact list enumerates existing filenames, so a new hook's own test cannot appear on it.
2026-08-18 20:20:30 +01:00
..
prototypes Refine prototype row density cues 2026-05-15 16:19:12 +01:00
public Prepare v6.3.0-rc.2 release 2026-08-18 13:31:21 +01:00
scripts style(frontend): remove semicolons from product copy 2026-08-18 10:52:38 +01:00
src fix(alerts): surface failing notification delivery on the alerts overview 2026-08-18 20:20:30 +01:00
.bundlesize.json Refresh API access bundle budget 2026-08-11 17:13:22 +01:00
.gitignore chore(frontend-modern): patch dev-dependency advisories 2026-07-08 08:26:26 +01:00
.jscpd.json
.prettierignore
.prettierrc
browser-verification.json fix(alerts): surface failing notification delivery on the alerts overview 2026-08-18 20:20:30 +01:00
DESIGN_SYSTEM.md
eslint.config.js
hosts-tab.txt
index.html
package-lock.json fix(frontend): update vulnerable sanitizer dependencies 2026-08-08 02:59:43 +01:00
package.json style(frontend): remove semicolons from product copy 2026-08-18 10:52:38 +01:00
postcss.config.js
tailwind.config.js Simplify settings shell and nav guide 2026-04-23 15:49:00 +01:00
ThresholdsTableTop.txt
tsconfig.json
tsconfig.node.json
update_skeletons.cjs
update_sparkline.cjs
update_sparkline.js
update_sparkline_size.cjs
vite.config.ts Stop dev-server full reloads when test files are saved 2026-07-10 11:09:40 +01:00