Quick update with results from a diagnostic build I ran on iOS/watchOS 26.5.
To validate the distinction you described between the NSE-returned content path and the locally posted notification path, I shipped an internal TestFlight build where the NSE additionally posts a local UNNotificationRequest via UNUserNotificationCenter.add() in parallel with the standard contentHandler() call.
The local notification uses the same title and body as the NSE-returned notification, except for a [L] prefix in the body and a local-z- identifier prefix. The same [L] marker is visible on iPhone and Apple Watch, so the local-route notification can be reliably matched across both devices.
Test protocol:
Send a message with a known timestamp in the body, for example Timestamp 00:19
Wait for delivery on Apple Watch
Turn the Watch screen off
Wait approximately 2–3 minutes
Wake the Watch and open Notification Center
Result on Apple Watch, using iOS 26.5 + watchOS 26.5:
Local-route notification, [L] Timestamp 00:19: correct relative timestamp, for example “2 minutes ago” when viewed approximately 3 minutes after delivery.
NSE-route notification, Timestamp 00:19: incorrect relative timestamp, shown as “Now” despite the notification being several minutes old.
A second build with the local probe disabled, leaving only the original NSE-route path matching production, confirmed that the NSE-route notification continues to drift on its own. In that build, I observed its relative timestamp in Apple Watch Notification Center jump from “1 minute ago” to “14 minutes ago” within a few real minutes, i.e. non-monotonic timestamp updates unrelated to the actual delivery time.
On iPhone Notification Center, both paths render the correct timestamp consistently. The issue appears to be Watch-only.
One interesting note on the symptom in 26.5: on earlier versions, the drift typically appeared as “X minutes/hours ago” on a fresh notification. On 26.5, I’m now also seeing the inverse pattern — “Now” on a notification that is several minutes old — as if the relative timestamp is being re-anchored to a Watch wake or Notification Center refresh event rather than to the original delivery time. This appears consistent with the same underlying issue, just surfaced in a different way.
These results seem to support the theory you outlined: the issue appears specific to the path that mirrors NSE-returned push content to Apple Watch Notification Center, while routing the final notification through UNUserNotificationCenter.add() from the NSE preserves the correct timestamp on the Watch.
Given this, I would like to move forward with the architectural refactor you described: having the NSE post the final local notifications and dropping the original push via the Notification Filtering entitlement.
The entitlement request I submitted earlier is still in the “Submitted” state. If this is the right entitlement for that architecture, any guidance on the recommended follow-up channel, contact, or technical framing would be very welcome.
I’ll attach screenshots from the diagnostic build to the Feedback Assistant report when I file it, and I’ll post the FB number here as soon as it’s available.
Thanks again,
Stefano Bigioggero