In researching the reply from Mathew D'Amico to this thread, I found that the issue that I've been seeing on my site with notifications getting stuck as unread is because they have been removed from the list to display because they don't have a message. Since they aren't displayed, the option for the user to mark them as read also isn't presented.
See Notification List Widget - list.vm (lines 49-51):
#set ($notificationMessage = false) #set ($notificationMessage = $notification.Message('Html')) #if ($notificationMessage)
In one instance, once I saw what the targetUrl was for a notification that was "stuck", I realized I was on the page at the time as the reply was posted so I'm guessing that either the original post or the reply that had generated the notification got marked, but not the other and somehow the message was removed from a notification.
Before I add some clean up code to catch notifications that don't have a message and automatically mark them as read, are there any valid notifications without messages that should be left as unread?