Merge candidate 20260906T091009Z-web-product

Change-source: pulse-maintainer
This commit is contained in:
pulse-triage[bot]
2026-09-06 10:37:42 +01:00
8 changed files with 301 additions and 44 deletions
@@ -15,6 +15,17 @@
## Purpose
Delivery-attempt and held-event reads in Destinations use latest-started
refresh ownership. A delayed mount response must not overwrite evidence from
configuration Retry or a queue-action refresh, including a newer unavailable
result. Attempt loading reflects only the latest attempt request; held events
remain independently asynchronous. Scope disposal abandons both reads.
Verification: ordinary overlap, held-event and disposal cases in
`useNotificationDeliveryLog.test.tsx`, registered mount/Retry coverage in
`useAlertDestinationsTabState.test.tsx`, and positive rendered-content assertions
in `scripts/check-delivery-log-ordering.mjs`. Scripted browser evidence is not
proof of backend delivery or receipt by an independent recipient.
The shared delivery-health card wraps action groups according to available
space, retaining readable explanation width when Review, Retry, Dismiss and
Refresh appear together. Its heading uses the opaque semantic foreground,
@@ -4774,6 +4774,17 @@ requests only the two held-notification event types over the same seven-day
window as its delivery-attempt log, with an explicit bounded limit. That event
request runs independently of `GET /api/notifications/delivery-log`; failure
of either API must not recast the other response as empty or unavailable.
Overlapping Destinations mount, configuration Retry and queue-action refreshes
use latest-request ownership: only the most recently started refresh may
replace delivery attempts, unavailable/loading flags or held-event rows.
An older success cannot hide a newer unavailable result, and an older failure
cannot erase newer evidence. Held-event completion remains independent of the
attempt-log loading flag. Disposing the owning Solid scope ignores pending
completions and prevents further reads through the abandoned loader.
Regression coverage lives in the delivery-log and destinations-tab state tests;
`scripts/check-delivery-log-ordering.mjs` additionally asserts positive
rendered current-attempt content in Chromium at desktop and mobile widths
using scripted APIs, not installed delivery or recipient evidence.
`GET /api/alerts/incidents` with both `alertIdentifier` and `started_at` is an
occurrence-qualified timeline read. The incident/resource-history projection
@@ -20,6 +20,18 @@
## Purpose
The Destinations delivery-log state primitive assigns a generation to each
refresh and rejects stale completions before updating rows, unavailable state
or loading state. Held-event reads share that generation without blocking the
attempt-log spinner. Cleanup prevents abandoned requests from updating state
and makes subsequent calls through the disposed loader inert; it does not
cancel transport requests. Latest-request failure remains unavailable rather
than being concealed by an older successful response.
Verification combines the hook's ordinary race/disposal tests, registered
mount/Retry integration, and `scripts/check-delivery-log-ordering.mjs` Chromium
content assertions at desktop and narrow widths. This is component-level
presentation proof with scripted APIs, not full-tab or installed qualification.
The shared delivery-health card wraps action groups according to available
space, retaining readable explanation width when Review, Retry, Dismiss and
Refresh appear together. Its heading uses the opaque semantic foreground,